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 24 de Octubre del 2020 (Publicado el 13 de Diciembre del 2018)
839 visualizaciones desde el 13 de Diciembre del 2018
110,4 KB
10 paginas
Creado hace 19a (04/08/2004)
Autentificaci´on mediante PostgreSQL en Apache
ProFTPd

y

Paco Brufal [email protected]

Versi´on: 0.2r4 2002

Este peque˜no documento explica de manera breve c´omo usar los m´odulos de autentificaci´on 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˜nos que pueda causar la ejecuci´on
de los pasos descritos en este documento.

Contents

1 Introducci´on

2 Apache: m´odulo mod auth pgsql

2.1 Compilaci´on del m´odulo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.2 Creaci´on de la base de datos.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.3 Configuraci´on b´asica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.4 Configuraci´on avanzada.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 ProFTPd: m´odulo mod pgsql

3.1 Compilaci´on del m´odulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.2 Creaci´on de la base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.3 Configuraci´on b´asica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.4 Configuraci´on avanzada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Interfaces de administraci´on

5 Consideraciones finales

1 Introducci´on

1

2

2

4

4

6

7

7

8

8

9

10

10

Si eres administrador de un servidor web, este documento te ser´a muy util, ya que el trabajo rutinario de
mantener al dia los usuarios, grupos y contrase˜nas 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˜nas esparcidos por todo
el directorio de p´aginas 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´an 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.

2. Apache: m´odulo mod auth pgsql

2

• Fichero /etc/passwd descontrolado. Un sistema con 20 cuentas se administra de manera c´omoda,

pero un sistema que tiene entre 500 ´o 1000 cuentas, se hace muy pesado.

• Centralizaci´on. Si tuviesemos m´as de un servidor FTP, independientes, el administrar las cuentas de
todos ellos ser´ıa una tarea infernal. Alguno pensar´a 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´on mediante base de datos PostgreSQL resuelve todos los inconvenientes anteriores
de una manera eficaz, c´omoda y elegante, haciendo la vida del administrador mucho m´as feliz y productiva
:D

Veamos c´omo 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´a acceso mas que a los servicios que
usen la base de datos.

• En segundo lugar, la administraci´on de una base de datos siempre es m´as f´acil que un fichero de sistema,
si se disponen de las herramientas adecuadas (l´ease interfaces web o X-Window para administrar
PostgreSQL).

• Una base de datos la puedes crear y moldear a tu gusto, a˜nadiendo 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´usquedas selectivas dentro de la base de datos, con
lo que podemos restringir las b´usquedas 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˜nana a 4 de la tarde), niveles de acceso, etc.

• Y una ventaja m´as es la seguridad. La base de datos podr´ıa estar en una m´aquina distinta a la que
ofrece los servicios de web o ftp, y dedicarle una atenci´on especial al procedimiento de securizaci´on 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´odulo mod auth pgsql

En este apartado voy a explicar de manera r´apida c´omo se configura el Apache y la base de datos Postgres.
Pondr´e las ordenes que hay que ir ejecutando y un ejemplo de los ficheros de configuraci´on. Ah´ı va :)

2.1 Compilaci´on del m´odulo.

Antes que nada, vemos si nuestro Apache viene de serie con el m´odulo 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´on de los m´odulos y pasa al punto siguiente. Si la linea est´a comentada, pero el fichero
no existe, entonces deber´as compilarlo aparte.

2. Apache: m´odulo mod auth pgsql

3

La compilaci´on de un m´odulo no reviste ninguna complicaci´on. En primer lugar debemos bajarnos la ´ultima
versi´on disponible del sitio http://www.giuseppetanzilli.it/mod auth pgsql/dist/

. En el momento de escribir este art´ıculo, la ´ultima versi´on es la 0.9.10. Para instalar el m´odulo con ´exito,
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´odulo en una distribuci´on Debian, debemos retocar un poco el c´odigo 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

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

Seguimos los pasos de fichero INSTALL que describen c´omo compilar el m´odulo (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´odulo 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. Apache: m´odulo mod auth pgsql

4

2.2 Creaci´on 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´a 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´on b´asica.

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

2. Apache: m´odulo mod auth pgsql

5

AllowOverride none

AccessFileName .htaccess

<Files ~ "^\.ht">

Order allow,deny
Deny from all

</Files>

El fichero .htaccess contiene la siguientes lineas:

# m´aquina que contiene la base de datos
Auth_PG_host localhost
# puerto tcp de conexi´on
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´on de la zona protegida
AuthName "Autentificaci´on de Usuario"
# tipo de autentificaci´on
AuthType basic

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

Explicaci´on r´apida: en esa zona pri
  • Links de descarga
http://lwp-l.com/pdf14512

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