Existe-t-il un moyen d'exécuter une partie d'un script en tant qu'utilisateur différent (non root)? Si cela aide, la partie à exécuter en tant qu'utilisateur différent se produit à la fin du script
Modifier:
OS -> Ubuntu 9.04
Existe-t-il un moyen d'exécuter une partie d'un script en tant qu'utilisateur différent (non root)? Si cela aide, la partie à exécuter en tant qu'utilisateur différent se produit à la fin du script
Modifier:
OS -> Ubuntu 9.04
Réponses:
Utilisez la commande sudo dans le script.
Sous la forme:
sudo -u username command
la commande sudo exécute la commande en tant que nom d' utilisateur de l' utilisateur .
Si le script est exécuté en tant que root, je ne pense pas qu'il vous demandera un mot de passe. Sinon, cet article explique comment utiliser sudo avec mot de passe dans une seule ligne de commande? et cet article explique comment utiliser sudo sans mot de passe?
chmod +x script.sh
, puis justesudo -u username script.sh
i
option si vous souhaitez acquérir l'environnement de l'utilisateur
Cette réponse est bonne, mais les conseils de défaut de serveur sont légèrement dangereux - permettraient à n'importe qui d'exécuter n'importe quoi en tant que root! Je poste donc ici parce que je ne peux pas formater le commentaire.
Je recommanderais d'utiliser visudo pour donner les autorisations dont vous avez besoin aussi précisément que possible. Tapez visudo
et ajoutez une ligne comme:
username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2
Si vous avez besoin d'exécuter cette même chose sur de nombreux hôtes, vous pouvez l'ouvrir avec:
username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2
Mais je n'utiliserais pas ** non plus:
username ALL=(ALL) NOPASSWD: ALL
ou nom d'utilisateur hostname = ALL
La page de manuel sudoer contient de nombreux détails sanglants
username
par le nom d'utilisateur qui devrait pouvoir exécuter la commande). Si l'exécutable que vous souhaitez exécuter n'est exécutable que par un utilisateur particulier, c'est bien aussi - passez simplement ce nom d'utilisateur dans la sudo -u username commandline
ligne du script.
# J'aime:
#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
# ./courir
1: root
2: nobody
3: root
pas si sûr, mais si vous voulez que SEULEMENT la fin de ce script s'exécute en tant qu'utilisateur différent, vous pouvez ajouter su someuser
avant la fin du script.
Suis-je en train de manquer quelque chose?
J'espère que ça t'as aidé,
Cordialement
De cette façon, la fin d'un script sera exécutée par différents utilisateurs (root). Veuillez noter les appels $[LINENO+2]
et exit $?
. Ceux-ci sont nécessaires pour que la fin du script ne s'exécute qu'une seule fois et pour conserver le code de sortie de l' sudo
appel.
#!/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