Dans ce document, vous trouverez quelques explications sur les possibilités que la commande SUDO peut vous offrir afin de gérer avec une certaine précision votre système. Vous verrez aussi comment gérer les utilisateurs (les commandes qu'ils peuvent utiliser, etc.) avec le fichier "/etc/sudoers".
Comprendre Sudo et Le fichier etc-sudoers-PM_SONKO.pdf
1. Comprendre la Commande SUDO et Le Fichier /etc/sudoers
SUDO ET LE FICHIER /ETC/SUDOERS M. PAPE M. SONKO, INGENIEUR SYSTEMES ET RESEAUX
1
COMPRENDRE LA COMMANDE SUDO ET LE FICHIER /ETC/SUDOERS
SOMMAIRE :
I. Comprendre la commande sudo
I.1. Le fichier "/etc/sudoers"
II. Les Alias de machines, utilisateurs et commandes
II.1. Alias d’Utilisateur
II.2. Alias de Commande
III. Exclure un Utilisateur
IV. Afficher le Message de Speech SUDO
IV.1. Personnaliser le message de Speech SUDO
V. Exécuter une commande sans mot de passe
2. Comprendre la Commande SUDO et Le Fichier /etc/sudoers
SUDO ET LE FICHIER /ETC/SUDOERS M. PAPE M. SONKO, INGENIEUR SYSTEMES ET RESEAUX
2
I. Comprendre la commande sudo
Habituellement la commande "sudo" nous permet de lancer des commandes en tant que
root.
" sudo -l " permet d'afficher les droits d'un utilisateur (Quelles commandes il peut utiliser en
tant que root avec "sudo").
La commande "id" est très utile pour afficher les informations sur un utilisateur (uid, gid,
nom_groupes). L'ID (uid, gid) de l’utilisateur root est "0".
On peut mettre un utilisateur dans le groupe "sudo" (id: 27) pour pouvoir exécuter des
commandes préfixées de "sudo" avec cet utilisateur.
I.1. Le fichier "/etc/sudoers"
Le fichier qui permet de définir quel utilisateur peut faire quoi, est le fichier "/etc/sudoers".
C'est ce fichier qui permet de définir ce qu'un utilisateur peut faire avec la commande
"sudo".
Pour éviter les erreurs et les accès concurrents, il est recommandé d'utiliser "visudo" pour
éditer le fichier "/etc/sudoers".
#--Edition du fichier "/etc/sudoers"
sudo visudo
#--Signifie : Tous les utilisateurs du groupe sudo auront le droit d'exécuter toutes les commandes.
%sudo ALL = (ALL : ALL) ALL
Explications de la Syntaxe :
-Le premier paramètre peut être un nom d'utilisateur, ou un nom de groupe (dans ce cas, il
sera précédé du caractère "%" (tous)).
-Le second paramètre "ALL" de cette règle, désigne la machine concernée par cette règle
(Elle peut être locale ou distante), donc on pourra déployer le même fichier "sudoers" sur
plein de machines.
-Le troisième et le quatrième paramètre "ALL : ALL" permettent de mentionner l'utilisateur
et le groupe auxquels on va hériter leurs droits (le paramètre "ALL" inclut l’utilisateur "root"
aussi).
-Et le cinquième paramètre lui design la commande autorisée par cette règle.
3. Comprendre la Commande SUDO et Le Fichier /etc/sudoers
SUDO ET LE FICHIER /ETC/SUDOERS M. PAPE M. SONKO, INGENIEUR SYSTEMES ET RESEAUX
3
#--Signifie : L'utilisateur "moussa" aura le droit de lancer uniquement la commande "id" avec "sudo".
On spécifiera le chemin complet de la commande qu'on obtiendra avec "which" (exemple : which id).
moussa ALL=(ALL:ALL) /usr/bin/id
#--On se connecte en tant que moussa, et là on pourra exécuter (sudo id).
su - moussa → id
sudo visudo #--Edition du fichier "/etc/sudoers"
#--On autorise l'utilisateur "moussa" de pouvoir exécuter la commande "vi" en plus de la
commande "id".
moussa ALL=(ALL:ALL) /usr/bin/id, /usr/bin/ vi
#--On limite l'utilisateur "moussa" à utiliser la commande "vi" sans paramètres grâce aux
guillemets vides : il ne pourra pas faire ("vi /etc/passwd" par exemple).
moussa ALL=(ALL:ALL) /usr/bin/id, /usr/bin/vi ""
NB : Cependant, le programme "vi" peut exécuter "des programmes", par exemple on peut
exécuter(sudo bash, ce qui lancera le Shell en tant que "root" à cause du "sudo"). Et cela pose
un réel problème de sécurité, car dès qu'on a le droit d'exécuter "vi" en tant que root, cela
nous donnes la possibilité d'exécuter d'autres commandes sans quitter "vi" (Exemple :
« :!/bin/bash ») et là, nous devenons root. Et pour éviter ce problème, la solution c'est
d'utiliser l'option "NOEXEC : /usr/bin/vi" qui permettra de lancer "vi", mais n'autorisera pas
cette dernière à lancer une autre commande.
#--L'option "NOEXEC" permet d'exécuter "vi", mais empêche à cette dernière de pouvoir
lancer une autre commande par la suite.
moussa ALL=(ALL:ALL) /usr/bin/id, NOEXEC: /usr/bin/vi
Cependant, toutes les commandes ne peuvent pas être exécutées avec l'option "NOEXEC"
car, certaines commandes doivent lancer d'autres commandes pour fonctionner
correctement.
4. Comprendre la Commande SUDO et Le Fichier /etc/sudoers
SUDO ET LE FICHIER /ETC/SUDOERS M. PAPE M. SONKO, INGENIEUR SYSTEMES ET RESEAUX
4
Nous avons la possibilité de définir une règle qui nous permet de lancer une commande sous
l'identité d'un utilisateur spécifique. On rencontre cela, quand on aura des logiciels qui ont
besoin d'exécuter des scripts. Et on aura besoin d'exécuter des scripts d'administration de
ces logiciels en tant que l'utilisateur associé à ce logiciel.
Au lieu de faire un "su nom_utilisateur" et de taper le mot de passe, on peut le mettre dans
le fichier "sudoers".
#--L'utilisateur "moussa" pourra exécuter "sudo echo bonjour" sans la préfixer de sudo.
moussa ALL=(ALL:ALL) /bin/echo bonjour
#--Les utilisateurs "moussa" et "pape" peuvent exécuter la commande "echo bonsoir" sans la
préfixer de sudo.
moussa, pape ALL=(ALL:ALL) /bin/echo bonsoir
#--Les utilisateurs "moussa" et les membres du groupe "sudo", peuvent exécuter la
commande "echo salut" sans la préfixer de sudo.
moussa, %sudo ALL=(ALL:ALL) /bin/echo salut
II. Les Alias de machines, utilisateurs et commandes
Nous avons la possibilité d'utiliser des (Alias de Machines, d'Utilisateurs et de Commandes)
pour gérer le fichier "/etc/sudoers" quand le nombre d'utilisateurs devient importants. Les
Alias sont des regroupements de noms d'utilisateurs, de machines ou de groupes qu'on va
pouvoir utiliser à la place d'un simple utilisateur.
II.1. Alias d’Utilisateur
Il est impératif que le nom de l'alias commence par une majuscule (En général, on le met
tout en majuscule).
#--Création d'un alias d'utilisateur (ADMIN) qui contient les utilisateurs "pape" et "moussa".
User_Alias ADMIN= pape, moussa
5. Comprendre la Commande SUDO et Le Fichier /etc/sudoers
SUDO ET LE FICHIER /ETC/SUDOERS M. PAPE M. SONKO, INGENIEUR SYSTEMES ET RESEAUX
5
II.2. Alias de Commande
#--On autorise les commandes "adduser" et "passwd" avec l'alias (USERS).
Cmnd_Alias USERS= /usr/sbin/adduser, /usr/bin/passwd
#--Création d'un deuxième alias (TEST) pour les commandes ("echo", "id", et "vi").
Cmnd_Alias TEST= /bin/echo, /usr/bin/id, /usr/bin/vi
#--L'utilisateur "moussa" pourra exécuter les commandes de l'alias TEST.
moussa ALL=(ALL:ALL) NOEXEC: TEST
#--Les utilisateurs de l'alias d'utilisateurs ADMIN peuvent exécuter toutes les commandes de
l’alias de commandes USERS.
ADMIN ALL=(ALL:ALL) USERS
#--Permet de lister les commandes que l'utilisateur "moussa" pourra exécuter avec "sudo".
su - moussa --> sudo -l
NB : Quand un utilisateur est mentionné plusieurs fois dans le fichier "/etc/sudoers", la règle
qui va fonctionner c'est la dernière règle qui va correspondre. Donc l'ordre des commandes
dans le fichier "/etc/sudoers" est extrêmement important.
III. Exclure un Utilisateur
#--Tous les membres du groupe "sudo" peuvent exécuter toutes les commandes sauf
l’utilisateur "pape". La négation est exprimée grâce au point d'exclamation "!" placé devant
le nom de l’utilisateur.
%sudo, !pape ALL=(ALL:ALL) ALL
6. Comprendre la Commande SUDO et Le Fichier /etc/sudoers
SUDO ET LE FICHIER /ETC/SUDOERS M. PAPE M. SONKO, INGENIEUR SYSTEMES ET RESEAUX
6
NB : Et c'est un petit peu pareil pour les noms de machines que l'on va mettre sous forme
d'une liste, on peut les faire sous la forme d'un alias et faire aussi des exclusions avec le
point d'exclamation. Et pour les commandes, il est déconseillé d'utiliser une négation car, on
risque par conséquence d'autoriser des commandes qu’on n’aimerait pas autoriser.
#--On lance la commande id sous l'identité de l'utilisateur "moussa" (affichera les
commandes que l’utilisateur "moussa" pourra exécuter).
sudo -u moussa id
#--L'utilisateur "moussa" pourra exécuter exclusivement en tant que "pape" la commande
"vi". Cela va nous permettre de créer des utilisateurs qui vont pouvoir lancer des scripts sous
l'identité d'un autre utilisateur sans que l'utilisateur en question ne puisse devenir "root".
moussa ALL=(pape) NOEXEC: /usr/bin/vi
IV. Afficher le Message de Speech SUDO :
#--Permet de toujours afficher le message de Speech à chaque connexion (après le
timestamp qui est de 15mn par défaut).
Defaults lecture = always
#--Permet de mettre à 0 le temps de rétention du mot de passe (Par défaut 15min) afin que le
système nous demande de taper notre mot de passe à chaque commande.
Defaults timestamp_timeout = 0
#--Afficher une phrase "insultante" lorsqu'on se trompera sur notre mot de passe (Par
défaut, les insultes sont désactivées).
Defaults insults
#--On désactive le message de Speech pour l'utilisateur "moussa".
Defaults:moussa !lecture
#--On désactive le message de Speech pour les utilisateurs "moussa" et "pape".
Defaults:moussa, pape !lecture
7. Comprendre la Commande SUDO et Le Fichier /etc/sudoers
SUDO ET LE FICHIER /ETC/SUDOERS M. PAPE M. SONKO, INGENIEUR SYSTEMES ET RESEAUX
7
IV.1. Personnaliser le message de Speech SUDO
#--On personnalise le message de Speech pour la commande "fdisk". On créera d'abord le
fichier contenant le message(/tmp/fdisk-lecture).
Defaults!/sbin/fdisk lecture_file = /tmp/fdisk-lecture
V. Exécuter une commande sans mot de passe
#--L'utilisateur "moussa" pourra exécuter la commande "id" sans mot de passe grâce à
l'option NOPASSWD. Cela peut être pratique lorsqu'on aura à exécuter des scripts qui
pourraient avoir des privilèges que temporairement.
moussa ALL=(ALL) NOPASSWD: /usr/bin/id