J'ai un script bash long et de longue durée où une poignée de commandes doivent être exécutées en tant que root alors que la majorité des commandes doivent être exécutées en tant qu'utilisateur régulier avant sudo, car cela perturberait la propriété des fichiers, etc.
J'ai trouvé quelques méthodes, mais chacune d'entre elles a des problèmes
Méthode 1 : Utiliser sudo à l'intérieur du fichier
#!/bin/bash
sudo echo "Je dois être exécuté par root"
touch needsToBeOwnedByUser1
echo "doit être exécuté par l'utilisateur"
sleep 1000
sudo echo "Je dois, encore une fois, être exécuté par root"
Cela semble bien, vu la manière dont le code est écrit. sudo
est placé avant les quelques instructions qui doivent réellement être exécutées en tant que root, mais si le délai entre chaque appel à sudo
est trop long, sudo
redemande un mot de passe. De plus, si la première exécution de sudo
échoue, par exemple en raison d'un mot de passe incorrect, le reste du script est quand même exécuté.
Méthode 2 : utiliser sudo pour appeler le fichier et ensuite revenir à l'utilisateur d'origine lorsque nécessaire
#!/bin/bash
echo "Je dois être exécuté par root"
su nom_utilisateur -c 'touch needsToBeOwnedByUser1'
su nom_utilisateur -c 'echo "doit être exécuté par l'utilisateur"'
su nom_utilisateur -c 'sleep 1000'
echo "Je dois, encore une fois, être exécuté par root"
Cela est également contraignant, car je dois ajouter su nom_utilisateur -c
devant presque chaque ligne. Trouver le nom d'utilisateur d'origine après sudo
est possible, mais fastidieux.
Y a-t-il une meilleure façon de faire ?
Édition : J'ai posté ici de petits scripts non sens pour montrer de quoi je parle. Dans le script réel, j'ai quelques lignes qui ont besoin de sudo (démarrer et arrêter des services), quelques lignes où cela ne pose pas de problème s'il y a sudo et un bon nombre de lignes qui doivent vraiment être exécutées sans sudo.