Autenticación de Usuario con PAM

Los programas que dan acceso a los usuarios a privilegios de cualquier tipo necesitan poder autenticar al usuario. Al conectarse al sistema, se da un nombre y una contraseña, y el proceso de conexión los utiliza para autenticar la conexión -- verificar que se es quien se dice que se es. Formas alternativas de autenticación aparte de las contraseñas existen, y es posible almacenar contraseñas de otras maneras.

PAM, que significa Pluggable Authentication Modules (Módulos de Autenticación Cargables), es una forma de permitir al administrador del sistema establecer reglas de autenticación sin tener que recompilar los programas de autenticación. Con PAM, se controla como se cargan los módulos en los programas editando un fichero de configuración.

La mayoría de usuarios de Red Hat Linux nunca tendrán que tocar este fichero de configuración. Cuando se usa RPM para instalar programas que requieren autenticación, se realizan automaticamente los cambios necesarios para la autenticación normal por contraseña. Sin embargo, puede quererse ajustar la configuración, en cuyo caso hay que entender el fichero de configuración.

Módulos PAM

Hay cuatro tipos de módulos definidos por el estándar PAM.

Estos módulos pueden apilarse, pudiendo utilizarse así multiples módulos. Por ejemplo, rlogin normalmente hace uso de dos modos de autenticación: si la autenticación rhosts tiene éxito, es suficiente para permitir la conexión; si falla, entonces se utiliza el método estándar de autenticación de contraseñas.

Se pueden añadir nuevos módulos en cualquier momento, y se puede hacer que las aplicaciones que conocen el método PAM, los utilicen. Por ejemplo, si se tiene una calculadora de sistema de contraseña al instante, y se escribe un módulo para darle soporte (hay documentación sobre como escribir módulos incluida con el sistema en /usr/doc/pam*), los programas PAM puede usar el nuevo módulo y trabajar con la calculadora de contraseña al instante sin recompilar o modificar en nada.

Servicios

Cada programa que usa PAM define su propio nombre de "servicio". El programa de login define el tipo de servicio login, ftpd define el servicio de tipo ftp, y así con todos. En general, el tipo de servicio es el nombre del programa utilizado para acceder al servicio, no (si es que hay diferencia) el programa utilizado para proveer el servicio.

Los ficheros de configuración

El directorio /etc/pam.d se utiliza para configurar las aplicaciones PAM. (Solía ser /etc/pam.conf en anteriores versiones de PAM; aunque todavía se lee el fichero pam.conf si no se encuentra una entrada /etc/pam.d/, su uso está obsoleto). Cada aplicación (realmente, cada servicio) tiene su propio fichero. Un fichero tiene este aspecto:

#%PAM-1.0
auth      required  /lib/security/pam_securetty.so
auth      required  /lib/security/pam_unix.so shadow nullok
auth      required  /lib/security/pam_nologin.so
account   required  /lib/security/pam_unix.so
password  required  /lib/security/pam_cracklib.so
password  required  /lib/security/pam_unix.so shadow nullok use_authtok
session   required  /lib/security/pam_unix.so
        

La primera línea es un comentario. (Cualquier línea que empiece por # es un comentario.) Las líneas dos a cuatro apilan tres modulos para usar en la autorización de login o conexión. La línea dos asegura que si el usuario intenta conectar como root, la tty en la que se conecta está en la lista del fichero /etc/securetty si el fichero existe. La línea tres hace que se pida una contraseña y se verifique. La línea cuatro comprueba si existe el fichero /etc/nologin, y si es así, muestra el contenido del fichero, y si el usuario no es root, no le deja conectarse.

Hay que hacer notar que los tres módulos son comprobados, incluso si el primero falla. Es una decisión de seguridad -- está diseñada para prevenir que el usuario sepa porque ha fallado su autenticación, porque saberlo podría ayudar a romper la seguridad más fácilmente. Puede cambiarse el comportaminto cambiando required a requisite; si cualquier módulo requisite falla, PAM falla también inmediatamentee sin llamar a más módulos

La quinta línea hace que se realice toda la contabilidad necesaria. Por ejemplo, si se han activado contraseñas ocultas (shadow passwords), el módulo pam_pwdb.so comprobará si la cuenta ha expirado, o si el usuario ha cambiado

La sexta línea somete a una contraseña recién cambiada a una serie de tests para asegurar que no puede, por ejemplo, ser fácilmente determinada por un programa de busqueda de contraseñas basado en la técnica del diccionario.

La septima línea (que puede ser más de una) especifica que si el programa login cambia la contraseña del usuario debería usar el módulo pam_pwdb.so para hacerlo. (Sólo lo hará si un módulo auth ha determinado que debe cambiarse la password --- por ejemplo, si una shadow password ha expirado).

La octava y final especifica que el módulo pam_pwdb.so debería ser usado para gestionar la sesión. Actualmente el módulo no hace nada; podría ser reemplazado (o seguido de otro por apilamiento) por cualquier módulo que se necesite.

Note que el orden de las líneas dentro del fichero importa. Mientras que no importa mucho en que orden se llama los módulos required, hay otras opciones de control disponibles. Mientras que optional se usa raramente, y nunca por defecto en un sistema Red Hat Linux, sufficient y requisite hacen que el orden sea importante.

éase el fichero de configuración auth de rlogin:

auth       sufficient   /lib/security/pam_rhosts_auth.so
auth       required     /lib/security/pam_securetty.so
auth       required     /lib/security/pam_stack.so service=system-auth
auth       required     /lib/security/pam_nologin.so
        

Primero, si pam_rhosts_auth.so autentifica al usuario, PAM inmediatamente devuleve el suceso a rlogin sin ninguna chequeo de la contraseña. pam_rhosts_auth.so falla la autentificación de usuario, ese autentificación fallida es ignorada.

Segundo, pam_securetty.so impide conexiones como root desde terminales no seguros. Esto desactiva todos los intentos de acceder como root vía rlogin. Si se quieren permitir (en cuyo caso se recomienda no estar conectado a Internet o estarlo tras un buen firewall), se puede simplemente eliminar esa línea.

TerceroThird, si pam_rhosts_auth.so ha fallado la autentificación del usuario, el mó pam_stack.so realiza la autentificación de contraseña normal.

Finalmente pam_nologin.so comprueba /etc/nologin, como se indica más arriba.

Si no se quiere pedir contraseñas si la comprobación de securetty falla, se puede cambiar el módulo pam_securetty.so module de required a requisite.

Shadow Passwords o Contraseñas Ocultas

El módulo pam_unix.so detectará automáticamente que se están usando shadow passwords y hará todos los ajustes necesarios. Véase la sección de nombre Utilidades Shadow para más información.

Rexec y PAM

Por razones de seguridad, rexec no está activado en Red Hat Linux 7.0. Si se quisiera activar, habrá que descomentar una línea en el fichero /etc/pam.d/rexec. He aquí una muestra del fichero (el fichero puede variar de sistema a sistema):

#%PAM-1.0
auth       required     /lib/security/pam_securetty.so
auth       required     /lib/security/pam_stack.so service=system-auth
auth       required     /lib/security/pam_nologin.so
account    required     /lib/security/pam_stack.so service=system-auth
        

Para habilitar rexec, la línea referida al módulo pam_nologin.so debe descomentarse:

#%PAM-1.0
auth       required     /lib/security/pam_securetty.so
auth       required     /lib/security/pam_stack.so service=system-auth
#auth       required     /lib/security/pam_nologin.so
account    required     /lib/security/pam_stack.so service=system-auth
        

Tras la modificación, rexec estará activado.

NotaNota
 

Si el fichero/etc/pam.d/rexec contiene una línea que se refiere al módulo pam_securetty.so, no se podrá usar rexec como root. Para hacerlo, debe descomentarse la línea referida al módulo pam_securetty.so.

NotaNota
 

La mayoría de los ficheros de configuración han sido reescritos para simplificar los cambios en el sistema, por eso cuando una configuración necesita ser cambiada, sólo necesita ser cambiados en un sitio. Este cambio ocurre porque de el fichero pam_stack que permite "llamar" desde dentro de la pila para un servicio particular. Vea las páginas de man de pam_stack para más información.

Más información

Esto es sólo una introducción a PAM. Se incluya más información en el directorio /usr/doc/pam*, incluyendo La Guía del Administrador de Sistemas, el Manual de Desarrollador de Módulos, el Manual de Desarrollador de Aplicaciones, y el estándar PAM, DCE-RFC 86.0.