PAM: Saltar a otro usuario con 'su' sin usar contraseña

Linux Nivel Alto 18 de dic. de 2023

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:

pamtester -v login <usuario> authenticate
Chequear login de un usuario con pamtester

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:

  1. Incluir varios usuarios que puedan ejecutar su tomato sin clave.
  2. 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....

Etiquetas

Luis GuLo

Junto con Chabi Angulo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux