Autenticación con PAM
- DESCRIPCIÓN
El artículo describe el concepto de PAM, la estructura de la configuración de PAM y el uso de herramientas para configurar PAM.
- INTENCIÓN
Desea saber cómo configurar un módulo PAM y configurar el sistema para utilizar llaves U2F.
- ESFUERZO
Se tardan aproximadamente 20 minutos en leer el artículo.
- REQUISITOS
Para configurar la autenticación mediante llaves U2F, debe tener YubiKeys o llaves de seguridad.
1 Introducción a PAM #
Los administradores de sistemas y los programadores suelen restringir el acceso a ciertas partes del sistema o limitar el uso de ciertas funciones de una aplicación. Sin PAM, sería necesario adaptar las aplicaciones cada vez que se introdujera un nuevo mecanismo de autenticación, como LDAP, Samba o Kerberos. Sin embargo, ese proceso llevaría mucho tiempo y es propenso a errores. Una manera de evitar estos inconvenientes es separar las aplicaciones del mecanismo de autenticación y delegarlas en módulos gestionados centralmente. Cuando sea necesario utilizar un nuevo esquema de autenticación, bastará con adaptar o escribir un módulo PAM adecuado para que el programa en cuestión pueda utilizarlo.
El concepto de PAM está formado por:
Módulos PAM, que son un conjunto de bibliotecas compartidas para un mecanismo de autenticación específico.
Una pila de módulos con uno o más módulos PAM.
Un servicio compatible con PAM que necesita autenticación mediante una pila de módulos o módulos PAM. Normalmente, un servicio es un nombre familiar de la aplicación correspondiente, como
login
osu
. El nombre del servicioother
es una palabra reservada para las reglas por defecto.Argumentos de módulo, con los que se puede influir en la ejecución de un único módulo PAM.
Un mecanismo que evalúe cada resultado de la ejecución de un único módulo PAM. Un valor positivo ejecuta el siguiente módulo PAM. La forma en que se trata un valor negativo depende de la configuración: desde “sin influencia, continuar” hasta “terminar inmediatamente”, con cualquier otra opción intermedia válida.
2 Estructura de la configuración de PAM #
PAM en SLE Micro incluye una configuración basada en directorios. El conjunto de archivos de configuración se almacena en /etc/pam.d
. Cada servicio (o programa) que se basa en el mecanismo PAM tiene su propio archivo de configuración en ese directorio. Por ejemplo, el servicio de sshd
se puede encontrar en el archivo /etc/pam.d/sshd
.
/etc/pam.conf
) no se utiliza en SLE Micro
La configuración de cada servicio también se puede almacenar en /etc/pam.conf
. Sin embargo, por motivos de mantenimiento y facilidad de uso, este esquema de configuración no se utiliza en SLE Micro.
Estos archivos presentes en /etc/pam.d/
definen los módulos PAM empleados en el proceso de autenticación. Cada archivo consta de líneas, que definen un servicio, y cada línea consta de un máximo de cuatro componentes:
TYPE CONTROL MODULE_PATH MODULE_ARGS
Los componentes tienen el siguiente significado:
- TYPE
Declara el tipo de servicio. Los módulos PAM se procesan en stacks. Los distintos tipos de módulos tienen distintas finalidades. Por ejemplo, un módulo comprueba la contraseña, otro verifica la ubicación desde la que se accede al sistema y otro lee los ajustes específicos del usuario. PAM reconoce cuatro tipos de módulos diferentes:
-
auth
Comprueba la autenticidad del usuario, habitualmente se hace con una contraseña. Pero también se puede lograr con una tarjeta con chip o mediante datos biométricos (por ejemplo, huellas dactilares o exploración del iris).
-
account
Los módulos de este tipo comprueban si el usuario tiene permiso general para utilizar el servicio solicitado. Por ejemplo, deberá realizarse esta comprobación para garantizar que nadie inicie sesión con el nombre de usuario de una cuenta caducada.
-
password
El propósito de este tipo de módulo es permitir modificar un testigo de autenticación. Normalmente, se trata de una contraseña.
-
session
Los módulos de este tipo son responsables de gestionar y configurar sesiones de usuario. Se inician antes y después de la autenticación para registrar los intentos de inicio de sesión y configurar el entorno específico del usuario.
-
- CONTROL
Indica el comportamiento de un módulo PAM. Cada módulo puede tener los siguientes indicadores de control:
-
required
Los módulos con este indicador se deben procesar correctamente antes de proceder con la autenticación. Si falla un módulo con el indicador
required
, se procesarán el resto de módulos de este tipo antes de que el usuario reciba un aviso de que se ha producido un fallo durante el intento de autenticación.-
requisite
Los módulos con este indicador tienen que ser procesados correctamente, igual que los módulos con el indicador
required
. No obstante, si se produce un fallo en un módulo con este indicador, el usuario recibirá una notificación inmediata y no se procesarán más módulos. En caso de que no haya errores, se seguirá procesando el resto de los módulos, al igual que en el caso de los módulos con el indicadorrequired
. El indicadorrequisite
se puede utilizar como un filtro simple con el objeto de comprobar el cumplimiento de determinadas condiciones necesarias para una correcta autenticación.-
sufficient
Si se procesa correctamente un modulo con este indicador, la aplicación que lo ha solicitado recibe inmediatamente una notificación de proceso correcto y no se procesa ningún otro módulo, siempre y cuando anteriormente no haya fallado la ejecución de ningún módulo con el indicador
required
. El fallo de un módulo con el indicadorsufficient
no tiene consecuencias directas y los módulos siguientes se seguirán procesando según el orden correspondiente.-
optional
Que el proceso de un módulo con este indicador se lleve a cabo correctamente o haya errores no tiene consecuencias directas. Esta opción puede ser útil, por ejemplo, para módulos cuyo único cometido es mostrar un mensaje (por ejemplo informando al usuario acerca de la recepción de un mensaje de correo electrónico), sin realizar ninguna otra acción.
-
include
Si se da este indicador, el archivo especificado como argumento se inserta en este lugar.
-
- MODULE_PATH
Contiene un nombre de archivo completo de un módulo PAM. No es necesario especificarlo explícitamente si el módulo se encuentra en el directorio por defecto
/lib/security
(para todas las plataformas de 64 bits compatibles con SLE Micro, el directorio es/lib64/security
).- MODULE_ARGS
Contiene una lista de opciones separadas por espacios para influir en el comportamiento de un módulo PAM, como
debug
(habilita la depuración) onullok
(permite el uso de contraseñas vacías).
Además, hay archivos de configuración globales para los módulos PAM en /etc/security
, que definen el comportamiento exacto de estos módulos (por ejemplo pam_env.conf
y time.conf
). Todas las aplicaciones que utilizan un módulo PAM llaman a un conjunto de funciones PAM, las cuales procesan la información de los archivos de configuración y devuelven el resultado a la aplicación que ha realizado la petición.
Para simplificar la creación y el mantenimiento de módulos PAM, se han introducido archivos de configuración por defecto comunes para los tipos auth
, account
y password
y los módulos session
. Se recuperan de la configuración de PAM de cada aplicación. Las actualizaciones de los módulos de configuración de PAM globales de common-*
se propagan por todos los archivos de configuración de PAM sin necesidad de que el administrador actualice todos los archivos de configuración de PAM.
Los archivos de configuración de PAM globales se mantienen mediante la herramienta pam-config
. Esta herramienta añade automáticamente nuevos módulos a la configuración, cambia la configuración de los existentes o suprime módulos (u opciones) de las configuraciones. La intervención manual en el mantenimiento de las configuraciones de PAM se reduce al mínimo o incuso es innecesaria.
2.1 Ejemplo de configuración de PAM #
Para demostrar un ejemplo de caso de uso real de la configuración de PAM, en esta sección se ha utilizado la configuración de sshd:
/etc/pam.d/sshd
) ##%PAM-1.0 1 auth requisite pam_nologin.so 2 auth include common-auth 3 account requisite pam_nologin.so 2 account include common-account 3 password include common-password 3 session required pam_loginuid.so 4 session include common-session 3 session optional pam_lastlog.so silent noupdate showfailed 5
Declara la versión de este archivo de configuración para PAM 1.0. Esto es simplemente una convención, pero podría utilizarse en el futuro para comprobar la versión. | |
Comprueba, si existe | |
Se refiere a los archivos de configuración de cuatro tipos de módulos: | |
Define el atributo del proceso UID de entrada para el proceso que se ha autenticado. | |
Muestra información sobre el último inicio de sesión de un usuario. |
Al incluir los archivos de configuración en lugar de añadir cada módulo por separado a la configuración de PAM respectiva, se obtiene automáticamente una configuración de PAM actualizada cuando un administrador cambia los valores por defecto.
El primer archivo include (common-auth
) llama a los módulos de tipo auth
: pam_env.so
, pam_gnome_keyring.so
y pam_unix.so
. Consulte el Ejemplo 2, “Configuración por defecto de la sección auth
(common-auth
)”. Tenga en cuenta que los módulos pueden variar según la instalación.
auth
(common-auth
) #auth required pam_env.so 1 auth optional pam_gnome_keyring.so 2 auth required pam_unix.so try_first_pass 3
| |
| |
|
La pila completa de módulos auth
se procesa antes de que sshd
reciba información sobre si el inicio de sesión se ha realizado correctamente. Todos los módulos de la pila que tienen el indicador de control required
deben procesarse correctamente antes de que sshd
reciba un mensaje sobre el resultado positivo. Aunque alguno de los módulos no llegase a procesarse correctamente, el resto de la pila de módulos sí continuaría procesándose y, solo entonces, sshd
recibiría una notificación acerca del resultado incorrecto.
Cuando todos los módulos del tipo auth
se han procesado correctamente, se procesa otra instrucción include, en este caso, la del Ejemplo 3, “Configuración por defecto de la sección account
(common-account
)”. common-account
contiene solo un módulo, pam_unix
. Si pam_unix
indica como resultado que el usuario existe, sshd recibe un mensaje de notificación al respecto y se pasa a procesar la siguiente pila de módulos (password
), los cuales se describen en:
account
(common-account
) #account required pam_unix.so try_first_pass
De nuevo, la configuración de PAM de sshd
implica solo una instrucción include 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 requisite
y 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. Esto se consigue con el módulo pam_cracklib
. El módulo pam_unix
utilizado posteriormente transfiere las contraseñas antiguas y nuevas desde pam_cracklib
, por lo que el usuario no necesita autenticarse de nuevo después de cambiar la contraseña. Esto también evita que se puedan saltar las comprobaciones que lleva a cabo pam_cracklib
. Siempre que el tipo account
o el tipo auth
se configuren para quejarse de contraseñas caducadas, también se deben utilizar los módulos password
.
En el último paso, se llama a los módulos de tipo session
(incluidos en el archivo common-session
) para que configuren la sesión según los ajustes del usuario en cuestión. El módulo pam_limits
carga el archivo /etc/security/limits.conf
, que puede definir límites en el uso de ciertos recursos del sistema. El módulo pam_unix
se procesa de nuevo. El módulo pam_umask
se puede utilizar para definir la máscara de creación del modo de archivo. Dado que este módulo lleva el indicador optional
, un fallo de este módulo no afectaría a la finalización correcta de toda la pila de módulos de sesión. Cuando el usuario cierra la sesión, se vuelve a llamar a los módulos de session
.
3 Configuración de módulos PAM #
Algunos módulos PAM son configurables. Los archivos de configuración se encuentran en /etc/security
. Esta sección describe brevemente los archivos de configuración relevantes para el ejemplo de sshd: pam_env.conf
y limits.conf
.
3.1 pam_env.conf #
pam_env.conf
se puede utilizar para definir un entorno estandarizado para usuarios, el cual se establecerá cada vez que se llame al módulo pam_env
. Si se utiliza este archivo, las variables de entorno deberán predefinirse con la sintaxis siguiente:
VARIABLE [DEFAULT=VALUE] [OVERRIDE=VALUE]
- VARIABLE
Nombre de la variable de entorno que definir.
-
[DEFAULT=<value>]
VALUE es el valor por defecto que el administrador desea establecer.
-
[OVERRIDE=<value>]
Los valores se pueden consultar y definir mediante
pam_env
, sustituyendo al valor por defecto.
Un ejemplo típico de cómo se podría utilizar pam_env
sería para adaptar la variable DISPLAY
, que se cambia cada vez que se inicia sesión de forma remota. Este ejemplo se muestra en Ejemplo 4, “pam_env.conf”.
REMOTEHOST DEFAULT=localhost OVERRIDE=@{PAM_RHOST} DISPLAY DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
La primera línea define el valor de la variable REMOTEHOST
en localhost
, la cual se utilizará cada vez que pam_env
no pueda determinar ningún otro valor. La variable DISPLAY
, a su vez, contiene el valor de REMOTEHOST
. Encontrará más información en los comentarios de /etc/security/pam_env.conf
.
3.2 limits.conf #
Se pueden definir límites del sistema para usuarios o para grupos en el archivo limits.conf
, que lee el módulo pam_limits
. Este archivo permite definir límites rígidos, que no se podrán sobrepasar, y límites flexibles, que sí se pueden sobrepasar temporalmente. Para obtener más información acerca de la sintaxis y las opciones, consulte los comentarios en /etc/security/limits.conf
.
4 Configuración de PAM mediante pam-config
#
La herramienta pam-config
ayuda a configurar los archivos de configuración globales de PAM (/etc/pam.d/common-*
) y varias configuraciones de aplicaciones seleccionadas. Para obtener una lista de los módulos compatibles, utilice el comando pam-config --list-modules
. Utilice el comando pam-config
para mantener los archivos de configuración de PAM. Añada nuevos módulos a las configuraciones de PAM, suprima otros módulos o modifique las opciones de esos módulos. Al cambiar los archivos de configuración de PAM globales, no es necesario realizar ajustes manuales en la configuración de PAM para aplicaciones individuales.
Un caso de uso sencillo de pam-config
implica lo siguiente:
Generar automáticamente una nueva configuración de PAM de estilo Unix. Deje que
pam-config
cree la configuración más sencilla posible que se pueda ampliar más adelante. El comandopam-config --create
crea una configuración de autenticación Unix simple. Los archivos de configuración preexistentes no mantenidos porpam-config
se sobrescriben, pero las copias de seguridad se conservan como*.pam-config-backup
.Añadir un nuevo método de autenticación. Para añadir un nuevo método de autenticación (por ejemplo, LDAP) a la pila de módulos PAM solo hace falta un simple comando
pam-config --add --ldap
. LDAP se añade siempre que sea necesario en todos los archivos de configuración de PAMcommon-*-pc
.Añadir depuración con fines de prueba. Para asegurarse de que el nuevo procedimiento de autenticación funciona según lo previsto, active la depuración para todas las operaciones relacionadas con PAM.
pam-config --add --ldap-debug
activa la depuración de las operaciones de PAM relacionadas con LDAP.Consultar su configuración. Antes de aplicar finalmente la nueva configuración de PAM, compruebe si contiene todas las opciones que desea añadir. El comando
pam-config --query --
MODULE muestra tanto el tipo como las opciones del módulo PAM consultado.Eliminar las opciones de depuración. Por último, elimine la opción de depuración de la configuración cuando esté completamente satisfecho con el rendimiento de la misma. El comando
pam-config --delete --ldap-debug
desactiva la depuración para la autenticación LDAP. En caso de que haya añadido opciones de depuración para otros módulos, utilice comandos similares para desactivarlas.
Para obtener más información sobre el comando pam-config
y las opciones disponibles, consulte la página del manual de pam-config(8)
.
5 Configuración manual de PAM #
Si prefiere crear o mantener manualmente los archivos de configuración de PAM, asegúrese de inhabilitar pam-config
para ellos.
Cuando se crean los archivos de configuración de PAM desde cero mediante el comando pam-config --create
, se crean enlaces simbólicos desde los archivos common-*
a archivos common-*-pc
. pam-config
solo modifica los archivos de configuración common-*-pc
. La eliminación de estos enlaces simbólicos inhabilita pam-config
de forma efectiva, ya que pam-config
solo funciona en los archivos common-*-pc
y estos archivos no entran en vigor sin los enlaces simbólicos.
pam_systemd.so
en la configuración
Si va a crear su propia configuración de PAM, asegúrese de incluir pam_systemd.so
con el valor session
optional
configurado. No incluir pam_systemd.so
puede causar problemas con los límites de tareas de systemd
. Para obtener más información, consulte la página de manual de pam_systemd.so
.
6 Configuración de SLE Micro para requerir claves U2F para el inicio de sesión local #
Para proporcionar más seguridad durante el inicio de sesión local a SLE Micro, puede configurar la autenticación de dos factores mediante el marco pam-u2f
y la función U2F en YubiKeys y llaves de seguridad.
Para configurar U2F en el sistema SLE Micro, debe asociar la llave a su cuenta en SLE Micro. A continuación, configure el sistema para utilizar la llave. El proceso se describe en las secciones siguientes.
6.1 Asociación de la llave U2F a su cuenta #
Para asociar su llave U2F a su cuenta, haga lo siguiente:
Inicie sesión en su equipo.
Inserte la llave U2F.
Cree un directorio para la configuración de la llave U2F:
>
sudo
mkdir -p ~/.config/YubicoEjecute el comando
pamu2fcfg
, que genera líneas de configuración:>
sudo
pamu2fcfg > ~/.config/Yubico/u2f_keysCuando el dispositivo comience a parpadear, toque el contacto de metal para confirmar la asociación.
Se recomienda utilizar un dispositivo U2F de copia de seguridad, que se puede configurar ejecutando los siguientes comandos:
Ejecutar:
>
sudo
pamu2fcfg -n >> ~/.config/Yubico/u2f_keysCuando el dispositivo comience a parpadear, toque el contacto de metal para confirmar la asociación.
A fin de aumentar la seguridad, puede mover el archivo de salida de la ubicación por defecto a un directorio que requiera permiso de sudo
para modificar el archivo. Por ejemplo, muévalo al directorio /etc
. Para ello, siga los pasos siguientes:
Cree un directorio en
/etc
.>
sudo
mkdir /etc/YubicoMueva el archivo creado:
>
sudo
mv ~/.config/Yubico/u2f_keys /etc/Yubico/u2f_keys
u2f_keys
en una ubicación que no sea la ubicación por defecto
Si mueve el archivo de salida a un directorio que no sea el directorio por defecto ($HOME/.config/Yubico/u2f_keys
), deberá añadir la vía al archivo /etc/pam.d/login
como se describe en la Sección 6.2, “Actualización de la configuración de PAM”.
6.2 Actualización de la configuración de PAM #
Después de crear la configuración de las llaves U2F, debe ajustar la configuración de PAM en el sistema.
Abra el archivo
/etc/pam.d/login
.Añada la línea
auth required pam_u2f.so
al archivo de la siguiente manera:#%PAM-1.0 auth include common-auth auth required pam_u2f.so account include common-account password include common-password session optional pam_keyinit.so revoke session include common-session #session optional pam_xauth.so
Si ha colocado el archivo
u2f_keys
en una ubicación que no sea$HOME/.config/Yubico/u2f_keys
, debe utilizar la opciónauthfile
en el archivo PAM/etc/pam.d/login
de la siguiente manera:#%PAM-1.0 auth requisite pam_nologin.so auth include common-auth auth required pam_u2f.so authfile=<PATH_TO_u2f_keys> ...
Donde <PATH_TO_u2f_keys> es la vía absoluta al archivo
u2f_keys
.
7 Información legal #
Copyright © 2006 –2024 SUSE LLC y colaboradores. Reservados todos los derechos.
Está permitido copiar, distribuir y modificar este documento según los términos de la licencia de documentación gratuita GNU, versión 1.2 o (según su criterio) versión 1.3. Este aviso de copyright y licencia deberán permanecer inalterados. En la sección titulada “GNU Free Documentation License” (Licencia de documentación gratuita GNU) se incluye una copia de la versión 1.2 de la licencia.
Para obtener información sobre las marcas comerciales de SUSE, consulte https://www.suse.com/company/legal/. Todas las marcas comerciales de otros fabricantes son propiedad de sus respectivas empresas. Los símbolos de marcas comerciales (®, ™, etc.) indican marcas comerciales de SUSE y sus filiales. Los asteriscos (*) indican marcas comerciales de otros fabricantes.
Toda la información recogida en esta publicación se ha compilado prestando toda la atención posible al más mínimo detalle. Sin embargo, esto no garantiza una precisión total. Ni SUSE LLC, ni sus filiales, ni los autores o traductores serán responsables de los posibles errores o las consecuencias que de ellos pudieran derivarse.