PAM-LDAP
Instalación PAM para Linux
El
objetivo es permitir la autentificación de los usuarios del
servidor mediante la información almacenada en un servidor
LDAP, de tal forma que se pueda mantener una única base de
datos con todos los usuarios, y no una base de datos por cada
máquina.
Primero debemos instalar el PAM (pluggable
Authentification Modules) en el sistema. Podemos descargar el código
desde, por ejemplo:
http://www.kernel.org/pub/linux/libs/pam/pre/library
En el momento de escribir este texto, la última versión disponible era la 0.75. Copiamos el archivo descargado a un directorio de instalación, por ejemplo /var/instalacion/, donde lo descomprimimos:
bzip2 -d Linux-PAM-0.75.tar.bz2
tar -xvf Linux-PAM-0.75.tar
Nos introducimos en el directorio de instalación, y compilamos:
cd Linux-PAM-0.75
./configure --prefix=/usr/local
make
make install (Deberemos comprobar antes de ejecutar esto que nuestra distribución soporta PAM. Para ello, debemos consultar http://www.kernel.org/pub/linux/libs/pam/whereislinuxpam.html)
Configuración PAM
Tras hacer todo
esto, tendremos en el directorio /etc/pam.d/ los archivos de
configuración. Concretamente tendremos un archivo por cada
servicio para el que el PAM está activo, dentro del cual
encontraremos líneas con la siguiente sintaxis:
tipo_modulo flag-control path-modulo argumentos
Los cuatro tipos de módulo son los siguientes:
auth: Este tipo de módulo provee con dos medios de autentificación del usuario. Primero establece que el usuario es quien dice ser, indicando a la aplicación que pregunte al usuario por una contraseña u otros medios de identificación. Después, el módulo puede comprobar la pertenencia a un grupo (independientemente de la información almacenada en /etc/groups/ ) u otros privilegios mediante sus 'credential granting properties'
account: Este módulo realiza un manejo de cuentas no basada en autentificación. Es usado normalmente para permitir o restringir el acceso a determinados servicios según el dia del mes, recursos utilizados actualmente (número máximo de usuarios)...
session: Este módulo está asociado con realizar cosas que deben ser hechas por el usuario antes o después de que pueda acceder al servicio. Esto incluye montar directorios, intercambio de datos con algún usuario, etc..
password: Este último módulo es requerido para modificar el token de autentificación asociado al usuario. Tipicamente hay un módulo por cada tipo de módulo de autentificación basado en 'challenge/response'.
El flag de control es usado para indicar como la
librería PAM reaccionará ante un éxito o fallo
en el módulo con que está asociado. Ya que los módulos
pueden ser apilados (los módulos de un mismo tipo se ejecutan
en serie, uno después de otro), el flag de control indica la
importancia relativa de cada módulo. La aplicación no
es informada de cada éxito o fracaso de cada uno de los
módulos listados en los archivos de /etc/pam.d, sino
que recibe un fichero con todos los resultados de la librería
Linux-PAM. El orden de ejecución de estos módulos
es el de las entradas correspondientes de /etc/pam.d; Las
primeras entradas son ejecutadas antes que las siguientes.
Para
el flag de control existen dos sintaxis posibles a partir de la
versión 0.6, pero tras instalar el código fuente, vemos
que la sintaxis utilizada es la tradicional, que consiste en utilizar
una única palabra para indicar la severidad de la acción
asociada al éxito o fracaso de un módulo específico.
Estas palabras clave son interpretadas de la siguiente forma:
required: Esto indica que el éxito del módulo es requerido para que 'module-type' tenga éxito. El fallo en este módulo no será perceptible para el usuario hasta que el resto de módulos (del mismo module-type) hayan sido ejecutados.
requisite: Como en el caso de required, si el módulo devuelve fallo entonces el control es pasado directamente a la aplicación. El valor de retorno está asociado con el primer módulo required o requisite en fallar. Este método se puede utilizar para evitar que el usuario pueda introducir una contraseña en un medio inseguro. Es concebible que dicho comportamiento puede informar a un atacante de cuentas válidas presentes en el sistema.
sufficient: el éxito de este módulo es considerado suficiente para indicarle a la librería Linux-PAM que ese module-type ha conseguido su propósito. En el caso de que ningún módulo required previo haya fallado, ningún módulo apilado de este tipo será invocado (esto quiere decir también que ningún módulo required subsiguiente que estuviera apilado será invocado). Un fallo en un módulo de este tipo no es considerado fatal para que el module-type pueda conseguir sus objetivos.
optional: Este flag hace que el módulo no sea crítico en el éxito o el fracaso de la aplicación de usuario para el servicio. En general, Linux-PAM ignora este tipo de módulos cuando determina si una pila de módulos fracasará o tendrá éxito. Sin embargo, en ausencia de una respuesta previa de éxito o fracaso este módulo determinará la naturaleza de la respuesta a la aplicación.
El path del módulo es el nombre del path del archivo objeto que puede ser cargado dinámicamente (el plugin en si mismo). Si el primer caracter es '/' se considera como un path completo. En otro caso, se considera un path relativo a /usr/lib/security.
Los argumentos son una serie de modificadores que son pasados al módulo cuando es invocado. Muchas veces serán típicos argumentos del Shell de Linux, aunque en general, los argumentos serán específicos para un determinado módulo.
Pam - LDAP
El primer paso es descargar el plugin para LDAP. Esto se puede hacer desde la página de pam-ldap. Tras almacenar el paquete descargado en un directorio provisional, como por ejemplo /var/instalacion/, procedemos a descomprimirlo de la manera habitual.
Tar -xvzf pam_ldap.tgz
E instalamos:
./configure --prefix=/usr/local
make
make check
make install
Tras estos pasos, ya tendremos el módulo instalado. Por defecto se conservará el contenido que tuvieramos en /etc/pam.d, por lo que podremos copiar cualquiera de los archivos dentro del directorio pam.d de los fuentes, correspondientes a pam_ldap, dentro de /etc/pam.d.
De igual forma que se instaló el módulo deberemos instalar el paquete nss_ldap, que podemos descargar desde aquí.
Configuración PAM-LDAP
En el archivo /etc/ldap.conf es donde encontraremos el archivo donde deberemos indicar el servidor ldap al que nos vamos a conectar, el valor base de dn, ect... Todas las directivas se encuentran acompañadas de un comentario que explica de forma bastante clara el cometido de las mismas.