PDF de programación - Autentificación mediante PostgreSQL en Apache y ProFTPd

Imágen de pdf Autentificación mediante PostgreSQL en Apache y ProFTPd

Autentificación mediante PostgreSQL en Apache y ProFTPdgráfica de visualizaciones

Actualizado el 11 de Abril del 2020 (Publicado el 14 de Abril del 2017)
475 visualizaciones desde el 14 de Abril del 2017
31,6 KB
8 paginas
Autentificación mediante PostgreSQL en Apache y
ProFTPd

Paco Brufal <2:346/3.68> [email protected]

Versión: 0.2r3-netsearch

Este pequeño documento explica de manera breve cómo usar los módulos de autentificación mediante base de datos
PostgreSQL que vienen con los servidores Apache (web) y ProFTPd (ftp). El Sistema Operativo usado es Linux
GNU/Debian Stable (aka Potato). Este documento se distribuye SIN NINGUNA GARANTIA bajo la licencia GPL (
http://www.gnu.org). No me responsabilizo de los posibles daños que pueda causar la ejecución de los pasos descritos en
este documento.

1. Introducción

Si eres administrador de un servidor web, este documento te será muy util, ya que el trabajo rutinario de mantener al dia
los usuarios, grupos y contraseñas de la gente que accede a los recursos privados del servidor web puede llegar a ser muy
pesado, debido a que siempre hay ficheros con contraseñas esparcidos por todo el directorio de páginas web.

En el caso de los servidores FTP, el crear un usuario que tenga acceso por FTP implica crear un usuario de sistema, y esto
tiene varios inconvenientes:

Shell. Si no hemos configurado el fichero /etc/adduser.conf para que cree los usuarios con una shell del tipo
/bin/false, todos los usuarios tendrán la shell por defecto, que puede ser /bin/bash o /bin/sh, con lo que el usuario
tendría acceso por telnet o ssh sin darnos cuenta.
Fichero /etc/passwd descontrolado. Un sistema con 20 cuentas se administra de manera cómoda, pero un sistema
que tiene entre 500 ó 1000 cuentas, se hace muy pesado.
Centralización. Si tuviesemos más de un servidor FTP, independientes, el administrar las cuentas de todos ellos
sería una tarea infernal. Alguno pensará que se podria mantener solo un fichero de claves de usuarios, y que todos
los servidores compartiesen ese fichero mediante NFS o CODA, pero esto significa que un usuario tendría acceso a
todos los servidores, cosa que posiblemente no queramos.

El uso de la autentificación mediante base de datos PostgreSQL resuelve todos los inconvenientes anteriores de una
manera eficaz, cómoda y elegante, haciendo la vida del administrador mucho más feliz y productiva :D

Veamos cómo se evitan los puntos anteriores.

En primer lugar, al crear un usuario de web o ftp, no se crean en el sistema, sino en una base de datos que se puede
encontrar en otro servidor, y dicho usuario no tendrá acceso mas que a los servicios que usen la base de datos.
En segundo lugar, la administración de una base de datos siempre es más fácil que un fichero de sistema, si se
disponen de las herramientas adecuadas (léase interfaces web o X-Window para administrar PostgreSQL).
Una base de datos la puedes crear y moldear a tu gusto, añadiendo o quitando campos a placer, y no te tienes que
restringir a los campos del fichero /etc/passwd o /etc/shadow. Lo que me refiero es que tanto Apache como
ProFTPd permiten hacer búsquedas selectivas dentro de la base de datos, con lo que podemos restringir las
búsquedas a campos tales como servidor (el usuario pepito solo puede acceder a los servidores 1 y 3), horarios (el
usuario manolito solo tiene acceso al servidor 2 de 9 de la mañana a 4 de la tarde), niveles de acceso, etc.
Y una ventaja más es la seguridad. La base de datos podría estar en una máquina distinta a la que ofrece los
servicios de web o ftp, y dedicarle una atención especial al procedimiento de securización o hardening del sistema
(poner un firewall entre los servidores de web/ftp y la base de datos, no ofrecer servicios de telnet, ssh, rlogin,
etc...).

2. Apache: módulo mod_auth_pgsql

En este apartado voy a explicar de manera rápida cómo se configura el Apache y la base de datos Postgres. Pondré las

ordenes que hay que ir ejecutando y un ejemplo de los ficheros de configuración. Ahí va :)

2.1 Compilación del módulo.

Antes que nada, vemos si nuestro Apache viene de serie con el módulo mod_auth_pgsql. Siguiendo la estructura de
ficheros de una Debian , miramos en el fichero /etc/apache/httpd.conf si existe una linea tal que así:

LoadModule pgsql_auth_module /usr/lib/apache/1.3/mod_auth_pgsql.so

Esta linea debe estar descomentada, y el fichero debe existir. En caso que exista el fichero, pero la linea no, escríbela en la
sección de los módulos y pasa al punto siguiente. Si la linea está comentada, pero el fichero no existe, entonces deberás
compilarlo aparte.

La compilación de un módulo no reviste ninguna complicación. En primer lugar debemos bajarnos la última versión
disponible del sitio http://www.giuseppetanzilli.it/mod_auth_pgsql/dist/ . En el momento de escribir este artículo, la última
versión es la 0.9.10. Para instalar el módulo con éxito, primero debemos asegurarnos que disponemos de los siguientes
paquetes (aqui los escribo con nomenclatura Debian)

apache
apache-dev
postgresql
postgresql-clients
postgresql-dev

Para compilar el módulo en una distribución Debian, debemos retocar un poco el código fuente. Un cambio consiste en
cambiar en el fichero mod_auth_pgsql.c la linea

#include <libpq-fe.h>

por esta otra

#include <postgresql/libpq-fe.h>

El otro cambio consiste en editar el fichero /usr/bin/apxs y cambiar estas 2 lineas

my $CFG_LD_SHLIB = q(); # substituted via Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = q(); # substituted via Makefile.tmpl

por

my $CFG_LD_SHLIB = q(ld); # substituted via Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = q(-G); # substituted via Makefile.tmpl

Seguimos los pasos de fichero INSTALL que describen cómo compilar el módulo (APXS DSO Install). Ejecutaremos el
comando

./configure --with-apxs=/usr/bin/apxs --with-pgsql=/usr/include/postgresql

para generar el fichero Makefile. Para compilar el módulo ejecutaremos el comando

/usr/bin/apxs -I/usr/local/pgsql/include \
-L/usr/local/pgsql/lib -lpq \
-o mod_auth_pgsql.so -c mod_auth_pgsql.c auth_pgsql_shared_stub.c

y lo instalaremos con

/usr/bin/apxs -i -a -n auth_pgsql mod_auth_pgsql.so

Debemos verificar que en el fichero /etc/apache/httpd.conf existe la linea que mencionamos al inicio de este apartado:

LoadModule pgsql_auth_module /usr/lib/apache/1.3/mod_auth_pgsql.so

Tan solo queda reiniciar el Apache y esperar que todo haya salido bien ;)

2.2 Creación de la base de datos.

Ahora vamos a crear la base de datos en PostgreSQL. Siendo root, ejecutamos la orden

su - postgres

para crear el usuario y la bases de datos necesarias. Debemos crear un usuario, cuyo nombre será igual que el usuario que
ejecuta el servidor Apache. En el caso de Debian, el usuario se llama "www-data":

postgres$ createuser www-data
Enter user’s postgres ID -> 10000
Is user "www-data" allowed to create databases (y/n) n
Is user "www-data" a superuser? (y/n) y
WARNING: Any user who can add users can also modify the system catalog
createuser: www-data was successfully added
Shall I create a database for "www-data" (y/n) n
don’t forget to create a database for www-data

Seguidamente, debemos crear el fichero wwwusers.sql, que contiene:

create table usuarios (
login varchar(255),
password varchar(255)
);
create table grupos (
login varchar(255),
grupo varchar(255)
);
grant all on usuarios to "www-data";
grant all on grupos to "www-data";

Creamos la base de datos y el esquema de las tablas:

postgres$ createdb wwwusers
postgres$ psql wwwusers < wwwusers.sql
create table usuarios ( login varchar(255), password varchar(255) );
CREATE
create table grupos ( login varchar(255), grupo varchar(255) );
CREATE
grant all on usuarios to "www-data";
CHANGE
grant all on grupos to "www-data";
CHANGE

EOF
postgres$

2.3 Configuración básica.

Ahora ya tenemos la base de datos y el usuario "www-data". El siguiente paso es definir el fichero .htaccess que irá en
cada directorio que queramos proteger. Además, debemos asegurarnos que Apache está bien configurado para que
maneje correctamente estos ficheros. En especial nos fijaremos en las directivas

AllowOverride none

AccessFileName .htaccess

<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>

El fichero .htaccess contiene la siguientes lineas:

# máquina que contiene la base de datos
Auth_PG_host localhost
# puerto tcp de conexión
Auth_PG_port 5432
# nombre de la base de datos
Auth_PG_database wwwusers
# nombre de la tabla de usuario
Auth_PG_pwd_table usuarios
# nombre del campo de login
Auth_PG_uid_field login

# nombre del campo de password
Auth_PG_pwd_field password
# nombre de la tabla de grupos
Auth_PG_grp_table grupos
# nombre del campo de grupo
Auth_PG_gid_field grupo
# descripción de la zona protegida
AuthName "Autentificación de Usuario"
# tipo de autentificación
AuthType basic

# limitaciones del grupo administrador
<LIMIT GET POST>
require group administrador
</LIMIT>

Explicación rápida: en esa zona privada solo podrán acceder las personas que pertenezcan al grupo administrador. Es
decir, aquellos logins que tengan el grupo administrador en la tabla grupos.

Vamos a probar el invento. Copiamos el fichero .htaccess anterior al raiz de nuestros documentos web (/var/www en
Debian), y como usuario postgres, ejecutamos las siguientes ordenes:

postgres$ psql wwwusers
Welcome to the POSTGRESQL interactive sql monitor:
Please read the file COPYRIGHT for copyright terms of POSTGRESQL
[PostgreSQL 6.5.3 on i686-pc-linux-gnu, compiled by gcc 2.95.2]

type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to execute query
You are currently connected to the database: wwwusers

wwwusers=> insert into usuarios values ( ’admin’,’w8Yv0sd2meW3Q’ );
INSERT 22880 1
wwwusers=> insert into grupos values ( ’admin’,’administrador’ );
INSERT 22881 1
wwwusers=> \q

La contraseña ’ w8Yv0sd2meW3Q’ se genera con el comando mkpasswd, que viene con cualquier distro.

Ha llegado el momento de reiniciar el Apache. Después de reiniciarlo con el navegador visitaremos la dirección de
nuestro servidor, y nos debería aparecer la ventana de autentificación. Ponemos como login admin, y com
  • Links de descarga
http://lwp-l.com/pdf2779

Comentarios de: Autentificación mediante PostgreSQL en Apache y ProFTPd (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad