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 tandis que la majorité des commandes doivent être exécutées en tant qu'utilisateur normal avant sudo, car cela gâcherait la propriété du fichier et autres.
J'ai trouvé quelques méthodes, mais chacune a des problèmes
Méthode 1: utiliser sudo dans le fichier
#!/bin/bash
sudo echo "I must be run by root"
touch needsToBeOwnedByUser1
echo "needs to be run by user"
sleep 1000
sudo echo "I, again, must be run by root"
Cela semblerait bien, d'après la façon dont le code est écrit. sudo
est écrit avant les quelques instructions qui doivent réellement être exécutées par root, mais si le temps entre chaque sudo
appel est trop long, sudo
il demande à nouveau un mot de passe. De plus, si la première exécution de sudo
échoue, par exemple en raison d'un mot de passe invalide, le reste du script est toujours exécuté.
Méthode 2: utiliser sudo pour appeler le fichier, puis revenir à l'utilisateur d'origine si nécessaire
#!/bin/bash
echo "I must be run by root"
su username -c 'touch needsToBeOwnedByUser1'
su username -c 'echo "needs to be run by user"'
su username -c 'sleep 1000'
echo "I, again, must be run by root"
Cela craint aussi, car je dois ajouter su username -c
devant presque toutes les lignes. Il est également possible de trouver le nom d'utilisateur d'origine après sudo
, mais c'est compliqué.
Y a-t-il une meilleure façon?
Edit: je n'ai posté ici que de petits scripts absurdes pour montrer de quoi je parle. Dans le script actuel, j'ai quelques lignes qui ont besoin de sudo (démarrage et arrêt des services), des lignes où cela n'a pas d'importance s'il y a sudo et pas mal de lignes qui doivent vraiment être exécutées sans sudo.
man sudo
? -v, --validate
'Mettez à jour les informations d'identification mises en cache de l'utilisateur, en authentifiant l'utilisateur si nécessaire. Pour le plugin sudoers, cela prolonge le délai d'attente sudo pendant 15 minutes supplémentaires par défaut, mais n'exécute pas de commande. Toutes les politiques de sécurité ne prennent pas en charge les informations d'identification mises en cache. ' (Si vous l'exécutez assez souvent, l'authentification sudo ne devrait pas
sudo
s'il doit avoir des autorisations élevées. Mais il est inutile de passersu username -c
à l'exécution d'unecho
. En d'autres termes, cela ressemble à un [XY]. Pourriez-vous modifier et expliquer ce que votre script va réellement faire et pourquoi vous pensez que vous devez changer d’utilisateur si souvent?