You are on page 1of 11

1 seguridad del servidor postgres (motor base de datos)

1. Motor de bases de datos PostgreSQL


PostgreSQL es un motor de bases de datos relacionales (RDBMS) que
verifica integridad referencial con gran funcionalidad como base de datos,
aunque un poco ms lenta que otros motores! Su licencia es tipo BSD! "n
esta secci#n describimos brevemente la instalaci#n $ uso en un sistema
%penBSD!
1.1. Primera instalacin del servidor
Para emplearlo por primera ve& instale el paquete postgresql'server'(!)!*
(tambi+n es recomendable postgresql'docs'(!)!*p))!
1.2. Habilitando autenticacin
Por defecto la configuraci#n de PostgreSQL no e,ige autenticaci#n para
cuentas que se conecten desde la misma mquina! Sin embargo esto debe
me-orarse si tiene varias cuentas en el mismo servidor! Para esto cambie la
clave del administrador con
./0
1
2 psql '3 4postgresql template5
template562 alter user 4postgresql 7it8 pass7ord 9aqui4clave9:
1.3. reacin de una base de datos
Para crear la base de datos prueba desde la cuenta 4postgresql o desde una
cuenta que tenga permiso para crear bases de datos1
createdb test
psql test
1.!. "so de una base de datos
Puede emplear ps#l, la interfa& te,to que acepta comandos SQL $ que se
distribu$e con PostgreSQL! Para esto, entre a una base (digamos b5;;()
como un usuario (digamos u5;;() con1
psql '3 u5;;( 'd b5;;(
"n esta interfa& puede dar comandos SQL $ algunos comandos internos que
puede listar con $%! <lgunos e-emplos de operaciones =tiles son1
>dt
para ver tablas disponibles!
>d usuarios
Describe la estructura de la tabla usuarios
select victim4nombre,victim4apellido from victimas 78ere
victim4edad?65@:
Que muestre los nombres de niAos de 5@ aAos o menos listados en la
tabla victimas
>8 update
Da a$uda sobre el comando B>tt updateC (que permite actuali&ar
registros de una tabla!)
1.&. 'e(erencias ) lecturas recomendadas
Documentaci#n del paquete postgresql (R"<DM"!%penBSD, DESF<LL)!
Documentaci#n disponible en el paquete postgresql'doc (ver
.postgresql'doc0)!
Pginas del manual de 3ni,1 psql (5)
2 Seguridad para una base de dato
La seguridad de la base de datos esta implementada en varios niveles1
Protecci#n de los fic8eros de la base de datos! Fodos los fic8eros
almacenados en la base de datos estan protegidos contra escritura
por cualquier cuenta que no sea la del superusuario de Postgres!
Las cone,iones de los clientes al servidor de la base de datos estan
permitidas, por defecto, =nicamente mediante socGets 3ni, locales $
no mendiante socGets FHPIDP! Ja de arrancarse el demonio con la
opcion 'i para permitir la cone,ion de clientes no locales!
Las cone,iones de los clientes se pueden restringir por direcci#n DP
$Io por nombre de usuario mediante el fic8ero pg48ba!conf situado
en PK4D<F<!
Las cone,iones de los clientes pueden ser autentificadas mediante
otros paquetes e,ternos!
< cada usuario de Postgres se le asigna un nombre de usuario $
(opcionalmente) una contraseAa! Por defecto, los usarios no tienen
permiso de escritura a bases de datos que no 8a$an creado!
Los usuarios pueden ser incluidos en grupos, $ el acceso a las tablas
puede restringirse en base a esos grupos!
*utenti(icacion de "suarios
Autentificacion es el proceso mediante el cual el servidor de la base de datos
$ el postmaster se aseguran de que el usario que est solicitando acceso a
la base de datos es en realidad quien dice ser! Fodos los usarios que quieren
utili&ar Postgres se comprueban en la tabla pg4user para asegurarse que
estn autori&ados a 8acerlo! <ctualmente, la verificaci#n de la identidad del
usuario se reali&a de distintas formas1
Desde la s8ell del usuario
3n demonio que se lan&a desde la s8ell del usuario anota el id original
del usuario antes de reali&ar un setuid al id del usuario postgres! "l id
original del usuario se emplea como base para todo tipo de
comprobaciones!
+esde la red
Si Postgres se instala como distribuido, el acceso al puerto FHP del
postmaster est disponible para todo el mundo! "l <BD configura el
fic8ero pg48ba!conf situado en el directorio PK4D<F< especificando el
sistema de autentificacion a utili&ar en base al equipo que reali&a la
cone,i#n $ la base de datos a la que se conecta! Ler pg_hba.conf(5)
para obtener una descripci#n de los sistemas de autentificaci#n
disponibles! Por supuesto la autentificaci#n basada en equipos no es
perfecta incluso en los sistemas 3ni,! "s posible, para determinados
intrusos, enmascarar el equipo de origen! "stos temas de seguridad
estn fuera del alcance de Postgres!
,ombres de usuario ) grupos
Para crear un nuevo usuario, e-ecute el programa createuser!
Para aAadir un usario o un grupo de usarios a un nuevo grupo uno de los
usuarios debe crear el grupo $ aAadir al resto a ese grupo! "n Postgres estos
pasos no pueden reali&arse actualmente mendiante el comando create
group! Los grupos se definen aAadiendo los valores a la tabla pg4group, $
usando el comando grant para asignar privilegios al grupo!
rear "suarios
rear -rupos
<ctualmente no 8a$ una forma facil de crear grupos de usuarios! Ja$ que
aAadirlosIactuali&arlos uno a uno en la tabla pg4group table! Por e-emplo1
-oll$6M insert into pg4group (groname, gros$sid, grolist) -oll$6M values
(9post8acGers9, 95@*N9, 9B/NN*, (@O5C9): DES"RF /N(@@N -oll$6M grant insert
on foo to group post8acGers: HJ<EK" -oll$6M Los campos de pg4group son1
P groname1 "l nombre del grupo! "ste campo debe de ser unicamente
alfanum+rico! Eo aAadas subra$ados u otros signos de puntuaci#n! P
gros$sid1 "l id del grupo! "l tipo del campo es intN $ debe de ser =nico para
cada grupo! P grolist1 La lista de id de usarios que pertenecen al grupo! "ste
campo es de tipo intN!
*signar usuarios a los -rupos
ontrol de *cceso
Postgres proporciona mecanismos para permitir a los usuarios limitar el
acceso que otros usuarios tendrn a sus datos!
Super3suarios de la Base de Datos
Los Super3suarios de la base de datos (aquellos que tienen el campo
pg4user!usesuper activado) ignoran todos los controles de acceso
descritos anteriormente con dos e,cepciones1 las actuali&aciones del
catlogo del sistema no estn permitidas si el usuario no tiene el
campo pg4user!usecatupd activado, $ nunca se permite la destrucci#n
del catlogo del sistema (o la modificaci#n de sus estructuras)!
Privilegios de acceso
"l uso de los privilegios de acceso para limitar la lectura, escritura $ la
puesta de reglas a las clases se trata en grant/revoke(l)!
Borrado de clases $ modificaci#n de estructuras!
Los comandos que borran o modifican la estructura de una clase,
como alter, drop table, $ drop inde., solo funcionan con el
propietario de la clase! Homo 8emos dic8o antes, estas operaciones
no estn permitidas nunca en los catlogos del s$stema!
/unciones ) 'eglas
Las funciones $ las reglas permiten a los usuarios insertar c#digo en el
servidor de la base de datos que otros usuarios pueden e-ecutar sin saberlo!
<mbos mecanismos permiten a los usuarios alo-ar caballos de troya con
relativa impunidad! La =nica protecci#n efectiva es un estrec8o control sobre
quien puede definir funciones (por e-emplo, escribir en tablas con campos
SQL) $ reglas! Fambi+n se recomienda auditar seguimientos $ alertas en
pg4class, pg4user $ pg4group!
/unciones
Las funciones escritas en cualquier lengua-e e,cepto SQL se e-ecutan por el
servidor de la base de datos con el mismo permiso que el usuario postgres
(el servidor de la base de datos funciona con el user'id de postgres! "s
posible cambiar las estructuras de datos internas del servidor por los
usuarios, desde dentro de funciones de confian&a! "s por ello que este tipo
de funciones pueden, entre otras cosas, evitar cualquier sistema de control
de acceso! "ste es un problema in8erente a las funciones definidas por los
usuarios en H!
'eglas
Homo en las funciones SQL, las reglas tambQen se e-ecutan con la identidad
$ los permisos del usuario que llam# al servidor de la base de datos!
aveats
F8ere are no plans to e,plicitl$ support encr$pted data inside of Postgres
(t8oug8 t8ere is not8ing to prevent users from encr$pting data 7it8in user'
defined functions)! F8ere are no plans to e,plicitl$ support encr$pted
net7orG connections, eit8er, pending a total re7rite of t8e frontendIbacGend
protocol!
3ser names, group names and associated s$stem identifiers (e!g!, t8e
contents of pg4user!uses$sid) are assumed to be unique t8roug8out a
database! 3npredictable results ma$ occur if t8e$ are not!
*gregar ) 0liminar "suarios
createuser permite que usuarios especQficos accedan a Postgres! dropuser
elimina usuarios $ previene que +stos accedan a Postgres!
"stas #rdenes s#lo afectan a los usuarios con respecto a Postgres: no tienen
efecto en otros privilegios del usuario o en su estado con respecto al sistema
operativo sub$acente!
3 1enta2as de esta seguridad
Postgres, era orientado a introducir la menor cantidad posible de funcionalidades para
completar el soporte de tipos! "stas funcionalidades incluQan la 8abilidad de definir tipos, pero
tambi+n la 8abilidad de describir relaciones ' las cuales 8asta ese momento eran
ampliamente utili&adas pero mantenidas completamente por el usuario! "n Postgres la base
de datos RcomprendQaR las relaciones $ podQa obtener informaci#n de tablas relacionadas
utili&ando reglas!
Hlaves a-enas tambin denominadas Llaves ajenas o Llaves Forneas (foreign
keys).
Disparadores (triggers).
Vistas.
Integridad transaccional.
Herencia de tablas.
Tipos de datos y operaciones geomtricas.
dicionalmente los !s!arios p!eden crear s!s propios tipos de datos" los #!e p!eden ser
por completo inde$ables gracias a la in%raestr!ct!ra &i'T de (ostgre')L. lg!nos
ejemplos son los tipos de datos KDS creados por el proyecto PostKDS.
! Haga una comparacin con una base de datos centrali3ada
"s una base de datos para un solo usuario
Los sistemas computacionales se utili&aron inicialmente en los negocios para
funciones de contabilidad $, como eran funciones imprescindibles, el alto
costo de los computadores era fcil de -ustificar!
< estos primeros sistemas se les llam# sistemas de procesamiento de datos
$ trataban de imitar los procedimientos manuales e,istentes!
&onclusion
Despu+s de 8aber investigado sobre PostgreSQL nos damos cuenta de que
es una 8erramienta muc8o ms potente $ completa de lo que se pudiera
pensar en un principio! Jemos empe&ado de cero, sin apenas 8aber oido
8ablar de este gestor (la publicidad la tienen %racle $ M$SQL)! Rpidamente
buscamos en su 7eb instrucciones de c#mo instalarlo! <l poco nos dimos
cuenta que en los cds de casi cualquier distribuci#n de Linu, venQa incluido!
3na ve& instalado, empe&amos a traba-ar con +l! "ntonces nos surgi# el
problema de que una base de datos no es algo tan portable como el c#digo
fuente de un programa o un documento, no podQamos meterlo en un
disquete o &ipearla $ enviarla para ver los progresos se cada uno! FenQamos
que encontrar el modo de traba-ar concurrentemente sobre una base de
datos (que al fin $ al cabo es uno de los ob-etivo de los gestores de bases de
datos)! "n tonces se nos ocurri# utli&ar cone,iones mediante ss%! <sQ
podQamos traba-ar sobre la misma base de datos alo-ada en el ordenador de
uno de nosotros!
3na ve& resueltas con +,ito estas cuestiones, empe&amos a traba-ar en el
problema que nos 8abQamos propuesto! Fras reali&ar el diagrama "ntidad'
Realaci#n $ pasarlo a tablas, comen&amos a codificarlo en SQL! <quQ se nos
present# otro problema! <=n no sabQamos nada de SQL (s#lo 8abQamos
creado bbdd con asistentes visuales de MS'SQLSeverS)! "ntonces con
paciencia, manuales $ tirando de google 8icimos un pequeAo boceto!
"specialmente traumtico fue comprender el uso de los 4,S5'*6,S para
las claves a-enas .50 ! 3na ve& comprendimos esto, 8icimos un primer
boceto en SQL de nuestra bbdd, que $a incluQa tipos de datos $ claves
primarias $ a-enas! "sto nos darQa pie a poder empe&ar a desarrollar el
programa que accediera ella!
Fras aAadir muuuuc8os datos (siempre a trav+s de sentencias SQL)
empe&amos el desarrollo del programa! "legimos el lengua-e de
programaci#n P$t8on, por conocerlo previamente $ por lo que
necesitbamos en este momento1 velocidad de desarrollo $ una gran
interconectividad con Postgres .@0 ! "l programa avan&aba rpidamente!
Decidimos que su =nica funcionalidad serQa la de aAadir datos! Que no era
una tarea sencilla, debido sobre todo al gran n=mero de relaciones entre las
tablas! Por no multiplicar lQneas de c#digo, decidimos no reali&ar demasiadas
comprobaciones de error en los datos introducidos! Ta se encargarQa de
protestar Postgres!
< medida que ava&bamos nuestros conocimientos en SQL crecQan!
Reali&bamos consultas comple-as $ empe&amos a me-orar el diseAo inicial
de la bbdd! <finamos un poco los tipos de datos obtenidos e introdu-imos
H07 en muc8os atributos $ otros detalles! Luego descubrimos que
pgaccess podrQa 8abernos a8orrado el traba-o de aprender tanto SQL pero
siempre es ms importante conocer lo que 8a$ que 8acer, que de-ar a una
aplicaci#n que lo 8aga (sobre todo si no sabemos e,actamente lo que esta
aplicaci#n 8ace)! Sin embargo 8ubiera estado bien 8aber prestado ms
atenci#n a pgaccess al principio!
UQu+ 8emos aprendidoV Pues entre otras muc8as cosas 8emos aprendido a1
Dnstalar $ configurar un servidor PostgreSQL en un entorno Linu,
Preparar una mquina Linu, para permitir accesos remotos de modo
seguro
Programar una aplicaci#n que se conecta $ utili&a una base de datos
3n mont#n de SQL
3tili&ar una aplicaci#n grfica como pgaccess para manipular una
bbdd
"scribir $ compilar documentacion en DocBooGISKML
Eo queremos olvidarnos de comentar un =ltimo detalle mu$ importante!
Fodas las aplicaciones que 8emos utili&ado son soft7are libre (puedes
redistribuirlo $ modificarlo seg=n sus respectivas licencias) $ est disponible
de manera gratuita! "l coste por soft7are del problema que 8emos descrito
e implementado asciende a ) euros! "so sQ, la mano de obra 8a de estar
bien remunerada 1')
8*S0 +0 +*54S
Postgre
P*'566P*,50S9
:41*,,6 *,+'0S M*'56,0;
4'L*,+4 *L*'4, P0'0;
4'*L6* 4'50;
8*S0 +0 +*54S
-'"P4 12<1!
50,4L4-=* +0 S6S50M*S
M0+0LL=,
>2?11?
>@

You might also like