Ce site est en cours de création...

Merci de votre indulgence pendant cette (très longue) phase de mise en route… ^_^

Tags :





Exporter la page au format Open Document

Tester si un script est lancé en tant que root

Comment faire pour tester si un script bash a bien été lancé en tant que root et le cas échéant le relancer automatiquement via la commande sudo ?

Retour vers l'accueil de la catégorie linux:scripts


Le problème

Pour la bonne exécution de certaines commandes, votre script doit être exécuté en tant que root, c'est plus “simple” que de préfixer un grand nombre de commandes avec sudo à l'intérieur du script… Si vous n'êtes pas root lors du lancement du script, c'est l'échec pour les commandes concernées ! Comment faire pour ne pas devoir relancer le script en tant que root ?

Le script ci-dessous résout le problème en effectuant un test afin de vérifier si l'environnement d'exécution du script dispose bien des droits de l'utilisateur root. Si ce n'est pas le cas, le script est automatiquement relancé via la commande sudo. Il faut bien entendu que votre distribution soit configurée pour utiliser ce mécanisme et que votre utilisateur soit dans le fichier /etc/sudoers. Avec la distribution Ubuntu, c'est le cas pour le premier utilisateur créé lors de l'installation1) 2).

Le script

#!/bin/bash
#
# test du mode "root" et exécution via sudo si nécessaire
iam=$(whoami)
if [ $iam != "root" ]
then
	echo -e "\a\nVous exécutez ce script en tant que "$iam" !\nVous devez être root pour exécuter ce script !"
	echo -e "Merci de taper votre password (si nécessaire) pour passer en root via la commande sudo...\n"
	sudo $(echo $0) || echo -e "\nVous n'avez pas le droit d'exécuter ce script en tant que root...\nContactez votre administrateur !\n"
	exit # indispensable pour ne pas exécuter 2 fois la partie exécutée comme simple utilisateur en fin de script !
		 # ou quitter le script en cas d'échec de la commande sudo...
else
	#
	# cette partie du script ne sera exécutée que si le script est lancé en tant que root
	echo -e "Partie du script exécutée en tant que root...\n\nOK ! Vous êtes bien "$iam"...  ;-)"
	echo -e "\nExécution de la commande \"sfdisk -l\" qui ne renvoie des informations que si c'est root qui la lance :"
	sfdisk -l
	echo -e "\nUne autre commande en tant que root...\n"
	# fin de la partie exécutée en tant que root
fi
# cette partie du script sera exécutée comme simple utilisateur
echo -e "Partie du script exécutée en tant que simple utilisateur...\n"
echo -e "C'est ici que le script se termine... Bye !  ;-)"
echo -e "(Exécution terminée à "$(date +%X)")\n"
# fin du script
exit 0

Explications

Quelques commandes méritent une petite explication… :-)

# test du mode "root" et exécution via sudo si nécessaire
 
iam=$(whoami) # on stocke l'identifiant de l'utilisateur (qui a lancé le script) dans la variable "iam"
 
if [ $iam != "root" ] # on teste ensuite si le contenu de "iam" est différent de "root"
 
then # si le test est vrai, on va exécuter le script via sudo 
...
	sudo $(echo $0) # la commande "echo $0" permet de récupérer le nom du fichier 
			# du qui contient notre script (ainsi que son chemin d'accès) 
			# et on le relance en le préfixant de la commande sudo !
 
	sudo $(echo $0) || echo "Message" # la commande echo derrière le double |
					  # permet de renvoyer un message à l'utilisateur
					  # en cas d'échec de la commande sudo :
					  # échec à la vérification du password
					  # ou échec car l'utilisateur n'est pas référencé
					  # dans le fichier "sudoers"
 
	exit # c'est indispensable pour ne pas exécuter 2 fois 
             # la partie exécutée comme simple utilisateur en fin de script !
             # ou quitter le script en cas d'échec de la commande sudo...
 
else # si on est bien root lorsque le script est exécuté, les commandes qui suivent seront exécutées :-)
	commande_1
	commande_2
	...
fi


Voila ! Il ne vous reste plus qu'a adapter ce script en y incluant les commandes à exécuter en tant que root dans le bloc

else
	commandes...
fi

et en supprimant les commandes echo inutiles. ;-)

Liens


Liens externes


Pages dans la categorie :


1) Plus précisément, ce premier utilisateur fait partie du groupe “admin” qui est référencé dans le fichier /etc/sudoers.
2) Jusqu'à la version Ubuntu 11.10 Oneiric, le groupe des administrateurs était “admin”. Depuis la version LTS 12.04 Precise, ce groupe des administrateurs est “sudo”. Voir Changement du groupe d'administrateurs.