Je me demandais comment exécuter une commande en tant qu'un autre utilisateur à partir d'un script.
J'ai le propriétaire du script défini en tant que root. J'ai également la commande suivante en cours d'exécution dans le script pour exécuter la commande en tant qu'utilisateur hudson:
su -c command hudson
Est-ce la syntaxe correcte?
sudo cat /etc/passwd | grep user-abc
. Si vous voyez quelque chose comme ceci:user-abc:x:994:994::/home/user-abc:/bin/false
alors cela ne fonctionnera pas. C'est parce que la dernière partie "/bin/false
" signifie qu'il n'y a pas de shell pour cet utilisateur.Réponses:
Oui. Voici le
--help
:Et quelques tests (j'ai utilisé
sudo
car je ne connais pas le mot de passe dunobody
compte)Lorsque votre commande prend des arguments, vous devez la citer. Si vous ne le faites pas, des choses étranges se produiront. Je suis, en tant que root, en train de créer un répertoire dans / home / oli (en tant qu'oli) sans citer la commande complète:
Il ne lit
mkdir
que la valeur du-c
drapeau et tente de l'utiliser/home/oli/java
comme nom d'utilisateur. Si nous le citons, cela fonctionne:la source
Remarque: "Le propriétaire du script est défini en tant que root" ne fait rien; même si vous avez défini le bit setuid, il ne fonctionne toujours pas
En supposant que vous exécutiez le script en tant que root, vous pouvez toutefois l'utiliser
sudo
.su
est principalement destiné à changer d’utilisateur, alors quesudo
pour exécuter des commandes comme les autres utilisateurs. Le-u
drapeau vous permet de spécifier quel utilisateur exécuter la commande en tant que:la source
sudo
vous pouvez simplement obtenir ceci:root is not in the sudoers file
. Ce qui faitsu - <username> -c "command to run"
la seule option.sudo -u kilgore mv this that
)