PAM: Pluggable Authentication Modules
Introducción
PAM es un mecanismo que permite ampliar enormemente el control de acceso
de un usuario a una aplicación sin necesidad de tocar ésta. Si la aplicación
incluye soporte para PAM
basta con cambiar la configuración del sistema
para que existan formas nuevas de controlar el acceso, incluyendo la ejecución
de tareas cuando una sesión comienza ó acaba.
La configuración de PAM
se realiza mediante un archivo de texto con las
reglas (la normativa de acceso) situado en el directorio /etc/pam.d
; si éste
no existe se intentan utilizar el archivo /etc/pam.conf
.
Generalmente una aplicación buscará primero un archivo con el mismo nombre que
ella y, si no lo encuentra, irá a consultar el genérico llamado
/etc/pam.d/other
que debería rechazar cualquier acceso por principio, ó
emplear un mecanismo aplicable a todo el mundo.
Cada uno de los archivos puede ó no incluir a otros, y termina formando una pila de acciones a llevar a cabo para dar por satisfactoria la entrada al servicio.
Los módulos que conforman el sistema de control de acceso están situados
normalmente en /lib/security
como bibliotecas de carga dinámica.
Áreas de actuación
PAM
cubre varias áreas distintas y es importante saber cuáles son y cuándo
se aplican, dada la naturaleza de pila de su funcionamiento.
auth
Abarca dos aspectos en la autorización de acceso:
- Identificar al usuario, garantizando que es quien dice ser, para lo cual pide a la aplicación que solicite una contraseña ó algún mecanismo similar de control.
- Asignar grupos al usuario una vez superado el paso anterior.
Algunos de los módulos que se aplican en este área:
- pam_env: cambia variables de entorno.
- pam_faildelay: establece el retraso que se impone al usuario tras un fallo de acceso en una aplicación dada.
- pam_filter: es un tanto marginal, puesto que sólo se puede emplear en un terminal ó en un programa que emplee la entrada y salida estándar, y tiene como fin filtrar todo lo que pase entre el usuario y la aplicación, tal y como cambiar mayúsculas por minúsculas.
account
Referente a las limitaciones de una cuenta de usuario, esto es, si el usuario está identificado, ¿ qué es lo que puede hacer ?
Útil para restringir accesos basados en aspectos como la hora del día, la carga del sistema ó el origen del acceso, como por ejemplo, sólo se permite entrar como root desde la consola.
Algunos de los módulos que se aplican:
- pam_localuser: require que el usuario aparezca en
/etc/passwd
. - pam_mail: informa al usuario si tiene correo nuevo.
- pamuserdb: emplea una base de datos [[WP BerkeleyDB]] para identificar a los usuarios.
session
Aplicable a la gestión de conexiones y se invoca cuando se deben realizar tareas al comienzo ó al final de la sesión, como por ejemplo
- Registrar el acceso
- Montar unidades remotas
- Crear directorios si no existen
Algunos de los módulos que se aplican:
- pam_env: cambia variables de entorno.
- pam_exec: llama a un programa externo.
- pam_xauth: traslada autorizaciones X entre usuarios.
password
Todo lo referido a las contraseñas, bien en su actualización, bien en su cambio, y extensible a todos datos identificativos.
- pam_unix: identificación tradicional por contraseñas, normalmente
empleando los archivos
/etc/passwd
y/etc/shadow
. - pam_echo: muestra mensajes especiales en el terminal del usuario, leyendo de un determinado archivo y sustituyendo secuencias especiales como el nombre de la máquina remota, el terminal ó el nombre del servicio.
- pam_cracklib: verifica la fortaleza de las contraseñas verificando cosas como que no esté en un diccionario, que no sea un palíndromo y que no sea demasiado parecida ó incluso igual a una antigua contraseña.
Síntaxis de archivos de configuración
Los archivos que definen el mecanismo a utilizar con PAM
consisten en
líneas de reglas, con la característica de que admiten comentarios (usando el
carácter #
) y pueden extenderse utilizando una barra como carácter de escape
del fin de línea. Vamos, lo habitual en las configuraciónes UNIX.
Cada regla es una colección de elementos sintácticos (tokens) separados por espacios en blanco, siendo únicamente los tres primeros insensibles a maýusculas y minúsculas.
servicio tipo control ruta-al-modulo parametros-del-modulo
Si el archivo se encuentra bajo /etc/pam.d
el primer elemento, el servicio,
puede omitirse ya que se toma del nombre de dicho archivo; por contra, la
síntaxis completa es obligatoria en el archivo /etc/pam.conf
. Como ya he
dicho, existe el servicio other
que actúa como comodín para todos los demás.
Como ya hemos comentado los módulos son apilables y el orden es pues importante, de tal manera que es posible la combinación de varios archivos para una única tarea de control de acceso.
servicio
Típicamente es el nombre familiar con el que se conoce a la aplicación;
login
y su
son dos buenos ejemplos de ello. Sólo las líneas que incluyen
el nombre del servicio se aplican a la aplicación dada.
tipo
Este elemento es el grupo de gestión al que corresponde la acción y que hemos
descrito antes como áreas que cubre PAM
.
control
Determina cómo comportarse ante el éxito ó el fracaso del módulo en sus tareas de autenticación. Existen dos tipos de síntaxis: una simple y otra compleja.
Para el tipo simple existen las siguientes palabras clave:
- required: indica que si el módulo falla se denegará el acceso, aunque se deberán invocar el resto de la pila de módulos (para este servicio y tipo).
- requisite: igual que el anterior, si falla se deniega el acceso, pero no se ejecuta ningún módulo más y se retorna inmediatamente.
- sufficient: el éxito de este módulo es suficiente para garantizar el acceso, a menos que algún módulo de tipo required haya fallado antes, en cuyo caso se ignora el resultado. En caso de fallo no se considera algo fatal para autorizar el acceso.
- optional: el fallo de este módulo sólo es significativo si el único de la pila para su tipo.
ruta-al-modulo
Puede ser tanto relativa como absoluta. En el primer caso suele serlo respecto
a /lib/security
aunque es posible que existan otros lugares dependiendo de
la arquitectura y la distribución.
parametros-del-modulo
Lista de elementos separados por espacios en blanco que pueden usarse para modificar el comportamiento del módulo, y que dependen totalmente de él, por lo que la documentación sobre los mismos estará junto al módulo en sí.
Enlaces
- Tutorial sobre PAM usando el programa hwbrowser como ejemplo.
- La documentación oficial incluída en el paquete libpam-doc y en la guía oficial.
- El módulo Perl que permite comunicarse con el subsistema
PAM
: Authen::PAM.