El documento describe las características de seguridad de PostgreSQL, incluyendo la autenticación de usuarios, los permisos de acceso, y los mecanismos para controlar el acceso a bases de datos y tablas. Explica cómo crear y administrar usuarios y grupos de usuarios, y los riesgos asociados con el uso de funciones y reglas de usuario.
El documento describe las características de seguridad de PostgreSQL, incluyendo la autenticación de usuarios, los permisos de acceso, y los mecanismos para controlar el acceso a bases de datos y tablas. Explica cómo crear y administrar usuarios y grupos de usuarios, y los riesgos asociados con el uso de funciones y reglas de usuario.
El documento describe las características de seguridad de PostgreSQL, incluyendo la autenticación de usuarios, los permisos de acceso, y los mecanismos para controlar el acceso a bases de datos y tablas. Explica cómo crear y administrar usuarios y grupos de usuarios, y los riesgos asociados con el uso de funciones y reglas de usuario.
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? >@