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/falseentonces 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é
sudoya que no sé la contraseña de lanobodycuenta)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
mkdircomo el valor de la-cbandera y está tratando de usarlo/home/oli/javacomo 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.sues principalmente para cambiar de usuario, mientras quesudoes para ejecutar comandos como otros usuarios. El-uindicador le permite especificar qué usuario ejecutar el comando como:fuente
sudosó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)