Menu Fermer

Sudo : comment utiliser le configurer sudoers sur Linux (Debian, Ubuntu, Mint …)

Sudo (substitute user do) est un programme conçu pour permettre à un utilisateur d’exécuter une commande sous un autre.
En général, on l’utilise pour autoriser certains utilisateurs à exécuter certaines commandes en tant que root.
Ainsi sudo est souvent considéré comme l’abréviation de Super-user do.

Ainsi sur les distributions Linux comme Debian, Ubuntu ou Mint par défaut le super utilisateur root n’est pas accessible.
On désigne un utilisateur considéré comme administrateur qui peut alors lancer des commandes systèmes à l’aide de Sudo.

Cet article vous explique le fonctionnement de sudo.
Comment modifier et configurer sudosers.

sudo : Comment utiliser le configurer sudoers sur Linux (Debian, Ubuntu, Mint ...)

sudo : comment ça marche ?

sudo permet à un utilisateur autorisé d’exécuter une commande en tant que superutilisateur ou autre utilisateur, comme spécifié par la politique de sécurité. L’ID utilisateur réel (non efficace) de l’utilisateur appelant est utilisé pour déterminer le nom d’utilisateur avec lequel interroger la stratégie de sécurité.

La politique de sécurité par défaut est sudoers, qui est configurée via le fichier /etc/sudoers ou via LDAP.
Elle détermine quels privilèges, le cas échéant, un utilisateur doit exécuter sudo. La politique peut exiger que les utilisateurs s’authentifient avec un mot de passe ou une autre authentification
mécanisme.
Si l’authentification est requise, sudo se fermera si le mot de passe de l’utilisateur n’est pas entré dans un délai configurable. Cette limite est spécifique à la politique; le pass par défaut
Le délai d’expiration de l’invite de mot pour la stratégie de sécurité sudoers est de 0 minute.

Ne pas confondre avec la commande su qui permet de s’identifier avec un autre utilisateur et aussi passer des commandes avec un autre utilisateur.

Ainsi la syntaxe est la suivante :

sudo <commande>

Par exemple pour éditer le fichier système /etc/passwd qui requiert un accès administrateur :

sudo vim /etc/passwd

Par exemple ci-dessous, je suis identité avec l’utilisateur pi.
On tente d’écrire dans root et une erreur de permission s’affiche.
Par contre, la même commande avec sudo fonctionne car elle est exécutée en tant qu’administrateur.

Sudo : comment ça marche ?

Même chose ici sur Ubuntu où l’on tente d’ajouter un utilisateur avec la commande adduser.
C’est une commande système non accessible par défaut, on se voit donc un accès refusé.

La commande whoami confirme le changement d’utilisateur.

Sudo : comment ça marche ?

En graphique, sur Ubuntu cela se traduit par une “authentification nécessaire” quand vous accédez aux paramètres du système.
Cette exécution de commande en administrateur se fait à travers gksu ou kdesu.

Sudo : comment ça marche ?
Microsoft a un peu repris ce mécanisme avec le contrôle des comptes utilisateurs dits UAC.
Plus de détails : Le contrôle des comptes utilisateurs (UAC) de Windows.
visudo

Configurer sudo avec visudo et fichier /etc/sudoers

Passons maintenant à la configuration de sudo.
Comme souvent, c’est un fichier de configuration dans /etc/sudoers qui régit la configuration de sudo.
Les accès aux commandes sont déclarés dans ce dernier.

Pour modifier ce dernier, on peut utiliser la commande visudo.
Comme c’est une commande système, il faudra même utiliser : sudo visudo

Toutefois la plupart des distributions “préfèrent” que l’on ajoute ou modifie la configuration à travers le dossier /etc/sudoers.d/.

Voici un exemple de fichier /etc/sudoers

Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

User privilege specification
root ALL=(ALL:ALL) ALL

Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
www-data ALL=NOPASSWD: /usr/local/bin/pihole

Le fichier de configuration sudo se compose de deux sections :

  • Defaults
  • Les privilèges utilisateurs
Le fichier /etc/sudoers est très important d’un point de vue sécurité. Faites aussi attention lorsque vous le modifiez, car vous pouvez perdre les accès administrateur de votre Linux.

La section defaults

Ce sont les lignes qui débutent par defaults.
On trouve souvent :

  • Defaults env_reset : réinitialise l’environnement du terminal pour supprimer toutes les variables utilisateur. Il s’agit d’une mesure de sécurité utilisée pour supprimer les variables environnementales potentiellement dangereuses de la session sudo.
  • Defaults mail_badpass : indique au système d’envoyer par courrier électronique des avis de tentatives de mauvais mot de passe sudo à l’utilisateur mailto configuré. Par défaut, il s’agit du compte root.
  • Defaults secure_path : spécifie les emplacements du système de fichiers que le système d’exploitation recherchera pour les applications) qui seront utilisés pour les opérations sudo. Cela évite d’utiliser des chemins utilisateur qui peuvent être dangereux.

Il en existe des dizaines et des dizaines :

  • Defaults log_output, logfile, etc
  • Defaults insult : change les messages d’erreurs par des messages rigolos…

Reportez-vous au man sudo pour la liste complète.

La section privilège

C’est la partie du fichier /etc/sudoers où l’on déclare les accès aux commandes pour un utilisateur ou groupe d’utilisateur.

La syntaxe est la suivante :

user ALL = (user) commande1,commande2,...
%groupe ALL = (user) commande1,commande2,...
  • user est le nom d’utilisateur auquel le droit sudo s’appliquera
  • %groupe est le nom du groupe auquel le droit sudo s’appliquera. Le caractère % indique le groupe.
  • ALL désigne la ou les systèmes dans lesquels le droit sudo s’appliquera.
  • (user) est l’utilisateur dont on prend les droits. ALL indique “touts” et cela comprend root
  • commande représente des commandes pouvant être exécutées par l’utilisateur ou le groupe désigné en début de ligne. On peut en spécifier plusieurs que l’on sépare avec des virgules.
Syntaxe de /etc/sudoers

Si l’on prend l’exemple de ce fichier de configuration.
On voit que

  • root a accès à toutes les commandes du système
  • les utilisateurs du groupe sudo (%sudo) ont aussi accès à toutes les commandes du système
  • alors que l’utilisateur ww-data ne peut utiliser que la commande pihole sans demande de mot de passe ALL=NOPASSWD:

Les groupes

Par exemple sur ce raspberry en raspbian, les utilisateurs administrateurs doivent faire partie du groupe du sudo.

La déclaration des accès à un groupe d'utilisateur dans sudoers

Sur Ubuntu on retrouve le même principe.
On voit que le groupe admin a accès à toutes les commandes systèmes.

La déclaration des accès à un groupe d'utilisateur dans sudoers

Les privilèges sur les commandes

Par exemple ici, on autorise l’utilisateur apache à utiliser la commande apachectl sans demande de mot de passe.

apache ALL=(ALL) NOPASSWD: /usr/sbin/apachectl

Vous pouvez spécifier plusieurs commandes en les séparant par des virgules :

apache ALL=(ALL) NOPASSWD: /usr/sbin/apachectl, /usr/bin/chmod

Pour autoriser l’utilisateur malekalmorte à utiliser toutes les commandes du système :

malekalmorte ALL=(ALL)       ALL

Et puis pour autoriser à exécuter une commande avec l’utilisateur pierre sous le nom malekalmorte :

pierre ALL=(malekalmorte) /usr/bin/whoami

Dans l’exemple ci-dessous, on autorise à Pierre d’exécuter un script qui se trouve dans le home de malekalmorte.
On déclare le privilège dans sudoers puis on utilise la commande sudo pour l’exécuter en tant que malekalmorte.
On voit alors que le script s’exécute alors que l’utilisateur pierre n’a pas accès à ce dernier.

Enfin les paramètres sont autorisés, par exemple, ici on ne pourra utiliser que apt-get update :

kevin = /usr/bin/apt-get update

Les alias

Enfin il est possible de créer des alias sur les utilisateurs, commandes ou hôtes.

  • User_Alias : Créer un alias sur l’utilisateur
  • Host_Alias : Créer un alias sur l’hôte
  • Cmnd_Alias : Créer un alias sur les commandes

Par exemple ci-dessous, on créé des groupes d’utilisateurs avec User_alias :

User_Alias      GROUPAdmin = malekalmorte, kevin, pierre
User_Alias      GROUPUpdate = vincent, louis, laurent
User_Alias      GROUPShutdown = vincent, kevin, pierre

Puis puis par exemple pour le groupe GROUPUPDATE, on autorise l’accès à la commande apt-get

GROUPUPDATE    ALL = /usr/bin/apt-get

On peut aussi créer un groupe de commandes avec Cmd_Alias.
Ci-dessous le groupe SHUTDOWN, les commandes autoriser les commandes d’arrêt et de redémarrage du système, on créé un alias SHUTDOWN.
Puis on l’autorise pour le groupe GROUPShutdown.

Cmnd_Alias      SHUTDOWN = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPShutdown  ALL = SHUTDOWN

Enfin un dernier exemple avec l’utilisation de l’alias Host_Alias :

Host_Alias HOSTS = monlinux,gaminpc
Host_Alias HOSTIPS = 172.17.103.0/255.255.255.0
systemadmin HOSTS = (root) /usr/bin/cat /etc/shadow

Exemples de configuration sudo et sudoers

Plusieurs exemples sont donnés dans ce tutoriel :

15 exemples utiles de Sudoers pour configurer sudo sur Linux

Exemple de commandes sudo

Dans l’introduction, nous avons vu la syntaxe sudo.
Mais il existe aussi des paramètres.

Par exemple pour réinitialiser le cache des utilisateurs.
En d’autres termes, lors de la prochaine exécution de sudo, un mot de passe sera requis.

sudo -k

Par défaut, pour se logguer en root, on peut utiliser la commande sudo de cette manière :

sudo su -

Cela va demander alors de saisir le mot de passe root.
Mais on peut aussi utiliser la commande sudo avec le paramètre -i.
Dans ce cas là, c’est le mot de passe de l’utilisateur qui est demandé.

sudo -i

On peut aussi utiliser sudo pour exécuter une commande spécifique via un utilisateur ou groupe d’utilisateur.
La syntaxe est alors :

sudo -u nom_utilisateur commande
sudo -g groupe_utilisateur commande