Bien le bonjour à tous.

Aujourd’hui nous allons voir comment rajouter des utilisateurs ou groupes d’utilisateurs à la commande Sudo. Et oui, par défaut sous Debian, les utilisateurs ne possèdent aucun droit sur les commandes utilisables par root.

Il suffit de modifier un petit fichier et le tour est joué ^^. Voyons comment faire.

Commençons par regarder ce fameux fichier : le /etc/sudoers

Il vous faudra l’ouvrir en root avec la commande visudo (selon les demandes inscrites dans le fichier, mais peut être ouvert « apparemment » par n’importe quel éditeur, personnellement je n’ai pas eu de problème avec Geany ^^)

Voici maintenant sont contenu :

# /etc/sudoers
#
# This file MUST be edited with the ‘visudo’ command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults    env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL) ALL

# Uncomment to allow members of group sudo to not need a password
# (Note that later entries override this, so you might need to move
# it further down)
# %sudo ALL=NOPASSWD: ALL

Comme vous pouvez le voir beaucoup de sections sont vides… la ligne la plus intéressante est celle-ci :

root    ALL=(ALL) ALL

Qui signifie :

L’utilisateur root, à partir de n’importe quelle machine (premier ALL), peut lancer à partir de n’importe quel utilisateur (ALL entre parenthèse), n’importe quelle commande (dernier ALL).

Bien maintenant voyons comment ajouter, par exemple, le droit d’arrêter une machine au groupe utilisateur DROITSPECIAUX :

Pour ce faire il va falloir renseigner 4 sections :

  • Host alias specification
  • User alias specification
  • Cmnd alias specification
  • User privilege specification

Dans la section Host alias specification, il faudra utiliser la commande suivante :

Host_Alias  NOM_GROUPE_HOST = ip1/subnet, ip2/subnet, etc … ou hostname1, hostname2, etc …

Ce qui nous donnerait pour notre exemple (ici avec le hostname de ma machine ^^) :

Host_Alias  LOCAL = Debian

Dans la section User alias specification, il faudra utiliser la commande suivante :

User_Alias NOM_GROUPE_USER = user1, user2, etc …

Ce qui nous donnerait pour notre exemple :

User_Alias DROITSPECIAUX = vash

Dans la section Cmnd alias specification, il faudra utiliser la commande suivante :

md_Alias NOM_GROUPE_COMMANDE = chemin_complet_commande1, chemin_complet_commande2, etc …

Ce qui nous donnerait pour notre exemple :

Cmnd_Alias COMMANDE = /sbin/shutdown

REMARQUE : il faut le chemin absolu (complet) de la commande pour que celle-ci soit exécutée correctement, si vous ne savez pas le chemin de la commande qui vous intéresse, il existe une commande particulière nommée :

whereis NOM_COMMANDE, NOM_FICHIER, NOM_QUELQUECHOSE

Cette commande vous renverra le chemin absolu de ce que vous lui avez passé en argument … si jamais la chose en question existe bien sûr ^^.

Enfin, dans la section User privilege specification, il faudra utiliser la commande suivante :

NOM_GROUPE_USER NOM_GROUPE_HOST = NOM_GROUPE_COMMANDE

Ce qui nous donnerait pour notre exemple :

DROITSPECIAUX LOCAL = COMMANDE

Voici à quoi doit ressembler le fichier modifié :

# /etc/sudoers
#
# This file MUST be edited with the ‘visudo’ command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults    env_reset

# Host alias specification

Host_Alias  LOCAL = Debian

# User alias specification

User_Alias DROITSPECIAUX = vash

# Cmnd alias specification

Cmnd_Alias COMMANDE = /sbin/shutdown

# User privilege specification
root    ALL=(ALL) ALL

DROITSPECIAUX    LOCAL = COMMANDE

# Uncomment to allow members of group sudo to not need a password
# (Note that later entries override this, so you might need to move
# it further down)
# %sudo ALL=NOPASSWD: ALL

Un petit CTRL + S suivi d’un visudo -c qui vérifiera si la syntaxe du fichier est bonne, si ce n’est pas le cas il vous faudra savoir le pourquoi du comment et corriger l’erreur ^^. Si c’est OK, fermez le terminal, lancez en un nouveau (permet de bien prendre en compte les changements du fichier sudoers)

et faites ( sans être root bien sur) : sudo shutdown now

Normalement sudo devrait vous demander un mot de passe, une fois rentré, si la commande à bien était configurée, alors l’ordinateur devrait s’éteindre, si la commande à mal était configurée, alors sudo vous dira que la commande en question ne fait pas partie des droits de cet utilisateur. ^^

Voila, notre utilisateur vash peut maintenant éteindre tranquillement sa machine ^^.

Cependant on peut aller plus loin dans les configurations, en effet la négation est possible, on peut aussi dire à sudo de ne pas demander de mot de passe pour certaines, voir toutes, les commandes. (mais réfléchissez bien … donnez les droits a toutes les commandes ou sans demander de mot de passe est une grande faille de sécurité et peut entrainer de lourdes conséquences !!!!).

Pour illustrer ces options, prenons le cas suivant :

On veut que notre groupe d’utilisateur DROITSPECIAUX puisse faire toutes les commandes de root sans demander de mot de passe mais cependant on veut pas qu’il arrête la machine.

Pour cela, il suffit de mettre dans la section User privilege specification :

DROITSPECIAUX    LOCAL = NOPASSWD: ALL, !COMMANDE

et le tour est joué ^^. Plein de possibilités peuvent être exploitées, on peut demander des mots de passe pour certaines commandes et pas d’autres, on peut mettre des user_Alias dans d’autres user_Alias et j’en passe ^^. Ceci permet de bien définir le rôle de chacun et d’éviter des catastrophes systèmes parfois irrécupérables.

Voila, en espérant que ça vous aidera ^^.