Introduction
Vous êtes-vous déjà demandé pourquoi vous devez taper “sudo” tout en essayant d'exécuter certaines commandes dans un environnement Linux ou Unix de système d'exploitation ? Sudo est en fait une abréviation pour “super-user do”. Lorsque vous utilisez la commande sudo, vous pouvez lancer des programmes et exécuter des commandes avec les privilèges de sécurité d'un autre utilisateur.
Par défaut, la commande sudo permet aux utilisateurs du système d'exécuter des commandes avec les privilèges du super-user. Une nouvelle installation d'un système d'exploitation Linux/Unix crée un compte root qui possède des privilèges de super-utilisateur. Lors de la configuration initiale du serveur d'un système Linux/Unix, les administrateurs système se connectent avec le compte root et attribuent des droits système aux autres utilisateurs du système. Ces paramètres sont stockés dans un fichier appelé sudoers. Un compte disposant des privilèges root peut modifier le fichier sudoers et altérer les privilèges des autres utilisateurs.
Dans ce tutoriel, nous verrons comment obtenir les privilèges root et apporter des modifications au fichier sudoers.
Prérequis
Il s'agit d'un tutoriel pratique et vous devrez tester les commandes pour comprendre pleinement le tutoriel. Nous utiliserons le serveur Ubuntu 20.04 dans ce tutoriel, cependant, vous pouvez suivre les étapes si vous disposez de l'une des distributions Linux modernes telles que Debian et CentOS. Vous pouvez suivre ce lien pour configurer votre propre serveur cloud Ubuntu sur CloudSigma.
Obtenir les privilèges root
Vous pouvez obtenir les privilèges root de trois manières que nous détaillons ci-dessous :
Se connecter en tant que root
La méthode la plus simple que la plupart des gens utilisent pour obtenir les privilèges root consiste à se connecter à un système à l'aide des identifiants de l'utilisateur root. Si vous accédez à votre machine locale, il vous suffit de fournir un nom d'utilisateur et un mot de passe vous sera demandé.
Une autre méthode que vous pouvez utiliser pour vous connecter en tant que root consiste à utiliser SSH – un outil en ligne de commande pour se connecter et effectuer des tâches sur un serveur. Il nécessite un nom d'utilisateur et l'adresse IP de votre serveur. La syntaxe pour se connecter en tant que root est la suivante, remplacez l'adresse IP de votre serveur :
|
1 |
ssh root@your_server_ip_or_domain_name |
Lorsque vous saisissez la commande ci-dessus dans votre terminal, il vous sera demandé de fournir votre mot de passe si vous n'avez pas configuré de clés SSH, ou de saisir la phrase secrète de votre clé SSH si vous les avez configurées. Une fois les identifiants corrects fournis, vous serez connecté. Suivez ce guide pour obtenir des instructions étape par étape sur la façon d'utiliser SSH to connect to a remote server in Ubuntu.
Utiliser su pour devenir root
Vous pouvez vous connecter à un système Linux en utilisant n'importe quel autre compte que root, ce qui est généralement la méthode recommandée pour effectuer des tâches non administratives. Chaque fois que vous souhaitez obtenir les privilèges root, il vous suffit de taper su dans votre terminal :
|
1 |
su |
Le système vous demande le mot de passe root, après quoi vous accéderez à une session de shell root. Pendant cette session de shell, vous pouvez effectuer toutes les tâches administratives et chaque fois que vous souhaitez revenir au shell normal, appuyez simplement sur Ctrl + D. Alternativement, vous pouvez taper exit dans le terminal et appuyer sur Entrée.
Utiliser sudo pour exécuter des commandes avec privilèges root
La commande sudo, brièvement présentée au début de ce tutoriel, vous permet d'exécuter des commandes sur une seule ligne sans avoir besoin d'un shell avec privilèges root. Il vous suffit de taper sudo suivi de la commande à exécuter :
|
1 |
sudo execute_this_command |
Par exemple, pour mettre à jour votre système, vous pouvez saisir ce qui suit :
|
1 |
sudo apt-get update |
Un mot de passe vous sera demandé. La différence entre la commande su et la commande sudo est que su demande le mot de passe root tandis que sudo demande le mot de passe de l'utilisateur actuel. L'accès sudo n'est pas accordé par défaut aux utilisateurs car il comporte d'importantes implications de sécurité pour le système. Nous en discuterons plus en détail dans les sections suivantes.
Utiliser Visudo pour modifier le fichier sudoers
Les privilèges sudo sont configurés dans le fichier sudoers situé à /etc/sudoers. Ces privilèges sont nécessaires pour que tout utilisateur puisse accéder au système Linux. Toute erreur de syntaxe empêchera les utilisateurs de se connecter au système, le rendant ainsi inutilisable.
Visudo ouvre le fichier avec un éditeur spécial qui vérifie la syntaxe du fichier lors de l'enregistrement. Il est donc important que vous utilisiez uniquement la commande visudo pour ouvrir le fichier afin d'éviter de rendre votre système de serveur inutilisable. Par défaut, visudo était configuré pour ouvrir l'éditeur de texte avec (vi) vim. Cependant, Ubuntu a configuré visudo pour utiliser l'éditeur de texte nano . Sur Debian ou Ubuntu, vous pouvez passer à un autre éditeur en saisissant la commande suivante :
|
1 |
sudo update-alternatives --config editor |
Il affiche une liste d'éditeurs parmi lesquels vous pouvez choisir un éditeur par défaut, comme le montre la capture d'écran. Sélectionnez le numéro correspondant à l'éditeur que vous préférez :

Sur une distribution Linux CentOS, modifiez /etc/sudoers et ajoutez les lignes ci-dessous :
|
1 2 |
Defaults editor = /usr/bin/vim:/usr/bin/vi:/usr/bin/nano Defaults env_keep += "EDITOR" |
Saisissez la commande suivante. N'oubliez pas de remplacer le nom de votre_editeur_de_choix :
|
1 |
export EDITOR=`which votre_editeur_de_choix` |
La commande ajoute la ligne au fichier ~/.bashrc. Saisissez ce qui suit dans votre terminal pour appliquer les modifications :
|
1 |
. ~/.bashrc |
Votre visudo étant maintenant configuré, vous pouvez ouvrir le fichier situé dans /etc/sudoers en saisissant la commande :
|
1 |
sudo visudo |
Modification du fichier Sudoers
Lorsque vous exécutez la commande précédente, le fichier s'ouvre dans votre éditeur principal tel que vous l'avez configuré. Voici le contenu du fichier :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# # Ce fichier DOIT être modifié avec la commande 'visudo' en tant que root. # # Veuillez envisager d'ajouter du contenu local dans /etc/sudoers.d/ au lieu de # modifier directement ce fichier. # # Consultez la page de manuel pour plus de détails sur la façon d'écrire un fichier sudoers. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Spécification d'alias d'hôte # Spécification d'alias d'utilisateur # Spécification d'alias de commande # Spécification des privilèges utilisateur root ALL=(ALL:ALL) ALL # Les membres du groupe admin peuvent obtenir les privilèges root %admin ALL=(ALL) NOPASSWD:ALL # Autoriser les membres du groupe sudo à exécuter n'importe quelle commande %sudo ALL=(ALL) NOPASSWD:ALL # Voir sudoers(5) pour plus d'informations sur les directives "#include" : #includedir /etc/sudoers.d |
Les commentaires sont assez explicites, mais nous verrons ci-dessous ce que signifient ces lignes.
Lignes par défaut
- Defaults env_reset – Réinitialise les variables d'environnement du terminal pour supprimer toutes les variables utilisateur. Ainsi, cela élimine les variables potentiellement dangereuses d'une session sudo.
- Defaults mail_badpass – Indique au système d'envoyer par e-mail les notifications d'échecs de saisie de mot de passe sudo à l'utilisateur mailto configuré, généralement le compte root.
- Defaults secure_path – Contient les différents chemins du système de fichiers dans lesquels une opération sudo recherchera des applications à utiliser lors de l'exécution afin d'empêcher l'utilisation d'autres chemins définis par l'utilisateur qui pourraient être dangereux pour le système.
Lignes de spécification des privilèges utilisateur
|
1 |
root ALL=(ALL:ALL) ALL |
- root ALL=(ALL:ALL) ALL – Le premier champ spécifie le nom d'utilisateur auquel la règle s'appliquera. Dans ce cas, il s'agit de l'utilisateur root .
- root ALL=(ALL:ALL) ALL –Le premier ALL spécifie que la règle s'appliquera à tous les hôtes.
- root ALL=(ALL:ALL) ALL – Le deuxième ALL spécifie que l'utilisateur auquel cette règle s'applique (c'est-à-dire root) peut exécuter des commandes en tant que tous les utilisateurs.
- root ALL=(ALL:ALL) ALL – Le troisième ALL spécifie que l'utilisateur auquel cette règle s'applique (c'est-à-dire root) peut exécuter des commandes en tant que tous les groupes.
- root ALL=(ALL:ALL) ALL – Le dernier ALL spécifie que ces règles s'appliquent à toutes les commandes.
D'après ce que cette règle indique, un utilisateur root peut exécuter n'importe quelle commande en utilisant sudo une fois qu'il a fourni le mot de passe correct.
Lignes de spécification des privilèges de groupe
Ces lignes spécifient les règles de privilèges sudo qui s'appliquent aux groupes. Les champs indiquent les mêmes actions que les lignes de privilèges utilisateur, avec une petite différence. Ils commencent par un % pour indiquer les noms de groupe.
Comme vous pouvez le voir, le groupe admin peut exécuter n'importe quelle commande en tant que n'importe quel utilisateur sur n'importe quel hôte. Le groupe sudo a le même privilège avec le privilège supplémentaire d'exécuter des commandes en tant que n'importe quel groupe.
Ligne d'inclusion /etc/sudoers.d
La ligne #includedir /etc/sudoers.d peut sembler être un commentaire en raison du # au début de la ligne. Cependant, il s'agit d'une directive d'inclusion pour indiquer que les fichiers du répertoire /etc/sudoers.d doivent être sourcés et utilisés dans le cadre du fichier sudoers. Les fichiers de ce répertoire suivent les mêmes règles que le fichier sudoers.
Tout fichier dans le répertoire qui ne contient pas de point (.) et ne se termine pas par ~ est lu et ajouté à la configuration du fichier sudoers. Le répertoire permet aux applications de modifier les privilèges sudo lors de l'installation en plaçant toutes leurs règles associées dans un seul fichier dédié dans le répertoire /etc/sudoers.d sans modifier le fichier sudoers par défaut. De plus, lorsque vous souhaitez inspecter ou révoquer les privilèges d'une application, vous pouvez facilement vérifier ou modifier les fichiers dans le répertoire /etc/sudoers.d sans modifier le fichier /etc/sudoers directement.
En règle générale, tous les fichiers du répertoire /etc/sudoers.d doivent toujours être modifiés à l'aide de la commande visudo . Ci-dessous se trouve la syntaxe, n'oubliez pas de remplacer le nom du fichier que vous souhaitez modifier dans la commande :
|
1 |
sudo visudo -f /etc/sudoers.d/file_name_to_edit |
Attribuer des privilèges Sudo à un utilisateur
Lorsque vous accordez à un nouvel utilisateur un accès sudo général, cela signifie que vous avez donné au compte utilisateur un accès administratif complet au système. Il s'agit d'une tâche courante que les administrateurs système effectuent lors de la création d'autres utilisateurs non-root avec des privilèges sudo.
Dans les systèmes comme Ubuntu 20.04 qui disposent déjà du groupe d'administration générale, nous pouvons facilement attribuer des privilèges sudo à un utilisateur en l'ajoutant à ce groupe. Le groupe sudo, tel qu'il apparaît dans le fichier /etc/sudoers dispose de privilèges administratifs complets, et nous pouvons ajouter un nom d'utilisateur au groupe en saisissant la commande suivante :
|
1 |
sudo usermod -aG sudo username |
Optionnellement, vous pouvez utiliser la commande gpasswd pour accomplir la même chose :
|
1 |
sudo gpasswd -a username sudo |
Sur CentOS, le groupe par défaut avec des privilèges sudo est nommé wheel, vous pouvez donc attribuer les privilèges à l'aide de la commande :
|
1 |
sudo usermod -aG wheel username |
Optionnellement, en utilisant la commande gpasswd, vous pouvez accomplir la même chose en utilisant la commande :
|
1 |
sudo gpasswd -a username wheel |
Dans certains cas, le wheel le groupe sur CentOS peut être commenté dans le fichier /etc/sudoers. Pour l'activer, ouvrez le fichier avec visudo et décommentez la ligne contenant le nom du groupe. Vous pouvez le faire en supprimant le # au début de la ligne : %wheel ALL=(ALL) ALL.
Création de règles personnalisées
Avec la connaissance de la syntaxe générale de sudoers que vous avez acquise jusqu'à présent, il est temps pour vous de configurer quelques règles.
Créer des alias
Les alias vous permettent d'organiser votre fichier sudoers en regroupant des éléments sous différents « alias ». Nous avons trois directives dont nous allons discuter dans cette section : User_Alias pour créer des alias d'utilisateurs/groupes, Cmnd_Alias pour créer des alias de commandes, et Runas_Alias pour permettre à un utilisateur de s'exécuter en tant qu'un autre utilisateur.
Par exemple, en utilisant le User_Alias, à l'intérieur de votre fichier /etc/sudoers, vous pouvez ajouter l'extrait suivant pour créer trois groupes d'utilisateurs différents. Certains utilisateurs peuvent appartenir à plus d'un groupe :
|
1 2 3 |
User_Alias GROUPONE = adelle, nikita, ellie User_Alias GROUPTWO = nikita, brenden, natalia User_Alias GROUPTHREE = brenden, walter, james |
Notez que tous les noms de groupes commencent par une lettre majuscule. Avec les alias de groupe ci-dessus ajoutés dans le fichier /etc/sudoers, vous pouvez attribuer un privilège pour mettre à jour la base de données apt à GROUPTWO en ajoutant la règle suivante dans le fichier /etc/sudoers :
|
1 |
GROUPTWO ALL = /usr/bin/apt-get update |
Notez que sans spécifier l'utilisateur/le groupe sous lequel s'exécuter, la commande sudo s'exécutera toujours par défaut en tant qu'utilisateur root.
Voici un exemple de Cmnd_Alias où nous créons un alias de commande pour éteindre et redémarrer le système. La règle est ensuite attribuée à GROUPTHREE. L'ajout des lignes suivantes à l'intérieur du fichier /etc/sudoers permet d'y parvenir :
|
1 2 |
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart GROUPTHREE ALL = POWER |
Dans l'extrait ci-dessus, la première ligne crée un alias de commande appelé POWER qui inclut des commandes pour éteindre et redémarrer. La deuxième ligne permet aux membres de GROUPTHREE d'exécuter cette commande.
Voici un exemple de Runas_Alias, où nous créons un alias qui permettra à un groupe d'utilisateurs de s'exécuter en tant qu'un autre utilisateur :
|
1 2 |
Runas_Alias WEB = www-data, apache GROUPONE ALL = (WEB) ALL |
Dans l'extrait ci-dessus, la première ligne crée un alias appelé WEB, spécifiant que l'alias s'exécutera en tant qu'utilisateur apache ou www-data. La deuxième ligne attribue l'alias à GROUPONE. Désormais, les membres du groupe un peuvent exécuter des commandes en tant qu'utilisateur apache ou www-data.
Règles de verrouillage
Dans cette section, vous apprendrez les différentes manières de contrôler la façon dont sudo réagit à un appel. Certaines commandes sont relativement inoffensives sur les systèmes mono-utilisateur. Dans de tels cas, vous pouvez autoriser les utilisateurs à les exécuter avec les privilèges root sans avoir à saisir le mot de passe root. Par exemple, vous pouvez créer une règle pour autoriser les utilisateurs de GROUPONE à exécuter la commande updatedb sans saisir de mot de passe en ajoutant ce qui suit au fichier /etc/sudoers :
|
1 |
GROUPONE ALL = NOPASSWD: /usr/bin/updatedb |
La balise NOPASSWD implique qu'aucun mot de passe ne sera demandé. La balise complémentaire de la balise NOPASSWD est PASSWD, qui est le comportement par défaut. Cela implique qu'un mot de passe doit être fourni à l'invite.
Une balise s'applique à une règle à moins qu'elle ne soit annulée par sa balise complémentaire, par exemple :
|
1 |
GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill |
Dans cette règle, les utilisateurs de GROUPTWO peuvent exécuter la commande updatedb commande sans saisir de mot de passe. Cependant, ils doivent fournir un mot de passe avant d'exécuter la commande kill.
Dans certains cas, vous pouvez vouloir empêcher les utilisateurs d'exécuter certaines commandes afin d'éviter des exécutions dangereuses. C'est là que la balise NOEXEC entre en jeu. Certains programmes peuvent exécuter d'autres commandes depuis leur interface. Un exemple de ce type de programme est less. Si vous tapez une commande avec la syntaxe suivante dans l'interface less, elle s'exécutera, provoquant un comportement inattendu.
|
1 |
!nom_de_la_commande_à_exécuter |
Pour éviter un tel comportement, vous pouvez ajouter la règle suivante au fichier /etc/sudoers afin de restreindre un utilisateur donné identifié par nom_d_utilisateur:
|
1 |
nom_d_utilisateur ALL = NOEXEC: /usr/bin/less |
Informations supplémentaires
Dans cette section, nous incluons des informations, directives et commandes supplémentaires que vous pourriez juger nécessaires lors de l'utilisation de sudo.
Si vous avez utilisé Runas_Alias dans la configuration, spécifiant qu'un utilisateur ou un groupe peut s'exécuter en tant qu'un autre utilisateur, vous pouvez exécuter des commandes en tant que ces utilisateurs en utilisant l'option -u pour l'utilisateur et l'option -g pour les groupes. Voici la syntaxe :
|
1 2 |
sudo -u run_as_user command sudo -g run_as_group command |
Chacune de ces commandes vous demandera de saisir le mot de passe associé. Pour des raisons de commodité, sudo enregistre le mot de passe pendant un certain temps, de sorte que vous n'ayez pas à le saisir à chaque fois que vous exécutez une commande avec sudo. Vous pouvez effacer ce délai une fois que vous avez terminé avec les commandes privilégiées sudo en saisissant la commande suivante :
|
1 |
sudo -k |
Au cas où vous auriez d'autres tâches à effectuer avec les privilèges sudo, et que vous souhaiteriez prolonger le délai avant la demande de mot de passe, ou si vous voulez éviter que la commande sudo ne vous demande un mot de passe plus tard, vous pouvez renouveler ce délai en tapant la commande suivante :
|
1 |
sudo -v |
La commande vous demande un mot de passe et le met en cache pour les utilisations ultérieures de sudo.
Pour lister les privilèges sudo définis pour votre nom, vous pouvez saisir la commande suivante :
|
1 |
sudo -l |
La commande liste toutes les règles configurées dans le fichier /etc/sudoers qui s'appliquent à votre nom d'utilisateur. À partir de ces règles, vous pouvez avoir une idée des tâches que votre nom d'utilisateur peut effectuer sur le système. Voici un exemple de capture d'écran :

Dans certains cas, il peut arriver que vous exécutiez des commandes et qu'elles échouent parce que vous avez oublié de les précéder de sudo. Dans ce genre de scénario, vous devriez retaper la commande en commençant par sudo. Pour éviter d'avoir à retaper la commande, vous pouvez utiliser la fonctionnalité bash pour « répéter la dernière commande ». La syntaxe est un double point d'exclamation. Vous pouvez exécuter la dernière commande que vous avez lancée sur votre terminal en saisissant ce qui suit :
|
1 |
sudo !! |
Enfin, il est important de savoir que sudo élève simplement la commande pour qu'elle soit exécutée avec les privilèges sudo. Pour plus d'informations, vous pouvez suivre les instructions sur ce lien pour vous amuser un peu avec vos utilisateurs.
Conclusion
Lorsque vous travaillez avec plusieurs utilisateurs, il est crucial de bien maîtriser la commande sudo et le fichier sudoers. Dans ce tutoriel, nous avons présenté les bases de la lecture et de la modification du fichier sudoers ainsi que les différentes méthodes que vous pouvez utiliser pour obtenir les privilèges root.
Gardez toujours à l'esprit que c'est la séparation des privilèges qui assure la sécurité des systèmes Linux. Par conséquent, les privilèges de super-utilisateur ne doivent pas être accordés aux utilisateurs ordinaires. N'attribuez que les privilèges absolument nécessaires à un utilisateur particulier pour effectuer ses tâches spécifiques dans le système, et non l'ensemble des privilèges.
Bonne informatique !
Commentaires
Aucun commentaire pour l'instant. Soyez le premier.