Utilisez la commande sudo dans le script.
Sous la forme :
sudo -u username command
la commande sudo exécute la commande en tant qu'utilisateur nom d'utilisateur .
Si le script est exécuté en tant que root, je ne pense pas qu'il demandera un mot de passe. Sinon, cet article explique comment utiliser sudo avec mot de passe dans une ligne de commande ?, et cet article explique comment utiliser sudo sans mot de passe ?
Cette réponse est bonne, mais le conseil de serverfault est légèrement dangereux - permettrait à n'importe qui d'exécuter n'importe quoi en tant que root ! Je poste donc ici car je n'arrive 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 plusieurs 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
ounom_utilisateur nom_hôte =ALL
La page de manuel de sudoer contient de nombreux détails sanglants
# 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
# ./exécuter
1: root
2: nobody
3: root