La seguridad cuando administramos usuarios en ambientes Linux es esencial y debemos siempre buscar las mejores opciones disponibles para tal fin ya sea a nivel interno o externo.Uno de los métodos mas seguros para aumentar la seguridad en los sistemas Linux es administrar de una forma mucho mas completa la forma como los usuarios se autentican en el sistema, esto permite que solo aquellos usuarios que disponen de las credenciales correctas son los que tendrán acceso al sistema.
Para este caso contamos con una funcionalidad llamada Linux-PAM (Pluggable Authentication Modules for Linux - Módulos de autenticación conectables para Linux) la cual se ha desarrollado como un conjunto de bibliotecas con las cuales será posible que el administrador del sistema seleccione la forma en que las aplicaciones autentican a los usuarios de la red local.
Al compilar una aplicación compatible con PAM, estamos en la posibilidad de cambiar entre los mecanismos de autenticación usada.
Para entender un poco mejor este concepto podemos analizar la forma como se autentican los usuarios en la actualidad, en primer lugar la identidad del usuario se verifica cuando se ingresa la contraseña asignada al usuario, estas contraseñas se alojan en el archivo /etc/passwd, luego, el privilegio se define en forma de un identificador de usuario personal llamado UID y la pertenencia a los grupos disponibles, los servicios y las aplicaciones están disponibles en base a la identidad personal y grupal de cada usuario.
La biblioteca de PAM está configurada de forma local en el archivo de sistema /etc/pam.conf o en una serie de archivos ubicados en /etc/pam.d/ con el fin de autenticar una solicitud de usuario a través de los módulos de autenticación disponibles solo de forma local.
Los módulos están disponibles en el directorio /lib/security o /lib64/security. La sintaxis del archivo de configuración /etc/pam.conf está compuesta de una lista de reglas, y cada regla está ubicada en una sola línea, pero puede extenderse con un final de línea `\ <LF> '. Los comentarios están precedidos por las marcas `# 'y se extienden al siguiente final de la línea seleccionada.
El formato de cada regla es una colección de fichas separadas por espacios, las tres primeras no distinguen entre mayúsculas y minúsculas así:
service type control module-path module-argumentsLos parámetros usados son:
La sintaxis de cada archivo en /etc/pam.d/ es idéntica y está formada por líneas con la siguiente estructura:
type control-flag module module-argumentsPor ejemplo, una definición de regla (sin argumentos de módulo) disponible en el archivo /etc/pam.d/sshd, la cual no permite inicios de sesión no root cuando esté disponible /etc/nologin es:
account required pam_nologin.so
1. Cómo administrar grupos y controles de PAM en Linux
Las tareas de autenticación de PAM se catalogan en cuatro grupos de administración independientes, cada uno de estos grupos gestionan diferentes aspectos de la solicitud de un usuario para un servicio restringido.
Un módulo está asociado a uno de estos tipos de grupos de administración de la siguiente forma:
Los archivos de objetos PAM estan alojados en el siguiente directorio /lib/security/ o /lib64/security según la arquitectura usada.
Los indicadores de control soportados en PAM son:
Existen otros valores como:
2. Cómo verificar que un programa es compatible con PAM en Linux
Para implementar PAM en una aplicación, esta debe haber sido escrita y compilada específicamente para usar PAM, para comprobar si esa aplicación es compatible o no, por ejemplo, SSH, ejecutaremos lo siguiente:
sudo ldd /usr/sbin/sshd | grep libpam.so
3. Cómo restringir el acceso root a través de SSH con PAM en Linux
PAM puede ser usado para deshabilitar el acceso del usuario root a un sistema a través de SSH y programas de inicio de sesión y esto ayuda a aumentar las opciones de seguridad del sistema.
Si deseamos realizar esto, usaremos el modulo /lib/security/pam_listfile.so el cual nos da la opción de limitar los privilegios de cuentas específicas.
Para realizar esta acción, vamos a acceder al archivo /etc/pam.d/ de la siguiente forma:
sudo nano /etc/pam.d/sshdO
sudo nano /etc/pam.d/login
Allí veremos lo siguiente:
Para este caso añadiremos las siguientes líneas al final:
auth required pam_listfile.so \ onerr=succeed item=user sense=deny file=/etc/ssh/deniedusers
En este caso se han añadido los siguientes parámetros:
Guardamos los cambios usando las teclas Ctrl + O y salimos del editor usando Ctrl + X.
Luego de esto debemos crear el archivo /etc/ssh/deniedusers y añadir el usuario root en él y posteriormente asignar los permisos respectivos:
sudo chmod 600 /etc/ssh/deniedusers
4. Cómo configurar de forma avanzada de PAM en Linux
Un valor especial es el valor predeterminado en PAM, con lo cual todos los valores no se mencionan explícitamente, por ello, el valorN corresponde al código de retorno de la función invocada en el módulo para el cual se define la línea.
La acción dispone de algunos argumentos como:
Cada una de las palabras base de PAM, required; requisite; sufficient y optional, disponen de una expresión equivalente en términos de la [...] sintaxis, con la cual será posible escribir reglas más complejas como:
Por ejemplo, en CentOS 7 podremos ver las reglas del archivo de PAM ejecutando:
sudo nano /etc/pam.d/postlogin
Si accedemos al archivo:
sudo nano /etc/pam.d/smartcard-auth
Para acceder a mas ayuda de PAM podemos ejecutar:
man pam.dCon PAM será posible crear o editar reglas para una mejor administración de los procesos de autenticación en Linux.