SudoSansPassword
From AleikoumWiki
Executer des commandes entant que root sans mot de passe
v1.0 par Erwan 'Laby' Ben Souiden e.bensouiden<@>gmail.com
Objectif et contexte
Les systèmes UNIX sont sur la base du "tout ou rien" en ce qui concerne les droits d'accès à root ainsi que pour l'éxecution de commandes typiques à root. Cependant une politique intermédiaire est parfois nécessaire.
Jusqu'à présent pour éxecuter une commande en tant que root on utilisait l'outil su comme suit :
[admin@testbox admin]$ touch /home/nagios/fichier.test touch: creating `/home/nagios/fichier.test': Permission denied [admin@testbox admin]$ su -c "touch /home/nagios/fichier.test" Password: [admin@testbox admin]$ su -c "ls -al /home/nagios/fichier.test" Password: rw-rw-r-- 1 root root 0 Nov 15 13:39 /home/nagios/fichier.test
On peut voir qu'il est obligatoire de repréciser pour chaque commande le mot de passe root !
Le problème est donc double :
l'utilisateur doit connaitre le mot de passe root >> dangereux
il faut préciser le mot de passe à chaque fois >> fastidieux
Pour cela l'outil sudo est util vu qu'il permet d'éxecuter des commandes en tant que root ! Pour cela il suffit d'être défini dans le fichier listant les utilisateurs et les commandes associées, ce fichier est le /etc/sudoers.
Dans cet howto nous allons voir comment éditer ce fichier pour éxecuter, avec les droits root et sans avoir à fournir de mot de passe, des commandes.
Manipulation
En tant que root, il faut éditer le fichier /etc/sudoers pour cela il faut utiliser l'utilitaire visudo comme suit :
# Définition des alias pour les hôtes Host_Alias NOM_HOTE=ordi1,ordi2,ordi3 # Définition des alias pour les commandes Cmd_Alias NOM_COMMANDE=/bin/touch,/usr/bin/traceroute,/usr/bin/ftp # Définition des alias pour les user User_Alias NOM_GRP=nagios,plop # Attribution des droits par utilisateur root ALL=(ALL) ALL
C'est la partie de l'attribution des droits qui est importante elle se décompose en plusieurs partie :
le nom de l'utilisateur concerné ou de l'alias d'User (regroupant plusieurs utilisateurs)
le premier ALL correspond aux machines surlesquelles les droits sont valables. On peut mettre ici une machine particulière ou un alias d'hôtes.
le deuxieme ALL précise de quel utilisateur root prend il les droits, par défaut ca va être root, cependant il est possible de mettre un user différent (nagios) par exemple ! Le sudo éxecutera la commande avec les droits de nagios !
le dernier ALL représente les commandes possible à éxecuter avec le sudo ! On peut préciser une suite de commandes séparées par des virgules ou un alias de commandes.
Voici un exemple de modifications du fichier /etc/sudoers :
nagios ALL=(ALL) /bin/touch
Résultat :
[nagios@testbox root]$ touch /usr/local/plop.test touch: creating `/usr/local/plop.test': Permission denied # nagios n'a pas les droits nécessaires [nagios@testbox root]$ sudo touch /usr/local/plop.test Password: # mot de passe du user nagios !!!! [nagios@testbox root]$ ll /usr/local/plop.test rw-r--r-- 1 root root 0 Nov 15 14:31 /usr/local/plop.test
On remarque qu'on est tjrs obligé de fournir un mot de passe. Mais ce n'est pas le mot de passe root que l'on fournit mais son propre mot de passe, ce qui réduit en parti notre problème de départ.
Cependant on souhaiterait tout de même ne pas avoir à fournir de mot de passe (pour une éxecution automatique dans un script par exemple).
En reprenant notre exemple precedent voila comment il faut modifier /etc/sudoers pour obtenir le resultat cherche :
nagios ALL=(ALL) NOPASSWD: /bin/touch
Nota : on peut preciser toutes les executables d'un repertoire donne par exemple en mettant /le-rep/
Ainsi on obtiendra le résultat voulu :
[nagios@testbox root]$ touch /usr/local/plop.test touch: creating `/usr/local/plop.test': Permission denied [nagios@testbox root]$ sudo touch /usr/local/plop.test [nagios@testbox root]$ ll /usr/local/plop.test rw-r--r-- 1 root root 0 Nov 15 14:24 /usr/local/plop.test
Aucun mot de passe n'a été requis !