Linux-PAM es una rica colección de módulos compartidos que autentican de forma interactiva a un usuario en programas (o servicios) en un sistema Linux. Linux-PAM es un acrónimo de Pluggable Authentication Modules, que se desarrolló a partir del diseño de Unix-PAM. Combina numerosos módulos de autenticación de bajo nivel con una API de alto nivel para proporcionar autenticación dinámica para aplicaciones. A pesar del esquema de autenticación subyacente, esto permite a los desarrolladores crear aplicaciones que requieren autenticación. Linux-PAM (también conocido como «PAM») con frecuencia se admite de forma predeterminada en las variantes actuales de Linux.
Lo más importante que debe comprender un administrador de sistemas es cómo los archivos de configuración de PAM proporcionan el enlace entre los servicios y los PAM que llevan a cabo las actividades de autenticación reales. No necesita comprender el funcionamiento interno de PAM. PAM podría alterar significativamente la seguridad de su sistema Linux. Una configuración incorrecta puede prohibir total o parcialmente el acceso a su máquina.
Interfaces de Linux-PAM en Ubuntu 20.04
Cuatro grupos de administración diferentes manejan las tareas de autenticación de PAM por separado. Cuando un usuario típico solicita un servicio restringido, estos grupos manejan varias partes de la solicitud:
- Cuenta: este módulo se utiliza para determinar si la cuenta suministrada es válida en las circunstancias actuales. En esta categoría se verifican varios factores, incluido el vencimiento de la cuenta, la hora del día o si el usuario tiene autorización para el servicio correspondiente.
- Autenticación: En este módulo se valida la identidad del usuario una vez que se ha verificado que toda la información básica es precisa. La identidad del usuario se verifica al permitirle proporcionar un inicio de sesión o cualquier otro dato particular que solo él debe conocer.
- Contraseña: se supone que el módulo de autenticación funciona en colaboración con este módulo, que ayuda al usuario a actualizar las contraseñas. Ambas resonancias brindan la capacidad de hacer cumplir contraseñas seguras.
- Sesión: este módulo describe las actividades que deben realizarse al comienzo y al final de las sesiones, y no es el menos importante de los módulos que componen el orden en que la estrategia general de PAM completa la tarea deseada. La sesión comienza cuando la persona se ha autenticado con éxito.
Cómo validar un programa Linux-PAM en Ubuntu 20.04
Una aplicación o programa debe ser «consciente de PAM», o construido y compilado expresamente para usar PAM. Use el comando «ldd» para ver si un programa se creó usando la biblioteca PAM para determinar si es «consciente de PAM» o no. Cuando se ejecuta el comando «ldd /bin/su», el archivo «libpam.so» se resalta en la segunda línea que admite la consulta. La validación se muestra en la siguiente captura de pantalla:
El directorio /etc/pam.d/ contiene la configuración para LINUX-PAM. Vaya al directorio PAM ingresando el siguiente comando en la terminal de su sistema operativo Linux:
La instantánea anterior muestra que uno puede examinar el contenido ingresando el comando «ls» dentro del directorio PAM. El servidor sshd debe estar instalado si no aparece como un servicio que implementa PAM. SSH, también conocido como shell seguro, es una aplicación de red que encripta la transmisión de datos y permite que varios tipos de computadoras y usuarios se conecten de manera segura y remota a través de una red a varios sistemas. El siguiente comando adquiere el paquete openssh-server:
Luego puede volver a ingresar al directorio PAM, verificar los servicios y ver que se agregó el sshd después de que haya terminado de instalar todos los archivos. El servicio sshd está resaltado en el directorio «/etc/pam.d».
Cómo configurar un programa Linux-PAM en Ubuntu 20.04
La llamada de cada módulo PAM tiene como resultado un éxito o un fracaso. El resultado es manejado por PAM usando banderas de control. Los indicadores de control especifican la importancia relativa del éxito o el fracaso de cada módulo para el objetivo general de establecer la identidad del usuario con el servicio, y los módulos se pueden apilar en un orden determinado. Hay cuatro indicadores de control preconfigurados disponibles:
- requerido: para que la autenticación avance, la respuesta del paquete debe ser exitosa. El usuario no recibirá una alerta si el intento falla en esta etapa hasta que todos los paquetes prueben su uso de esa interfaz y hayan terminado de ejecutar sus hallazgos.
- requisito: Según los argumentos, si esto se rompe, todo lo demás también. PAM también se cancelará y se entregará un aviso de falla.
- suficiente: si este módulo es exitoso y todos los módulos requeridos anteriores también lo son, no se llama a ningún otro módulo requerido.
- opcional: indica que el módulo no es esencial para que la solicitud de servicio del usuario tenga éxito o no. Su valor solo se considera en ausencia de éxitos o errores concluyentes de módulos apilados anteriores o posteriores.
- incluir: cuando el parámetro coincidente coincide, cada línea en el archivo de configuración es recuperada por este indicador de control.
Simplemente escriba el siguiente comando dentro del directorio PAM:
Como puede ver, el término control-flags, que hemos descrito anteriormente en el siguiente archivo PAM:
Se debe utilizar la siguiente pauta general al escribir la configuración principal:
- Servicio: el nombre real del programa
- Tipo: interfaz/contexto/tipo de módulo
- Control-Bandera: si el módulo no completa su tarea de autenticación, la bandera de control determina cómo se comportará la PAM-API
- Módulo: el nombre de archivo de la ruta absoluta o relativa del PAM
- Argumento del módulo: los parámetros del módulo son una lista de tokens que se pueden usar para afectar la funcionalidad del módulo
Si desea evitar que los usuarios raíz se conecten a cualquier sistema a través de SSH, debe restringir el acceso al servicio sshd. Además, se restringirá el acceso a los servicios de inicio de sesión.
Varios módulos limitan el acceso y otorgan privilegios, pero podemos utilizar el módulo increíblemente adaptable y rico en funciones /lib/security/pam listfile.so. Vaya al directorio /etc/pam.d/, abra el archivo del servicio de destino y realice los cambios necesarios de la siguiente manera:
Se debe insertar en el expediente la siguiente norma:
Anteriormente, el tipo de módulo era autenticación (o contexto). La bandera de control indica que, a pesar de lo bien que funcionan los otros módulos, si se utiliza el módulo, debe tener éxito, o el resultado general será un fracaso. El módulo PAM listfile.so proporciona un medio para habilitar o denegar servicios basados en cualquier archivo. onerr=succeed es un argumento para el módulo. item=user es un argumento de módulo que describe el contenido del archivo que debe verificarse. La opción del módulo sense=deny indica la acción a realizar si el elemento se encuentra en el archivo. De lo contrario, se solicita el curso de acción contrario. El archivo con un elemento por línea se especifica mediante la opción del módulo file=/etc/ssh/deniedusers.
El nombre raíz debe agregarse al archivo /etc/ssh/deniedusers después de haberlo creado:
Después de hacer los permisos necesarios, guarde las modificaciones y cierre el archivo:
Con la regla anterior implementada, se le indicará a PAM que verifique /etc/ssh/deniedusers y evite que los usuarios de la lista usen SSH y los servicios de inicio de sesión en el futuro.
Conclusión
Los programas que dependen de la autenticación pueden garantizar que solo las aplicaciones autorizadas estén en un sistema operativo Linux gracias a la sólida API de alto nivel conocida como PAM. Tiene mucho poder, pero también es bastante difícil de comprender y operar. Para aplicaciones y servicios que se ejecutan en Linux, PAM ofrece soporte de autenticación dinámica. El rendimiento de un módulo se puede evaluar utilizando cualquiera de los indicadores de control enumerados en este manual. PAM se usa a menudo en muchos sistemas seguros porque es más fácil de usar y confiable que el mecanismo de autenticación convencional de contraseña y nombre de usuario.