SudoSansPassword

From AleikoumWiki

Jump to: navigation, search

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 !

Personal tools