¿Hay alguna manera de hacer que parte de un script se ejecute como un usuario diferente (no root)? Si ayuda, la parte que se ejecutará como un usuario diferente se produce al final del script
Editar:
SO -> Ubuntu 9.04
¿Hay alguna manera de hacer que parte de un script se ejecute como un usuario diferente (no root)? Si ayuda, la parte que se ejecutará como un usuario diferente se produce al final del script
Editar:
SO -> Ubuntu 9.04
Respuestas:
Use el comando sudo en el script.
En la forma:
sudo -u username command
el comando sudo ejecuta el comando como nombre de usuario del usuario .
Si el script se ejecuta como root, no creo que solicite una contraseña. De lo contrario, este artículo analiza cómo usar sudo con contraseña en una línea de comando. , y este artículo analiza cómo usar sudo sin contraseña?
chmod +x script.sh
y luego solosudo -u username script.sh
i
opción si desea adquirir el entorno del usuario
Esta respuesta es buena, pero el consejo predeterminado del servidor es un poco peligroso: ¡permitiría a cualquiera ejecutar cualquier cosa como root! Así que estoy publicando aquí porque no puedo formatear el comentario.
Recomendaría usar visudo para otorgar los permisos que necesita con la mayor precisión posible. Escriba visudo
y agregue una línea como:
username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2
Si necesita ejecutar lo mismo en muchos hosts, puede abrirlo con:
username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2
Pero ** no * usaría tampoco:
username ALL=(ALL) NOPASSWD: ALL
o nombre de usuario hostname = ALL
La página de manual de sudoer tiene muchos detalles sangrientos
username
con el nombre de usuario que debería poder ejecutar el comando). Si el ejecutable que desea ejecutar solo es ejecutable por un usuario en particular, también está bien, simplemente pase ese nombre de usuario en la sudo -u username commandline
línea del script.
# I = me gusta:
#test if running bash as a different user works
sudo -u nobody bash -c : && RUNAS="sudo -u nobody"
echo 1: $USER
#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_
echo 3: $USER
# ./correr
1: root
2: nobody
3: root
no estoy tan seguro al respecto, pero si desea que SOLO el final de ese script se ejecute como un usuario diferente, puede agregar su someuser
antes del final del script.
¿Me estoy perdiendo de algo?
Espero que ayude,
Saludos
De esta manera, el final de un script será ejecutado por un usuario diferente (root). Tenga en cuenta el $[LINENO+2]
y las exit $?
llamadas. Estos son necesarios para que el final del script se ejecute solo una vez y para preservar el código de salida de la sudo
llamada.
#!/bin/bash
echo $USER
# pipe the rest of this script via a sudo call
tail -n +$[LINENO+2] $0 | exec sudo bash
exit $?
echo $USER
exit 1