PAM: Saltar a otro usuario con 'su' sin usar contraseña
Autenticación PAM
En Linux, la autenticación de los usuarios en el sistema está estandarizado mediante el uso de PAM (Pluggable Authentication Modules).
El uso de diferentes módulos para cada servicio facilita que cada uno de ellos no tenga que implementar el mecanismo de acceso, sino simplemente pasar las credenciales a PAM y este se encarge de indicar si el usuario tiene acceso a no.
Vamos a utilizar PAM, para modificar/ampliar el comportamiento de la validación que usa su para permitir acceder o cambiarnos a otro usuario sin necesidad de indicar su contraseña.
Chequeo de configuración PAM
Advertencia: El cambio de la configuración de la autenticación es algo delicado, ya que un cambio erróneo nos puede dejar sin acceso al sistema.
Se recomienda el uso de pamtester, para validar como funcionará la autenticación una vez que cambiemos algo, antes de abandonar el sistema.
En Debian para instalar pamtester, deberemos salir a la terminal y escribir lo siguiente:
sudo apt -y install pamtester
Para usarlo podemos chequear los cambios introducidos en PAM mediante el comando:
En este artículo sólo vamos a ver como hacer que un usuario o los miembros de un grupo puedan hacer su a otro usuario sin necesidad de usar su contraseña.
En otro artículo explicaremos el funcionamiento completo de PAM.
Supuesto y solución al problema
Vamos a suponer que en nuestro sistema disponemos de un usuario que es el propietario de una serie de servicios o programa que se ejecutan en servidor.
Queremos que nadie pueda logarse en esa máquina con ese usuario, por motivos de seguridad, salvo algunos usuarios o sólo los usuarios que pertenezcan a un determinado grupo.
Datos del supuesto:
- Usuario tomato al que queremos saltar.
- Usuarios que queremos que puedan ejecutar
su tomato
: luis, pedro, juan - Grupo adsistemas al que pertenecen los usuarios luis, pedro y juan.
$ luis@equipo:/home/luis/> su - tomato
Contraseña: ********
Si no sabemos la password del usuario, obtendremos un mensaje de error indicando `autenticación fallida`.
Vamos a usar el modulo su de PAM para modificar el comportamiento de la validación del usuario tomato, para ello editaremos el fichero /etc/pam.d/su, buscamos la línea 'auth sufficient pam_rootok.so' y incluiremos 2 líneas para conseguir lo que queremos.
Tenemos 2 opciones:
- Incluir varios usuarios que puedan ejecutar
su tomato
sin clave. - Incluir un grupo que puedan ejecutar
su tomato
sin clave.
Opción 1:
# Autorizacion para salto de usuarios al usuario tomato
auth [success=ignore default=1] pam_succeed_if.so user = tomato
auth sufficient pam_succeed_if.so use_uid user ingroup tomato
Explicación:
La primera línea verifica que si el usuario destino es 'tomato' y si lo es verificará el usuario actual. En caso contrario, se omite la línea (default=1) y se realiza una validación normal.
La segunda línea verifica que el usuario pertenezca (ingroup) al grupo `tomato`
Una vez modificado el modulo PAM, debemos incluir en el grupo tomato todos y cada uno de los usuarios que queramos puedan realizar `su tomato`:
sudo usermod -aG tomato luis
sudo usermod -aG tomato pedro
sudo usermod -aG tomato juan
Opción 2:
# Autorizacion para salto de usuarios de un grupo al usuario tomato
auth [success=ignore default=1] pam_succeed_if.so user = tomato
auth sufficient pam_succeed_if.so use_guid group ingroup tomato
Explicación:
La primera línea es identica a la opción 1 (misma validación)
La segunda línea verifica que el grupo pertenezca (ingroup) al grupo `tomato`
Ahora solo debemos editar el fichero /etc/group, buscar el grupo tomato e incluir el grupo que queramos pueda ejecutar `su tomato`:
Antes del cambio:
...
tomato:x:570021:
...
Despues del cambio:
...
tomato:x:570021:adsistemas
...
Comprobación de salto al usuario
Tras los cambios realizados, abrimos un nuevo terminal (no abandones el actual hasta comprobar que puedes acceder si problema) y comprobamos que podemos ejecutar el salto sin necesidad de escribir la contraseña:
$ luis@equipo:/home/luis/> su - tomato
$ tomato@equipo:/opt/tomato/>
Correcto, con cualquiera de las 2 opciones, incluyendo usuario a usuario o incluyendo el grupo adsistemas dentro del grupo tomato podemos realizar el su sin necesidad de usar su clave.
Ultimo paso: Desactivar clave del usuario
Ahora que podemos realizar el salto a usuario `tomato` podemos quitarle la clave al mismo ya que no vamos a necesitarla.
Para ello ejecutamos el siguiente comando en la terminal:
sudo passwd –d tomato
Si revisamos como ha quedado la entrada del usuario en el fichero shadow, veremos algo similar a esto:
sudo grep tomato /etc/shadow
tomato:!!:17969:0:99999:7:::
Espero que os sea util, si en algún momento lo necesitais....