Exécuter un script en root à partir d’un autre user
Des fois il n’y a pas le choix, il faut utiliser les droits root pour certaines actions comme par exemple le montage ou le démontage de filesystems.
Pour cela on peut l’appeler en incluant la commande sudo
vi monscript.sh
#!/bin/bash if [ $UID -ne 0 ]; then # or `id -u` exec su - root -- "$0" "$@" fi #Reste du script
Pour que cela fonctionne, il faudra obligatoirement donner les droits sudo à ce user avec la commande visudo (Centos,Debian,…). Ne jamais éditer le fichier /etc/sudoers directement !
visudo
monuser ALL=(root) NOPASSWD : /usr/local/bin/monscript.sh
En testant le script avec monuser il s’exécute correctement, mais si le système le lance on se retrouve avec le message d’erreur suivant :
sorry, you must have a tty to run sudo exec
On peut se dire qu’il suffit de changer le mode d’appel
vi monscript.sh
#!/bin/bash if [ $UID -ne 0 ]; then # or `id -u` exec sudo -- "$0" "$@" fi #Reste du script
Mais au final …
standard in must be a tty
On va donc garder cette version :
vi monscript.sh
#!/bin/bash if [ $UID -ne 0 ]; then # or `id -u` exec su - root -- "$0" "$@" fi #Reste du script
On pourrait donc être tenté par désactiver complètement la directive
visudo
Defaults !requiretty
Mais c’est une très mauvaise idée !
On va donc uniquement le désactiver pour mon user :
visudo
monuser ALL=(root) NOPASSWD : /usr/local/bin/monscript.sh Defaults:monuser !requiretty
Et le tour est joué !