La commande sudo est un outil puissant sous Linux qui permet d’exécuter des instructions avec les privilèges d’un autre utilisateur, généralement l’utilisateur root. Elle offre une gestion fine des accès aux capacités root, permettant d’accorder un accès total ou limité à certaines commandes. Découvrons ensemble comment utiliser cette fonctionnalité.
Comprendre sudo et les privilèges root
Il est souvent dit (avec une simplification) que tout sous Linux est un fichier. En réalité, la plupart des éléments du système d’exploitation, tels que les processus, fichiers, répertoires, sockets, et tubes, interagissent avec le noyau via un descripteur de fichier. Ainsi, bien que tout ne soit pas littéralement un fichier, une grande partie des objets du système sont gérés comme s’ils l’étaient. Cette approche est au cœur de la conception des systèmes de type Linux et Unix.
Ce principe de « tout est un fichier » a des implications profondes sous Linux. Il est donc logique que les permissions de fichiers soient un élément clé dans la gestion des privilèges et des droits des utilisateurs. Le propriétaire d’un fichier ou d’un répertoire (qui est un type de fichier particulier) peut effectuer toutes les opérations qu’il souhaite dessus : modification, renommage, déplacement, suppression. Il peut aussi configurer les permissions afin que d’autres utilisateurs ou groupes puissent lire, modifier ou exécuter le fichier. Ces permissions s’appliquent à tous.
Cependant, il existe une exception à cette règle : le superutilisateur, aussi appelé root. Le compte root est un compte spécial qui n’est pas soumis aux restrictions des permissions habituelles. Il peut donc agir sur n’importe quel élément du système d’exploitation, à tout moment.
Un accès non maîtrisé au mot de passe root peut avoir des conséquences désastreuses, qu’elles soient dues à des actes malveillants ou à des erreurs involontaires. Même l’utilisateur root lui-même n’est pas à l’abri des erreurs, et celles-ci peuvent engendrer des problèmes graves. C’est pourquoi l’utilisation directe du compte root est de plus en plus déconseillée.
Il est désormais préférable de se connecter avec un compte utilisateur standard, et d’utiliser la commande sudo pour élever ses privilèges temporairement. Cette méthode est particulièrement utile pour exécuter une seule instruction nécessitant les droits root.
La liste des utilisateurs sudoers
sudo est souvent préinstallé dans les distributions modernes telles qu’Ubuntu 18.04.3, Manjaro 18.1.0, et Fedora 31. Cette commande existe depuis les années 1980 et est devenue la méthode standard pour accéder aux privilèges de superutilisateur.
Lors de l’installation d’une distribution Linux, le premier utilisateur créé est automatiquement inclus dans une liste appelée sudoers. Cette liste regroupe les utilisateurs autorisés à utiliser la commande sudo. Grâce aux privilèges sudo dont vous disposez, vous pouvez ajouter d’autres utilisateurs à cette liste.
Cependant, accorder les privilèges de superutilisateur sans discernement est risqué. Il est préférable de définir précisément les commandes que chaque utilisateur est autorisé à exécuter via sudo. La liste sudoers permet d’affiner les autorisations et ainsi d’accorder uniquement les droits nécessaires sans compromettre la sécurité du système.
Exécuter des commandes en tant qu’autre utilisateur
L’utilité initiale de la commande sudo était d’agir en tant que superutilisateur. Son champ d’action s’est étendu pour permettre d’exécuter des commandes en se faisant passer pour n’importe quel autre utilisateur. Le terme « utilisateur de substitution » décrit donc mieux sa fonctionnalité actuelle.
Pour exécuter une commande en tant qu’autre utilisateur via sudo, utilisez l’option -u (utilisateur). Par exemple, pour exécuter la commande whoami comme l’utilisateur « mary », il faut taper sudo -u mary whoami. Sans l’option -u, la commande est exécutée avec les privilèges root.
L’utilisation de sudo entraîne une demande de mot de passe.
sudo -u mary whoami
La réponse de whoami confirme que la commande a bien été exécutée avec le compte « mary ».
Il est également possible d’ouvrir une session en tant qu’autre utilisateur sans connaître son mot de passe. Dans ce cas, vous devrez saisir votre propre mot de passe. Pour cela, utilisez l’option -i (login) :
sudo -i -u mary
pwd
whoami
ls -hl
exit

Vous êtes désormais connecté en tant que « mary ». Les fichiers « .bashrc », « .bash_aliases », et « .profile » du compte « mary » sont chargés, comme si l’utilisateur « mary » s’était authentifié normalement.
L’invite de commande est modifiée pour indiquer que vous êtes dans une session avec le compte « mary ».
La commande pwd vous confirme que vous êtes dans le répertoire personnel de « mary ». whoami révèle que vous utilisez le compte « mary ».
Les fichiers listés appartiennent au compte « mary ».
La commande exit vous ramène à votre session utilisateur initiale.
Modifier le fichier sudoers
Pour ajouter des utilisateurs à la liste des personnes ayant le droit d’utiliser sudo, il faut éditer le fichier sudoers. Il est fortement recommandé d’utiliser la commande visudo pour cela. Cette commande empêche l’édition simultanée du fichier par plusieurs personnes. Elle permet aussi la vérification de la syntaxe du fichier avant enregistrement.
Si vos modifications échouent à cette vérification, le fichier n’est pas enregistré et des options vous sont proposées : annuler les changements, revenir en arrière pour les modifier à nouveau ou forcer l’enregistrement des changements erronés. Cette dernière option est très déconseillée, car elle pourrait causer l’impossibilité d’utiliser sudo pour tous les utilisateurs.
Bien que le processus d’édition débute avec la commande visudo, cette dernière n’est pas un éditeur de texte à proprement parler. Elle lance un éditeur préexistant pour la modification du fichier. Sur Manjaro et Ubuntu, visudo lance l’éditeur simple nano. Sur Fedora, c’est l’éditeur vim, plus performant mais moins intuitif, qui est utilisé.
Si vous préférez nano sur Fedora, vous pouvez l’installer facilement :
sudo dnf install nano
Dans ce cas, vous pouvez invoquer visudo en spécifiant l’éditeur à utiliser :
sudo EDITOR=nano visudo

Pour plus de commodité, il est possible de créer un alias pour cette commande. L’éditeur nano s’ouvre alors avec le fichier sudoers.

Ajouter des utilisateurs au groupe sudo
Ouvrez le fichier sudoers avec visudo. Utilisez la commande suivante, ou celle avec l’éditeur de votre choix vue précédemment :
sudo visudo

Faites défiler le fichier jusqu’à atteindre la section définissant l’entrée %sudo.

Le signe pourcentage indique qu’il s’agit d’une définition de groupe, et non d’utilisateur. Sur certaines distributions, la ligne %sudo peut être commentée avec un # en début de ligne. Si c’est le cas, il faut supprimer ce # et enregistrer le fichier.
La signification de la ligne %sudo est la suivante :
%sudo: le nom du groupe.ALL =: la règle s’applique à tous les hôtes du réseau.(ALL:ALL): les membres du groupe peuvent exécuter des commandes avec les privilèges de tous les utilisateurs et tous les groupes.ALL: les membres du groupe peuvent exécuter toutes les commandes.
En d’autres termes, les membres de ce groupe peuvent exécuter n’importe quelle commande, avec les privilèges de n’importe quel utilisateur ou groupe, sur cette machine ou sur n’importe quelle autre machine connectée au réseau. Une méthode simple pour donner les privilèges root et l’autorisation d’utiliser sudo à un utilisateur est donc de l’ajouter au groupe sudo.
Prenons l’exemple de deux utilisateurs, Tom et Mary, avec les comptes utilisateur « tom » et « mary ». Nous allons ajouter le compte utilisateur « tom » au groupe sudo avec la commande usermod. L’option -G (groupes) spécifie le groupe auquel nous allons ajouter le compte « tom ». L’option -a (ajouter) permet d’ajouter ce groupe à la liste des groupes existants pour le compte utilisateur « tom ». Sans cette option, le compte « tom » serait placé dans le nouveau groupe, mais retiré de tous les autres.
sudo usermod -a -G sudo tom

Vérifions les groupes d’appartenance de Mary :
groups

Le compte utilisateur « mary » appartient uniquement au groupe « mary ».
Faisons de même pour Tom :
groups

Le compte utilisateur « tom » – et donc Tom – fait maintenant partie des groupes « tom » et « sudo ».
Essayons de faire exécuter à Mary une action nécessitant les privilèges sudo.
sudo less /etc/shadow

Mary n’a pas l’autorisation d’accéder au fichier sensible « /etc/shadow ». Elle reçoit un message d’erreur lui indiquant qu’elle n’a pas l’autorisation d’utiliser la commande sudo. Voyons comment Tom s’en sort :
sudo less /etc/shadow

Après avoir saisi son mot de passe, Tom accède au contenu du fichier /etc/shadow.

En l’ajoutant au groupe sudo, Tom a été promu parmi ceux qui peuvent utiliser sudo, sans aucune restriction.
Accorder des droits sudo restreints aux utilisateurs
Tom possède désormais tous les privilèges sudo. Il peut réaliser toutes les actions que root – ou tout membre du groupe sudo – peut effectuer. Cela peut être plus de pouvoir que vous ne souhaitez lui accorder. Il arrive parfois qu’un utilisateur doive exécuter une fonction nécessitant les privilèges root, sans qu’il soit nécessaire de lui accorder l’accès total à sudo. Pour obtenir cet équilibre, il faut l’ajouter au fichier sudoers en précisant la liste des commandes qu’il pourra exécuter.
Présentons Harry, le propriétaire du compte utilisateur « harry ». Il ne fait pas partie du groupe sudo et n’a donc aucun privilège sudo.
groups

Il est important qu’Harry puisse installer des logiciels, mais il n’est pas souhaitable qu’il ait tous les droits sudo. C’est tout à fait possible. Ouvrons visudo :
sudo visudo

Parcourez le fichier jusqu’à dépasser les définitions de groupes. Nous allons ajouter une ligne pour Harry. Puisqu’il s’agit d’une définition pour un utilisateur, et non pour un groupe, il n’est pas nécessaire de commencer la ligne par un signe pourcentage.

L’entrée du compte utilisateur « harry » est la suivante :
harry ALL=/usr/bin/apt-get
Notez qu’il y a une tabulation entre « harry » et « ALL = ».
Cette ligne signifie que le compte utilisateur « harry » peut utiliser les commandes listées sur tous les hôtes connectés au réseau. Il n’y a ici qu’une seule commande, « /usr/bin/apt-get ». Pour donner à Harry l’accès à d’autres commandes, il faut les ajouter à cette liste, en les séparant par des virgules.
Ajoutez cette ligne au fichier sudoers et enregistrez le fichier. Pour vérifier que la syntaxe est correcte, il est possible de demander à visudo de scanner le fichier avec l’option -c (vérification uniquement) :
sudo visudo -c

Les vérifications sont effectuées et visudo indique que tout est correct. Harry devrait désormais être capable d’utiliser apt-get pour installer des logiciels, mais devrait être refusé s’il tente d’utiliser une autre commande nécessitant les privilèges sudo.
sudo apt-get install finger

Les droits sudo nécessaires ont été accordés à Harry, qui peut donc installer le logiciel.
Que se passe-t-il si Harry essaie d’utiliser une commande nécessitant sudo ?
sudo shutdown now

Harry n’est pas autorisé à exécuter cette commande. Nous lui avons bien accordé un accès spécifique et limité. Il peut utiliser la commande autorisée, et aucune autre.
Utiliser des alias d’utilisateurs dans sudoers
Si nous souhaitons accorder les mêmes privilèges à Mary, nous pourrions ajouter une ligne dans le fichier sudoers pour le compte utilisateur « mary », de la même manière que pour Harry. Cependant, il existe un moyen plus efficace de faire la même chose : utiliser un User_Alias.
Dans le fichier sudoers, un User_Alias contient une liste de noms de compte utilisateur. Le nom du User_Alias peut ensuite être utilisé dans une définition pour représenter tous ces comptes. Si vous avez besoin de modifier les privilèges de ces utilisateurs, il suffit de changer une seule ligne.
Créons un User_Alias et utilisons-le dans notre fichier sudoers.
sudo visudo
<img decoding= »async » loading= »lazy » class= »alignnone size-full wp-image-448131″ src= »https://toptips.fr/wp-content/uploads/2021/01/16099