Desde Linux fico  

Autenticación PAM – Redes PYMES

Índice general de la serie: Redes de Computadoras para las PYMES: Introducción

¡Hola amigas y amigos!

Con este artículo pretendemos ofrecer una Visión General al tema de la Autenticación mediante PAM. Estamos acostumbrados a utilizar diariamente nuestra Estación de Trabajo con algún sistema operativo Linux/UNIX y en pocas ocasiones nos detenemos a estudiar el cómo se produce el mecanismo de autenticación cada vez que iniciamos una sesión. Acaso conocemos de la existencia de los archivos /etc/passwd, y /etc/shadow que constituyen la base de datos principal de las Credenciales de Autenticación de los usuarios locales. Esperamos que después de la lectura de este post se disponga -al menos- de una idea clara de cómo funciona PAM.

Autenticación

La Autenticación -para propósitos prácticos- es la forma en que un usuario se verifica ante un sistema. El proceso de autenticación requiere la presencia de un juego de identidad y credenciales -nombre de usuario y su contraseña- las que se comparan con la información almacenada en alguna base de datos. Si las credenciales presentadas son iguales a las almacenadas y la cuenta del usuario está activa, se dice que el usuario se autenticó correctamente o que pasó satisfactoriamente el proceso de autenticación.

Una vez que el usuario se autenticó, se pasa esa información al servicio de control de acceso para determinar qué puede hacer ese usuario en el sistema y a cuales recursos tiene la debida autorización para acceder a ellos.

La información para verificar al usuario pueden almacenarse en bases de datos locales del sistema, o el sistema local puede hacer referencia a una base de datos existente en un sistema remoto, tales como bases de datos LDAP, Kerberos, NIS, etcétera.

La mayoría de los sistemas operativos UNIX®/Linux tienen las herramientas necesarias para configurar el servicio de autenticación cliente/servidor de los tipos mas comunes de base de datos de usuarios. Algunas de esos sistemas disponen de herramientas gráficas muy completas como Red Hat / CentOS, SUSE / openSUSE, y otras distribuciones.

PAM: Pluggable Authentication Module

Los Módulos que se Insertan para la Autenticación los utilizamos diariamente cuando iniciamos sesión en nuestro Desktop con un sistema operativo basado en Linux/UNIX, y en muchas otras ocasiones que accedemos a servicios locales o remotos que tienen un determinado módulo local PAM insertado para la autenticación frente a ese servicio.

Una idea práctica de como se Insertan los Módulos PAM la podemos obtener mediante la secuencia del estado de la autenticación en un equipo con Debian y en otro con CentOS que desarrollamos a continuación.

Debian

Documentación

Si instalamos el paquete libpam-doc dispondremos de una muy buena documentación ubicada en el directorio /usr/share/doc/libpam-doc/html.

root@linuxbox:~# aptitude install libpam-doc
root@linuxbox:~# ls -l /usr/share/doc/libpam-doc/

También existe más documentación sobre PAM en los directorios:

root@linuxbox:~# ls -l /usr/share/doc/ | grep pam
drwxr-xr-x  2 root root 4096 abr  5 21:11 libpam0g
drwxr-xr-x  4 root root 4096 abr  7 16:31 libpam-doc
drwxr-xr-x  2 root root 4096 abr  5 21:30 libpam-gnome-keyring
drwxr-xr-x  3 root root 4096 abr  5 21:11 libpam-modules
drwxr-xr-x  2 root root 4096 abr  5 21:11 libpam-modules-bin
drwxr-xr-x  2 root root 4096 abr  5 21:11 libpam-runtime
drwxr-xr-x  2 root root 4096 abr  5 21:26 libpam-systemd
drwxr-xr-x  3 root root 4096 abr  5 21:31 python-pam

Opinamos que antes de salir a buscar documentación en la Internet, debemos revisar la que ya está instalada o la que podemos instalar directamente de los repositorios de programas que para algo existen y en muchas ocasiones los copiamos hacia nuestro disco duro. Muestra de ello es la siguiente:

root@linuxbox:~# less /usr/share/doc/libpam-gnome-keyring/README
gnome-keyring is a program that keep password and other secrets for
users. It is run as a daemon in the session, similar to ssh-agent, and
other applications locate it via an environment variable or a D-Bus.

The program can manage several keyrings, each with its own master
password, and there is also a session keyring which is never stored to
disk, but forgotten when the session ends.

The library libgnome-keyring is used by applications to integrate with
the GNOME keyring system.

Que traducido muy libremente quiere expresar:

  • gnome-keyring es el programa encargado de mantener las contraseñas y otros secretos para los usuarios. En cada sesión se ejecuta como un demonio, de forma similar al ssh-agent, y a otras aplicaciones que se localizan mediante una variable del ambiente – environment o vía D-Bus. El programa puede manejar a varios keyrings, cada uno de ellos con su propia contraseña maestra. Existe además una sesión del keyring que no se almacena nunca en el disco duro y que se olvida cuando termina la sesión. Las Aplicaciones utilizan la librería libgnome-keyring para integrarse con el sistema GNOME keyring.

Debian con el Sistema Operativo Base

Partimos de un equipo al que recién instalamos Debian 8 “Jessie” como Sistema Operativo y durante su proceso de instalación seleccionamos solamente las “Utilidades básicas del sistema”, sin marcar ninguna otra opción de instalar tareas – tasks o paquetes predefinidos como el servidor OpenSSH. Si después de iniciar la primera sesión ejecutamos:

root@master:~# pam-auth-update

obtendremos las siguientes salidas:Autenticación PAM - 01 Autenticación PAM - 02

 

 

Lo que nos muestra que el único Módulo PAM en uso hasta ese momento es la Autenticación UNIX. La utilidad pam-auth-update nos permite configurar la política central de autenticación para un sistema al utilizar Perfiles Predefinidos que suministran los Módulos PAM. Para mas información consulte man pam-auth-update.

Como aun no hemos instalado el OpenSSH server, no encontraremos su módulo PAM en el directorio /etc/pam.d/, el que contendrá los módulos y perfiles PAM cargados hasta éstos momentos:

root@master:~# ls -l /etc/pam.d/
total 76
-rw-r--r-- 1 root root  235 sep 30  2014 atd
-rw-r--r-- 1 root root 1208 abr  6 22:06 common-account
-rw-r--r-- 1 root root 1221 abr  6 22:06 common-auth
-rw-r--r-- 1 root root 1440 abr  6 22:06 common-password
-rw-r--r-- 1 root root 1156 abr  6 22:06 common-session
-rw-r--r-- 1 root root 1154 abr  6 22:06 common-session-noninteractive
-rw-r--r-- 1 root root  606 jun 11  2015 cron
-rw-r--r-- 1 root root  384 nov 19  2014 chfn
-rw-r--r-- 1 root root   92 nov 19  2014 chpasswd
-rw-r--r-- 1 root root  581 nov 19  2014 chsh
-rw-r--r-- 1 root root 4756 nov 19  2014 login
-rw-r--r-- 1 root root   92 nov 19  2014 newusers
-rw-r--r-- 1 root root  520 ene  6  2016 other
-rw-r--r-- 1 root root   92 nov 19  2014 passwd
-rw-r--r-- 1 root root  143 mar 29  2015 runuser
-rw-r--r-- 1 root root  138 mar 29  2015 runuser-l
-rw-r--r-- 1 root root 2257 nov 19  2014 su
-rw-r--r-- 1 root root  220 sep  2  2016 systemd-user

Por ejemplo, mediante el módulo PAM /etc/pam.d/chfn el sistema configura el servicio Shadow, mientras que mediante /etc/pam.d/cron se configura el demonio cron. Para conocer un poco mas podemos leer el contenido de cada uno de éstos archivos lo cual es muy instructivo. Como muestra damos a continuación el contenido del módulo /etc/pam.d/cron:

root@master:~# less /etc/pam.d/cron
# The PAM configuration file for the cron daemon

@include common-auth

# Sets the loginuid process attribute
session    required     pam_loginuid.so

# Read environment variables from pam_env's default files, /etc/environment
# and /etc/security/pam_env.conf.
session       required   pam_env.so

# In addition, read system locale information
session       required   pam_env.so envfile=/etc/default/locale

@include common-account
@include common-session-noninteractive 

# Sets up user limits, please define limits for cron tasks
# through /etc/security/limits.conf
session    required   pam_limits.so

El orden de las declaraciones dentro de cada uno de los archivos es importante. En términos generales no recomendamos se modifiquen ninguno de ellos a menos que sepamos muy bien qué es lo que estamos haciendo.

Debian con sistema operativo base + OpenSSH

root@master:~# aptitude install task-ssh-server
Se instalarán los siguiente paquetes NUEVOS:     
  openssh-server{a} openssh-sftp-server{a} task-ssh-server

Comprobaremos que se agregó y configuró correctamente el módulo PAM sshd:

root@master:~# ls -l /etc/pam.d/sshd 
-rw-r--r-- 1 root root 2133 jul 22  2016 /etc/pam.d/sshd

Si deseamos conocer el contenido de ese perfil:

root@master:~# less /etc/pam.d/sshd

En otras palabras, cuando tratamos de iniciar una sesión remota desde otro equipo mediante ssh, la autenticación en el equipo local se efectúa mediante el módulo PAM sshd principalmente, sin olvidar los demás aspectos de autorización y seguridad involucrados en el servicio ssh como tal.

De paso, añadimos que el archivo principal de configuración de este servicio es /etc/ssh/sshd_config, y que al menos en Debian se instala por defecto sin permitir el inicio de sesión interactivo del usuario root. Para permitirlo, debemos modificar el archivo /etc/ssh/sshd_config y cambiar la línea:

PermitRootLogin without-password

por

PermitRootLogin yes

y posteriormente reiniciar y comprobar el estado del servicio mediante:

root@master:~# systemctl restart ssh
root@master:~# systemctl status ssh

Debian con el escritorio LXDE

Continuamos con el mismo equipo -cambiamos su nombre o hostname por “linuxbox” para usarlo en un futuro- al cual terminamos de instalar el Escritorio LXDE. Ejecutemos pam-auth-update y obtendremos las siguientes salidas:Autenticación PAM - 03 Autenticación PAM - 04

 

El sistema ya habilitó todos los Perfiles -Módulos- necesarios para la correcta autenticación durante la instalación del escritorio LXDE, que a saber son los siguientes:

  • Módulo de Autenticación UNIX.
  • Módulo que registra las sesiones de usuarios en el Grupo Jerárquico de Control del systemd.
  • Módulo del Demonio GNOME Keyring
  • Aprovechamos la ocasión para recomendar que en todos los casos, cuando se nos pregunte “Perfiles PAM a habilitar”, seleccionemos la opción <Cancelar> a menos que sepamos muy bien qué es lo que estamos haciendo. Si cambiamos la configuración PAM que de forma automática la hace el propio Sistema Operativo, podemos fácilmente inhabilitar el inicio de sesión en el equipo.

En los casos anteriores estamos hablando de Autenticación Local o de Autenticación frente al equipo local como sucede cuando iniciamos una sesión remota mediante ssh.

Si implementamos un método de Autenticación Remota en el Equipo Local para que usuarios con sus Credenciales almacenadas en un servidor remoto OpenLDAP o en un Active Directory, el sistema tomará en cuenta la nueva forma de autenticación y adicionará los módulos PAM necesarios.

Archivos principales

  • /etc/passwd: Información de las Cuentas de Usuarios
  • /etc/shadow: Información Segura de las Cuentas de Usuarios
  • /etc/pam.conf: Archivo que solo debe utilizarse sino existe el directorio /etc/pam.d/
  • /etc/pam.d/: Directorio donde los programas y servicios instalan sus módulos PAM
  • /etc/pam.d/passwd: Configuración PAM para passwd.
  • /etc/pam.d/common-account: Parámetros de Autorización comunes a todos los servicios
  • /etc/pam.d/common-auth: Parámetros de Autenticación comunes a todos los servicios
  • /etc/pam.d/common-password: Módulos PAM comunes a todos los servicios relacionados con las contraseñas – passwords
  • /etc/pam.d/common-session: Módulos PAM comunes a todos los servicios relacionados con las sesiones de usuarios
  • /etc/pam.d/common-session-noninteractive: Módulos PAM comunes a todos los servicios relacionados con las sesiones no interactivas o que no requieren de la intervención del usuario, como las tareas que se ejecutan al comienzo y final de sesiones no interactivas.
  • /usr/share/doc/passwd/: Directorio de documentación.

Recomendamos leer las páginas del manual de passwd y shadow mediante man passwd y man shadow. También es saludable leer el contenido de los archivos common-account, common-auth, common-passwrod, common-session y common-session-noninteractive.

Módulos PAM disponibles

Para tener una idea de los módulos PAM disponibles a priori en el repositorio estándar de Debian, ejecutamos:

buzz@linuxbox:~$ aptitude search libpam

La lista es larga y solamente reflejaremos los módulos que muestran lo extensa que es:

libpam-afs-session          - PAM module to set up a PAG and obtain AFS tokens                    
libpam-alreadyloggedin      - PAM module to skip password authentication for logged users
libpam-apparmor             - changehat AppArmor library as a PAM module
libpam-barada               - PAM module to provide two-factor authentication based on HOTP
libpam-blue                 - PAM module for local authenticaction with bluetooth devices
libpam-ca                   - POSIX 1003.1e capabilities (PAM module)                             
libpam-ccreds               - Pam module to cache authentication credentials                      
libpam-cgrou                - control and monitor control groups (PAM)                            
libpam-chroot               - Chroot Pluggable Authentication Module for PAM                      
libpam-ck-connector         - ConsoleKit PAM module                 
libpam-cracklib             - PAM module to enable cracklib support 
libpam-dbus                 - A PAM module which asks the logged in user for confirmation         
libpam-duo                  - PAM module for Duo Security two-factor authentication               
libpam-dynalogin            - two-factor HOTP/TOTP authentication - implementation libs           
libpam-encfs                - PAM module to automatically mount encfs filesystems on login        
libpam-fprintd              - PAM module for fingerprint authentication trough fprintd            
libpam-geo                  - PAM module checking access of source IPs with a GeoIP database      
libpam-gnome-keyring        - PAM module to unlock the GNOME keyring upon login                   
libpam-google-authenticator - Two-step verification                 
libpam-heimdal              - PAM module for Heimdal Kerberos       
libpam-krb5                 - PAM module for MIT Kerberos           
libpam-krb5-migrate-heimdal - PAM module for migrating to Kerberos  
libpam-lda                  - Pluggable Authentication Module for LDA                         
libpam-ldapd                - PAM module for using LDAP as an authentication service              
libpam-mkhomedir            -         
libpam-mklocaluser          - Configure PAM to create a local user if it do not exist already     
libpam-modules              - Pluggable Authentication Modules for PAM                            
libpam-modules-bin          - Pluggable Authentication Modules for PAM - helper binaries          
libpam-mount                - PAM module that can mount volumes for a user session                
libpam-mysql                - PAM module allowing authentication from a MySQL server              
libpam-nufw                 - The authenticating firewall [PAM module]                            
libpam-oath                 - OATH Toolkit libpam_oath PAM module   
libpam-ocaml                - OCaml bindings for the PAM library (runtime)                        
libpam-openafs-kaserver     - AFS distributed filesystem kaserver PAM module                      
libpam-otpw                 - Use OTPW for PAM authentication       
libpam-p11                  - PAM module for using PKCS#11 smart cards                            
libpam-passwdqc             - PAM module for password strength policy enforcement                 
libpam-pgsql                - PAM module to authenticate using a PostgreSQL database              
libpam-pkcs11               - Fully featured PAM module for using PKCS#11 smart cards             
libpam-pold                 - PAM module allowing authentication using a OpenPGP smartcard        
libpam-pwdfile              - PAM module allowing authentication via an /etc/passwd-like file     
libpam-pwquality            - PAM module to check password strength 
libpam-python               - Enables PAM modules to be written in Python                         
libpam-python-doc           - Documentation for the bindings provided by libpam-python            
libpam-radius-auth          - The PAM RADIUS authentication module  
libpam-runtime              - Runtime support for the PAM library   
libpam-script               - PAM module which allows executing a script                          
libpam-shield               - locks out remote attackers trying password guessing                 
libpam-shish                - PAM module for Shishi Kerberos v5     
libpam-slurm                - PAM module to authenticate using the SLURM resource manager         
libpam-smbpass              - pluggable authentication module for Samba                           
libpam-snapper              - PAM module for Linux filesystem snapshot management tool            
libpam-ssh                  - Authenticate using SSH keys           
libpam-sshauth              - authenticate using an SSH server      
libpam-sss                  - Pam module for the System Security Services Daemon                  
libpam-systemd              - system and service manager - PAM module                             
libpam-tacplus              - PAM module for using TACACS+ as an authentication service           
libpam-tmpdir               - automatic per-user temporary directories                            
libpam-usb                  - PAM module for authentication with removable USB block devices      
libpam-winbind              - Windows domain authentication integration plugin                    
libpam-yubico               - two-factor password and YubiKey OTP PAM module                      
libpam0g                    - Pluggable Authentication Modules library                            
libpam0g-dev                - Development files for PAM             
libpam4j-java               - Java binding for libpam.so            
libpam4j-java-doc           - Documentation for Java binding for libpam.so

Saque Usted sus propias conclusiones.

CentOS

Si durante el proceso de instalación seleccionamos la opción “Servidor con GUI“, obtendremos una buena plataforma para implementar diferentes servicios para la Red PYME. A diferencia de Debian, CentOS/Red Hat® ofrece una serie de herramientas de consola y gráficas que le hacen la vida mas fácil a un Administrador de Sistemas o de Redes.

Documentación

Instalada por defecto, la encontramos en el directorio:

[root@linuxbox ~]# ls -l /usr/share/doc/pam-1.1.8/
total 256
-rw-r--r--. 1 root root   2045 jun 18  2013 Copyright
drwxr-xr-x. 2 root root   4096 abr  9 06:28 html
-rw-r--r--. 1 root root 175382 nov  5 19:13 Linux-PAM_SAG.txt
-rw-r--r--. 1 root root  67948 jun 18  2013 rfc86.0.txt
drwxr-xr-x. 2 root root   4096 abr  9 06:28 txts
[root@linuxbox ~]# ls /usr/share/doc/pam-1.1.8/txts/
README.pam_access    README.pam_exec       README.pam_lastlog    README.pam_namespace   README.pam_selinux     README.pam_timestamp
README.pam_console   README.pam_faildelay  README.pam_limits     README.pam_nologin     README.pam_sepermit    README.pam_tty_audit
README.pam_cracklib  README.pam_faillock   README.pam_listfile   README.pam_permit      README.pam_shells      README.pam_umask
README.pam_chroot    README.pam_filter     README.pam_localuser  README.pam_postgresok  README.pam_stress      README.pam_unix
README.pam_debug     README.pam_ftp        README.pam_loginuid   README.pam_pwhistory   README.pam_succeed_if  README.pam_userdb
README.pam_deny      README.pam_group      README.pam_mail       README.pam_rhosts      README.pam_tally       README.pam_warn
README.pam_echo      README.pam_issue      README.pam_mkhomedir  README.pam_rootok      README.pam_tally2      README.pam_wheel
README.pam_env       README.pam_keyinit    README.pam_motd       README.pam_securetty   README.pam_time        README.pam_xauth

Si, también denominamos “linuxbox” al equipo CentOS al igual que con Debian, el cual nos servirá para futuros artículos sobre Redes PYMES.

CentOS con GUI GNOME3

Cuando seleccionamos durante la instalación la opción “Servidor con GUI“, se instala el Escritorio GNOME3 y demás utilidades y programas base para desarrollar un servidor. A nivel de consola, para conocer el estado de la autenticación ejecutamos:

[root@linuxbox ~]# authconfig-tui

Autenticación PAM - 05
Comprobamos que solo están habilitados los módulos PAM necesarios para la configuración actual del servidor, incluso hasta un módulo para leer huellas digitales, sistema de autenticación que encontramos en algunos modelos de Laptops.

CentOS con GUI GNOME3 unido a un Microsoft Active Directory

Autenticación PAM - 06Como podemos comprobar, se han añadido y habilitado los módulos necesarios –winbind– para la autenticación frente a un Active Directory, mientras que a propósito inhabilitamos el módulo para leer huellas dactilares, porque no es necesario.

En un próximo artículo abordaremos en detalle el cómo unir un cliente CentOS 7 a un Microsoft Active Directory. Solamente adelantamos que mediante la herramienta authoconfig-gtk se automatiza tremendamente la instalación de paquetes necesarios, configuración de la creación automática de los directorios de usuarios del dominio que se autentiquen localmente, y el proceso en si mismo de unir el cliente al Dominio de un Active Directory. Acaso después de la unión, solo será necesario reiniciar el equipo.

Archivos principales

Los archivos relacionados con la Autenticación en CentOS se ubican en el directorio /etc/pam.d/:

[root@linuxbox ~]# ls /etc/pam.d/
atd                     liveinst          smartcard-auth-ac
authconfig              login             smtp
authconfig-gtk          other             smtp.postfix
authconfig-tui          passwd            sshd
config-util             password-auth     su
crond                   password-auth-ac  sudo
cups                    pluto             sudo-i
chfn                    polkit-1          su-l
chsh                    postlogin         system-auth
fingerprint-auth        postlogin-ac      system-auth-ac
fingerprint-auth-ac     ppp               system-config-authentication
gdm-autologin           remote            systemd-user
gdm-fingerprint         runuser           vlock
gdm-launch-environment  runuser-l         vmtoolsd
gdm-password            samba             xserver
gdm-pin                 setup
gdm-smartcard           smartcard-auth

Módulos PAM disponibles

Tenemos los repositorios base, centosplus, epel, y updates. En ellos encontramos -entre otros más- los siguientes módulos mediante los comandos yum search pam-yum search pam_, y yum search libpam:

nss-pam-ldapd.i686 : An nsswitch module which uses directory servers
nss-pam-ldapd.x86_64 : An nsswitch module which uses directory servers
ovirt-guest-agent-pam-module.x86_64 : PAM module for the oVirt Guest Agent
pam-kwallet.x86_64 : PAM module for KWallet
pam_afs_session.x86_64 : AFS PAG and AFS tokens on login
pam_krb5.i686 : A Pluggable Authentication Module for Kerberos 5
pam_krb5.x86_64 : A Pluggable Authentication Module for Kerberos 5
pam_mapi.x86_64 : PAM module for authentication via MAPI against a Zarafa server
pam_oath.x86_64 : A PAM module for pluggable login authentication for OATH
pam_pkcs11.i686 : PKCS #11/NSS PAM login module
pam_pkcs11.x86_64 : PKCS #11/NSS PAM login module
pam_radius.x86_64 : PAM Module for RADIUS Authentication
pam_script.x86_64 : PAM module for executing scripts
pam_snapper.i686 : PAM module for calling snapper
pam_snapper.x86_64 : PAM module for calling snapper
pam_ssh.x86_64 : PAM module for use with SSH keys and ssh-agent
pam_ssh_agent_auth.i686 : PAM module for authentication with ssh-agent
pam_ssh_agent_auth.x86_64 : PAM module for authentication with ssh-agent
pam_url.x86_64 : PAM module to authenticate with HTTP servers
pam_wrapper.x86_64 : A tool to test PAM applications and PAM modules
pam_yubico.x86_64 : A Pluggable Authentication Module for yubikeys
libpamtest-doc.x86_64 : The libpamtest API documentation
python-libpamtest.x86_64 : A python wrapper for libpamtest
libpamtest.x86_64 : A tool to test PAM applications and PAM modules
libpamtest-devel.x86_64 : A tool to test PAM applications and PAM modules

Resumen

Es importante tener un mínimo de conocimientos sobre PAM si queremos entender de forma general como se efectúa la Autenticación cada vez que iniciamos sesión en nuestro equipo Linux/UNIX. También es importante conocer que solamente con Autenticación Local podemos brindar servicios a otros equipos en una pequeña red PYME como Proxy, Correo, FTP, etcétera, concentrados todos en un solo servidor. Todos los servicios anteriores -y muchos mas como vimos anteriormente- tienen su módulo PAM.

Fuentes consultadas

Versión en formato PDF

Descargue la versión en PDF aquí.

¡Hasta el próximo artículo!

Autor: Federico A. Valdes Toujague
federicotoujague@gmail.com
https://blog.desdelinux.net/author/fico

El artículo Autenticación PAM – Redes PYMES aparece primero en Autenticación PAM – Redes PYMES.

Leave A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.