16.2. Configuración PAM para sshd

Tomemos la configuración PAM para sshd para demostrar la teoría con un ejemplo práctico de funcionamiento:

Ejemplo 16.1. Configuración PAM para sshd


#%PAM-1.0 
auth     include        common-auth 
auth     required       pam_nologin.so 
account  include        common-account 
password include        common-password 
session  include        common-session 
# Habilite la siguiente línea para obtener compatibilidad de resmgr con 
# sesiones ssh (consulte /usr/share/doc/packages/resmgr/README.SuSE) 
#sesión opcional      pam_resmgr.so nombretty_simulado 

La configuración típica PAM de una aplicación (sshd en este caso) contiene instrucciones que hacen referencia a los archivos de configuración de cuatro tipos de módulos: common-auth, common-account, common-password y common-session. Estos cuatro archivos contienen la configuración predeterminada para cada tipo de módulo. Si se incluyen estos archivos en lugar de llamar a cada módulo por separado para cada aplicación PAM, se obtendrá automáticamente una configuración PAM actualizada cuando el administrador cambie los ajustes por defecto. Antiguamente, era necesario ajustar todos los archivos de configuración manualmente en todas las aplicaciones cuando se producían cambios en PAM o cuando se instalaba una aplicación nueva. Ahora, la configuración PAM se lleva a cabo mediante archivos de configuración centrales y todos los cambios se heredan automáticamente en la configuración PAM de cada servicio.

El primer archivo incluido (common-auth) llama a dos módulos del tipo auth: pam_env y pam_unix2. Consulte el Ejemplo 16.2, “Configuración por defecto de la sección auth.

Ejemplo 16.2. Configuración por defecto de la sección auth


auth    required        pam_env.so
auth    required        pam_unix2.so

El primero, pam_env, carga el archivo /etc/security/pam_env.conf para definir las variables de entorno tal y como se especifique en este archivo. Esto se puede utilizar para definir la variable DISPLAY con el valor adecuado, ya que el módulo pam_env conoce la ubicación desde la cual se está iniciando sesión. El segundo, pam_unix2, comprueba el inicio de sesión del usuario y su contraseña comparándolos con /etc/passwd y /etc/shadow.

Una vez iniciados correctamente los módulos especificados en common-auth, un tercer módulo llamado pam_nologin comprueba si existe el archivo /etc/nologin. Si existe, sólo podrá iniciar sesión el usuario Root. El stack entero de módulos auth se procesará antes de que sshd obtenga información alguna acerca de si se ha podido iniciar correctamente la sesión. Dado que todos los módulos del stack tienen el indicador de control required, deberán procesarse correctamente todos para que sshd reciba un mensaje notificándole que el resultado ha sido correcto. Aunque alguno de los módulos no llegase a procesarse correctamente, el resto del stack de módulos sí continuaría procesándose y, sólo entonces, sshd recibiría notificación acerca del resultado incorrecto.

Si se procesan correctamente todos los módulos del tipo auth, se procesará otra declaración de inclusión, en este caso, la que aparece en el Ejemplo 16.3, “Configuración por defecto de la sección account. common-account contiene sólo un módulo, pam_unix2. Si pam_unix2 indica como resultado que el usuario existe, sshd recibe un mensaje de notificación al respecto y se pasa a procesar el siguiente stack de módulos (password), los cuales se describen en el Ejemplo 16.4, “Configuración por defecto de la sección password.

Ejemplo 16.3. Configuración por defecto de la sección account


account required        pam_unix2.so

Ejemplo 16.4. Configuración por defecto de la sección password


password required       pam_pwcheck.so  nullok 
password required       pam_unix2.so    nullok use_first_pass use_authtok 
#contraseña necesaria      pam_make.so     /var/yp 

De nuevo, la configuración PAM de sshd lleva sólo una declaración de inclusión que hace referencia a la configuración por defecto de los módulos password del archivo common-password. Estos módulos deben completarse correctamente (indicador de control required) siempre que la aplicación solicite que se cambie un testigo de autenticación. Cambiar una contraseña u otro testigo de autenticación exige realizar una comprobación de seguridad. Ésta la lleva a cabo el módulo pam_pwcheck. El módulo pam_unix2 que se utiliza posteriormente lleva consigo todas las contraseñas antiguas y nuevas de pam_pwcheck para que el usuario no tenga que volver a autenticarlas. Esto también evita que se puedan saltar las comprobaciones que lleva a cabo pam_pwcheck. Los módulos del tipo password deben utilizarse siempre que los módulos precedentes del tipo account o auth estén configurados para emitir quejas en caso de que las contraseñas hayan caducado.

Ejemplo 16.5. Configuración por defecto de la sección session


session required        pam_limits.so
session required        pam_unix2.so

En el último paso, se ordena a los módulos del tipo session, incluidos en el archivo common-session que configuren la sesión según los ajustes del usuario en cuestión. Si bien pam_unix2 se vuelve a procesar, no tiene consecuencias prácticas debido a su opción none, especificada en el correspondiente archivo de configuración de este módulo, pam_unix2.conf. El módulo pam_limits carga el archivo /etc/security/limits.conf, el cual puede definir los límites de uso de ciertos recursos del sistema. Cuando el usuario termina la sesión, se vuelve a llamar a los módulos session.