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.
Table des matières
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.
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.
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.
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
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
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.
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.
Sur Ubuntu on retrouve le même principe.
On voit que le groupe admin a accès à toutes les commandes systèmes.
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 :
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
Liens
- Sudo : comment utiliser le configurer sudoers sur Linux (Debian, Ubuntu, Mint …)
- Erreur “n’apparaît pas dans le fichier sudoers”
- sudo : quels sont les problèmes de sécurité
- 15 exemples utiles de Sudoers pour configurer sudo sur Linux
- Utilisateur et groupes Ubuntu : comment ajouter, supprimer
- Ubuntu : comment passer un utilisateur en administrateur
- Comment utiliser la commande su avec des exemples sur Linux
- Gérer les utilisateurs/groupes sur linux en ligne de commandes (adduser, addgroup, usermod, passwd, …)