Configurar un script linux para que corra con los permisos de otro usuario

publicado por: Anonymous

Mi necesidad en concreto es la sigiuente:

Un script del usuario1 tiene que poder ejecutarse por cualquier usuario del grupo1 (eso lo sé hacer), pero cuando se ejecute tiene que tener los permisos del usuario1.

Sería algo equivalente al concepto de postgres de crear una función con security definer.

Quizás sea necesaria la intervención de un sudoer para esa configuración, eso me parece razonable. (Sé que puede haber algún error en los comandos, eso lo arreglo después, la pregunta es solo sobre delegar permisos)

Posibles casos de uso:

1) acceso controlado a recursos:

cat recibir_mensaje.sh
echo "$DATE - $1" >> /home/usuario1/mensajes-recibidos.log

Podría de ese modo el usuario1 permitir agregar mensajes en el archivo mensajes-recibidos.log de una manera controlada sin necesidad de permitir la escritura en el archivo si se lograra que el script recibir_mensaje corriera con permisos de usuario1 aunque lo ejecute usuario2

2) delegación controlada de tareas administrativas:

Imaginemos el usuario subadmin2 al que queremos permitirle crear usuarios que pertenezcan al grupo gr_comun. Nada más que eso. Podríamos tener un script:

cat crear_usuario_comun.sh
adduser $1
adduser $1 gr_comun

que ese script corra con permisos de root pero no darle a subadmin permiso de sudo sino solamente permiso de ejecutar crear_usuario_comun.sh

solución

Finalmente encontré la manera de permitir a un usuario que no es root (ni está en los grupos de admin) ejecutar un script que corra como root para hacer ciertas tareas administrativas delegadas (como las del ejemplo de la pregunta)

la solución

Dar permisos limitados a través de /etc/sudoers para ejecutar solamente ese script como root

el ejemplo

Imaginemos el usuario subadmin que queremos que tenga permiso de ejecutar /opt/crear_usuario_comun.sh

Con un usuario administrador configuramos el script para que tenga:

sudo cat /opt/crear_usuario_comun.sh
adduser $1
adduser $1 gr_comun

Y agregamos una linea en /etc/sudoers utilizando el comando visudo

sudo visudo

agregamos al final del archivo…

#
# This file MUST be edited with the 'visudo' command as root.
#
root    ALL=(ALL:ALL) ALL
#...
subadmin ALL=(root) NOPASSWD: /opt/crear_usuario_comun.sh

luego el usuario subadmin ya puede realizar su tarea delegada para crear el usuario común (o sea dentro del grupo común):

sudo /opt/crear_usuario_comun.sh usuario1
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *