PAM como mecanismo de autenticación centralizada.


PAM como mecanismo de autenticación centralizada.

Los programas que conceden accesos a usuarios en un sistema utilizan autenticación para verificar sus identidades.

Históricamente, cada programa tiene su forma particular de realizar la autenticación. Bajo FreeBSD muchos programas son configurados para usar un proceso de autenticación centralizado llamado PAM (Pluggable Authentication Modules).

PAM utiliza una arquitectura conectable y modular, que otorga al administrador del sistema de una gran flexibilidad en establecer las políticas de autenticación para el sistema.

En la mayoría de los casos, el archivo de configuración PAM predeterminado para una aplicación que soporta PAM es suficiente. Sin embargo, a veces queremos almacenar los usuarios en una base de datos para centralizar algunos servicios.

Ventajas PAM

PAM ofrece las ventajas siguientes:

  • Un esquema de autenticación común que se puede usar con una gran variedad de aplicaciones.
  • Gran flexibilidad y control de la autentificación tanto para los administradores de sistemas como para los desarrolladores de la aplicación.
  • PAM es un mecanismo flexible para la autenticación de usuarios.
  • Permite el desarrollo de programas independientes del mecanismo de autenticación
  • Ofrece al administrador la posibilidad de implementar complejas políticas de autenticación para cada servicio.
  • Ofrece un esquema de autenticación centralizado.
  • Permite a los desarrolladores de aplicaciones abstraerse de los mecanismos de autenticación.
  • Facilita el mantenimiento de las aplicaciones

Como podemos ver PAM ofrece muchas ventajas que en ocasiones los administradores ignoramos.

Archivos de configuración y servicios PAM

El directorio /etc/pam.d/ contiene los archivos de configuración de PAM para cada aplicación tipo PAM. En versiones antiguas de PAM se utilizaba /etc/pam.conf, pero este archivo ya no se utiliza y solamente es usado si el directorio /etc/pam.d/ no existe.

Cada aplicación tipo PAM o servicios tiene un archivo dentro del directorio /etc/pam.d/. Cada uno de estos archivos lleva el nombre del servicio para el cual controla el acceso. Depende del programa tipo PAM definir el nombre de su servicio e instalar su archivo de configuración en el directorio /etc/pam.d/. Por ejemplo, el programa login define su nombre de servicio como login e instala el archivo de configuración PAM /etc/pam.d/login, el programa squid necesita el archivo /etc/pam.d/squid y asi con cada uno de los servicios.

Un ejemplo para aprender

Para comprender mejor el uso de PAM, en este ejemplo veremos como podemos autenticar Squid contra una Base de Datos de MySql. Daremos por sentado que tenemos pam, mysql y squid instalados y configurados correctamente.

1. Por lo general PAM viene por defecto en todos los sistemas FreeBSD.

2. Necesitamos instalar pam_mysql. Un modulo para autenticar contra mysql

# cd /usr/ports/security/pam-mysql
# make install clean

3. También es necesario tener instalado mysql-server, en mi caso tengo la version 5.0, que nos servirá para almacenar el nombre de usuario y contraseña de cada usuario.

# cd /usr/ports/databases/mysql50-server
# make install clean

Tambien podemos instalar phpmyadmin para que nos ayude a gestionar la base de datos de usuarios:

# cd /usr/ports/databases/phpmyadmin
# make install clean

4. Vamos a suponer que tenemos una Base de datos con la siguiente estructura:

Nombre Base de Datos: bd_usuarios
Tabla de usuarios: usuarios
Campo de Usuario: n_usuarios
Campo de Password: p_usuario

Como es lógico el password debe estar encriptado. Para este ejemplo nos sirve cualquier BD siempre que tenga un campo usuario y password.

5. Nos vamos al directorio /etc/pam.d/ y creamos un fichero llamado squid, en caso de que no exista

# cd /etc/pam.d
# touch squid

Lo editamos con el editor favorito y añadimos el siguiente texto:

auth required /usr/local/lib/pam_mysql.so user=user_mysql passwd=clave_mysql host=localhost db=bd_usuarios table=usuarios usercolumn=n_usuario passwdcolumn=p_usuario crypt=1

account required /usr/local/lib/pam_mysql.so user=user_mysql passwd=clave_mysql host=localhost db=bd_usuarios table=usuarios usercolumn=n_usuario passwdcolumn=p_usuario crypt=1

session required /usr/local/lib/pam_mysql.so user=user_mysql passwd=clave_mysql host=localhost db=bd_usuarios table=usuarios usercolumn=n_usuario passwdcolumn=p_usuario crypt=1

Como podemos ver este fichero esta compuesto por 3 lineas, solo explicare una, ya que es valido para las demás.

auth: comprobación de que el usuario es realmente quien dice ser.

required: Es necesario tener éxito. Aunque falle la autenticación se sigue la pila

/usr/local/lib/pam_mysql.so: indica la ruta de la librería pam_mysql. Cambia en otros SO.
user=user_mysql: Indica un usuario valido de mysql con acceso a la Base de Datos de usuarios (bd_usuarios)

passwd=clave_mysql: La clave de acceso a mysql del usuario explicado en el paso anterior.

host=localhost: El servidor que aloja la base de datos.

db=bd_usuario: La base datos de usuarios.

table=usuarios: La tabla que almacena los campos de usuario y password

usercolumn=n_usuario: el nombre del campo que almacena los nombre de los usuarios

passwdcolumn=p_usuario: El nombre del campo que almace el password del usuario.

crypt=1 : El tipo de encriptación de la clave del usuario (0= texto plano) (1=crypt) (2=Crypt mysql) (3=md5)

6. Con esto ya tenemos ha PAM listo para actuar como un mecanismo de autenticación de squid..

7. Ahora debemos configurar squid, solamente modificaremos el siguiente parámetro de squid:

auth_param basic program /usr/local/squid/libexec/pam_auth

8. Ahora podemos reiniciar la maquina e intentar acceder a Internet, si tenemos algún problema podemos verificar en los logs y comprobar. También podemos crear una pequeña página en php para que los usuarios tengan la posibilidad de cambiar el password.

Espero que les sea util….

Anuncios

Una respuesta

  1. He probado esta configuración y no me funciona, no se si me falta algo más por hacer, aclaro que utilizo Ubuntu 10.04 con squid3 instalado y un servidor de bases de datos mysql.
    Cuando direcciono el navegador al proxy me da acceso denegado y no pide ni usuario ni contraseña

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: