domingo, 3 de julio de 2011

PAM

Los programas que conceden accesos a usuarios en un sistema utilizan autenticación para verificar sus identidades (para establecer que un usuario es quien dice ser).
Históricamente, cada programa tiene su forma particular de realizar la autenticación. Bajo Red Hat Enterprise Linux, 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, algunas veces es necesario modificar el archivo de configuración. Debido a que un error en la configuración de PAM puede comprometer la seguridad del sistema, es importante que comprenda la estructura del estos archivos antes de hacer cualquier modificación


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.
          Una biblioteca bien documentada que permite a los desarrolladores de aplicaciones desarrollar programas sin tener que crear sus propios esquemas de autenticación.

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 llevan 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

Formato de archivo de configuración PAM

Cada archivo de configuración PAM contiene un grupo de directivas formateadas como sigue:
Cada aplicación tipo PAM o servicios tiene un archivo dentro del directorio /etc/pam.d/. Cada uno de estos archivos llevan 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
<module interface>
<control flag>
<module name>
<module arguments>

En las siguientes secciones se explican cada uno de estos elementos.

Interfaz de Modulo

Hay cuatro tipos de módulos PAM disponibles. Cada uno corresponde con un aspecto diferente del proceso de autorización:

          auth: Esta interfaz de módulo autentifican el uso. Por ejemplo, solicita y verifica la validez de una contraseña. Los módulos con esta interfaz también pueden establecer credenciales, tales como membrecías de grupo o tickets Kerberos.
          account: Esta interfaz de módulo verifica que sea permitido el acceso. Por ejemplo, puede verificar que la cuenta no haya caducado o que el usuario tenga permiso de iniciar sesiones a una hora del día particular.
          password: Este módulo se usa para establecer y verificar contraseñas.
          session: Esta interfaz de módulo configura y administra las sesiones de usuarios. Los módulos con esta interfaz también pueden realizar tareas adicionales que son requeridas para permitir acceso, como el montaje de directorios principales de usuarios y hacer el buzón de correo del usuario disponible.

NOTA: Un módulo individual puede proporcionar una o todas las interfaces de módulos mencionadas anteriormente. Por ejemplo, pam_unix.so proporciona todas las cuatro interfaces. En un archivo de configuración PAM, la interfaz del módulo es el primer campo a definir. Por ejemplo, una línea típica de una configuración sería: auth required pam_unix.so
Esto provoca que PAM utilice la interfaz pam_unix.so del módulo auth.

Indicadores de Control

Todos los módulos PAM generan un resultado de éxito o fracaso cuando se les llama. Los indicadores de control le dicen a PAM qué hacer con el resultado. Como los módulos pueden apilarse en un determinado orden, los indicadores de control le dan la posibilidad de fijar la importancia de un módulo con respecto al objetivo final del proceso de autenticación para el servicio.
Hay cuatro indicadores de control definidos:
          required: El resultado del módulo debe ser exitoso para que la autenticación continue. Si la prueba falla, el usuario no es notificado hasta que los resultados en todos los módulos referenciando esa interfaz sean completados.
          requisite: El resultado del módulo debe ser exitoso para que la autenticación continúe. Sin embargo, si la prueba falla, el usuario es notificado inmediatamente con un mensaje reflejando el primer módulo requiredorequisite fallido.
          sufficient: El resultado del módulo es ignorado si falla. Pero si el resultado del módulo con el indicador sufficient es exitoso y ningún módulo con indicador required ha fallado, entonces no se requiere ningún otro resultado y el usuario es autenticado para el servicio.
          optional: Se ignora el resultado del módulo.Un módulo con una bandera optional sólo es necesario para la autenticación exitosa cuando no hay otros módulos haciendo referencia a la interfaz.

IMPORTANTE: El orden en el cual se llaman los módulos required no es crítico. Las banderas o indicadores de control sufficient y requisite provocan que el orden se vuelva importante. Ahora PAM dispone de una nueva sintaxis de control de banderas que permite un control más preciso. La página man de pam.d y la documentación de PAM, ubicadas en directorio /usr/share/doc/pam-<version-number>/ (donde <version-number> es el número de versión para PAM) describe esta nueva sintaxis detalladamente.

A continuación se presenta una muestra de archivo de configuración de la aplicación PAM:

#%PAM-1.0
auth required pam_securetty.so
auth required pam_unix.so nullok
auth required pam_nologin.so
account required pam_unix.so
password required pam_cracklib.so retry=3
password required pam_unix.so shadow nullok use_authtok
session required pam_unix.so

          La primera línea es un comentario como lo es toda línea que inicie con el carácter #.
          Las líneas dos, tres y cuatro apilan tres módulos a usar para autentificaciones de inicio de sesión.
          auth required pam_securetty.so: Este módulo se asegura de que si el usuario está tratando de conectarse como root, el tty en el cual el usuario se está conectando está listado en el archivo /etc/securetty, si ese archivo existe. Si el tty no se lista en el archivo, cualquier intento de iniciar una sesión como root fallará con el mensaje Login incorrect.
          auth required pam_unix.so nullok: Este módulo le solicita al usuario una contraseña y luego verifica la contraseña usando la información almacenada en /etc/passwd y, si existe, en /etc/shadow. El argumento nullok instruye al módulo pam_unix.so a que permita una contraseña en blanco.
          auth required pam_nologin.so: Este es el paso final de la autenticación. Verifica si el archivo /etc/nologin existe. Si existe y el usuario no es root, la autenticación falla.

#%PAM-1.0
auth required pam_securetty.so
auth required pam_unix.so nullok
auth required pam_nologin.so
account required pam_unix.so
password required pam_cracklib.so retry=3
password required pam_unix.so shadow nullok use_authtok
session required pam_unix.so

La línea pam_timestamp siguiente es común en la configuración PAM. El es la ruta completa al archivo de base de datos Berkeley DB
          NOTA: En este ejemplo, los tres módulos auth son revisados, aún si el primer módulo auth falla. Esto previene que el usuario sepa en qué nivel la autenticación falla. Tal conocimiento en las manos de una persona mal intencionada le permitiría violar el sistema fácilmente.
          account required pam_unix.so: Este módulo realiza cualquier verificación de cuenta necesaria. Por ejemplo, si las contraseñas shadow han sido activadas, el componente de la cuenta del módulo pam_unix.so verificará para ver si la cuenta ha expirado o si el usuario no ha cambiado la contraseña dentro del período de gracia otorgado.
          password required pam_cracklib.so retry=3: Si la contraseña ha expirado, el componente de la contraseña del módulo pam_cracklib.so le pide una nueva contraseña. Luego evalúa la nueva contraseña para ver si puede ser fácilmente determinada por un programa que descubre las contraseñas basadas en diccionarios. El argumento retry=3 especifica que si la prueba falla la primera vez, el usuario tiene dos opciones más para crear una contraseña mejor.
          password required pam_unix.so shadow nullok use_authtok: Esta línea especifica que si el programa cambia la contraseña del usuario, debe utilizar la interfaz password del módulo pam_unix.so para hacerlo.
          El argumento shadow le dice al módulo que cree contraseñas shadow cuando se actualiza la contraseña del usuario.
          El argumento nullok indica al módulo que permita al usuario cambiar su contraseña desde una contraseña en blanco, de lo contrario una contraseña vacía o en blanco es tratada como un bloqueo de cuenta.
          El argumento final de esta línea, use_authtok, proporciona un buen ejemplo de la importancia del orden al apilar módulos PAM. Este argumento advierte al módulo a no solicitar al usuario una nueva contraseña. En su lugar se acepta cualquier contraseña que fue registrada por un módulo de contraseña anterior. De este modo, todas las nuevas contraseñas deben pasar el test de pam_cracklib.so para contraseñas seguras antes de ser aceptado.
          session required pam_unix.so: La última línea especifica que el componente de la sesión del módulo pam_unix.so gestionará la sesión. Este módulo registra el nombre de usuario y el tipo de servicio a /var/log/secure al inicio y al final de cada sesión. Puede ser complementado apilándolo con otros módulos de sesión si necesita más funcionalidad.
A continuación se presenta una muestra de archivo de configuración de la aplicación PAM:

#%PAM-1.0
auth required pam_securetty.so
auth required pam_unix.so nullok
auth required pam_nologin.so
account required pam_unix.so
password required pam_cracklib.so retry=3
password required pam_unix.so shadow nullok use_authtok
session required pam_unix.so

          La primera línea es un comentario como lo es toda línea que inicie con el carácter #.
          Las líneas dos, tres y cuatro apilan tres módulos a usar para autentificaciones de inicio de sesión.
          auth required pam_securetty.so: Este módulo se asegura de que si el usuario está tratando de conectarse como root, el tty en el cual el usuario se está conectando está listado en el archivo /etc/securetty, si ese archivo existe. Si el tty no se lista en el archivo, cualquier intento de iniciar una sesión como root fallará con el mensaje Login incorrect.
          auth required pam_unix.so nullok: Este módulo le solicita al usuario una contraseña y luego verifica la contraseña usando la información almacenada en /etc/passwd y, si existe, en /etc/shadow. El argumento nullok instruye al módulo pam_unix.so a que permita una contraseña en blanco.
          auth required pam_nologin.so: Este es el paso final de la autenticación. Verifica si el archivo /etc/nologin existe. Si existe y el usuario no es root, la autenticación falla.

#%PAM-1.0
auth required pam_securetty.so
auth required pam_unix.so nullok
auth required pam_nologin.so
account required pam_unix.so
password required pam_cracklib.so retry=3
password required pam_unix.so shadow nullok use_authtok
session required pam_unix.so

La línea pam_timestamp siguiente es común en la configuración PAM. El es la ruta completa al archivo de base de datos Berkeley DB
          NOTA: En este ejemplo, los tres módulos auth son revisados, aún si el primer módulo auth falla. Esto previene que el usuario sepa en qué nivel la autenticación falla. Tal conocimiento en las manos de una persona mal intencionada le permitiría violar el sistema fácilmente.
          account required pam_unix.so: Este módulo realiza cualquier verificación de cuenta necesaria. Por ejemplo, si las contraseñas shadow han sido activadas, el componente de la cuenta del módulo pam_unix.so verificará para ver si la cuenta ha expirado o si el usuario no ha cambiado la contraseña dentro del período de gracia otorgado.
          password required pam_cracklib.so retry=3: Si la contraseña ha expirado, el componente de la contraseña del módulo pam_cracklib.so le pide una nueva contraseña. Luego evalúa la nueva contraseña para ver si puede ser fácilmente determinada por un programa que descubre las contraseñas basadas en diccionarios. El argumento retry=3 especifica que si la prueba falla la primera vez, el usuario tiene dos opciones más para crear una contraseña mejor.
          password required pam_unix.so shadow nullok use_authtok: Esta línea especifica que si el programa cambia la contraseña del usuario, debe utilizar la interfaz password del módulo pam_unix.so para hacerlo.
          El argumento shadow le dice al módulo que cree contraseñas shadow cuando se actualiza la contraseña del usuario.
          El argumento nullok indica al módulo que permita al usuario cambiar su contraseña desde una contraseña en blanco, de lo contrario una contraseña vacía o en blanco es tratada como un bloqueo de cuenta.
          El argumento final de esta línea, use_authtok, proporciona un buen ejemplo de la importancia del orden al apilar módulos PAM. Este argumento advierte al módulo a no solicitar al usuario una nueva contraseña. En su lugar se acepta cualquier contraseña que fue registrada por un módulo de contraseña anterior. De este modo, todas las nuevas contraseñas deben pasar el test de pam_cracklib.so para contraseñas seguras antes de ser aceptado.
          session required pam_unix.so: La última línea especifica que el componente de la sesión del módulo pam_unix.so gestionará la sesión. Este módulo registra el nombre de usuario y el tipo de servicio a /var/log/secure al inicio y al final de cada sesión. Puede ser complementado apilándolo con otros módulos de sesión si necesita más funcionalidad.

Fuente: http://www.linuxparatodos.net/portal/staticpages/index.php?page=pam

No hay comentarios:

Publicar un comentario