Me preguntaba cómo ejecutar un comando como otro usuario desde un script.
Tengo el propietario del script establecido como root. También tengo el siguiente comando ejecutándose dentro del script para ejecutar el comando como usuario hudson:
su -c command hudson
¿Es esta la sintaxis correcta?
sudo cat /etc/passwd | grep user-abc
. Si ve algo como esto:user-abc:x:994:994::/home/user-abc:/bin/false
entonces no funcionará. Esto se debe a que la última parte "/bin/false
" significa que no hay shell para ese usuario.Respuestas:
Si. Aquí está el
--help
:Y algunas pruebas (utilicé
sudo
ya que no sé la contraseña de lanobody
cuenta)Cuando su comando toma argumentos, necesita citarlo. Si no lo haces, ocurrirán cosas extrañas. Aquí estoy, como root, tratando de crear un directorio en / home / oli (como oli) sin citar el comando completo:
Solo se lee
mkdir
como el valor de la-c
bandera y está tratando de usarlo/home/oli/java
como nombre de usuario. Si lo citamos, simplemente funciona:fuente
Nota: "Tengo el propietario del script configurado como root" no hace nada; incluso si tiene el bit setuid establecido, todavía no funciona
Sin embargo, suponiendo que realmente esté ejecutando el script como root, puede usarlo
sudo
.su
es principalmente para cambiar de usuario, mientras quesudo
es para ejecutar comandos como otros usuarios. El-u
indicador le permite especificar qué usuario ejecutar el comando como:fuente
sudo
sólo se puede conseguir esto:root is not in the sudoers file
. Lo que hace quesu - <username> -c "command to run"
la única opción.sudo -u kilgore mv this that
)