Creative Commons License
Excepto donde se indique otra cosa, todo el contenido de este lugar está bajo una licencia de Creative Commons.
Taquiones > sysadmin > PAM: Pluggable Authentication Modules

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