Comment éditer le fichier Sudoers

Introduction

La séparation des privilèges est l’un des paradigmes de sécurité fondamentaux implémentés dans les systèmes d’exploitation Linux et de type Unix. Les utilisateurs réguliers fonctionnent avec des privilèges limités afin de réduire la portée de leur influence à leur propre environnement, et non pas à l’ensemble du système d’exploitation.

A special user, called root, has super-user privileges. This is an administrative account without the restrictions that are present on normal users. Users can execute commands with super-user or root privileges in a number of different ways.

Dans cet article, nous discuterons de la manière correcte et sécurisée d’obtenir les privilèges root, en mettant particulièrement l’accent sur la modification du fichier /etc/sudoers.

Nous effectuerons ces étapes sur un serveur Ubuntu 20.04, mais la plupart des distributions Linux modernes telles que Debian et CentOS devraient fonctionner de manière similaire.

Ce guide suppose que vous avez déjà terminé la configuration initiale du serveur discutée ici. Connectez-vous à votre serveur en tant qu’utilisateur régulier, non root, et continuez ci-dessous.Remarque : Ce tutoriel approfondit l’élévation de privilèges et le fichier sudoers. Si vous souhaitez simplement ajouter des privilèges sudo à un utilisateur, consultez nos tutoriels de démarrage rapide sur Comment créer un nouvel utilisateur avec des privilèges sudo pour Ubuntu et CentOS.

Note: Ce tutoriel aborde en profondeur l’élévation des privilèges et le fichier sudoers. Si vous souhaitez simplement ajouter des privilèges sudo à un utilisateur, consultez nos tutoriels de démarrage rapide Comment créer un nouvel utilisateur avec sudo pour Ubuntu et CentOS.

Comment obtenir des privilèges de root

Il existe trois moyens de base d’obtenir des privilèges root, qui varient en termes de sophistication.

Se connecter en tant que root

La méthode la plus simple et la plus directe pour obtenir des privilèges root est de se connecter directement à votre serveur en tant qu’utilisateur root.

Si vous vous connectez à une machine locale (ou utilisez une fonction de console hors bande sur un serveur virtuel), entrez root comme nom d’utilisateur au prompt de connexion et entrez le mot de passe root lorsqu’on vous le demande.

Si vous vous connectez via SSH, spécifiez l’utilisateur root avant l’adresse IP ou le nom de domaine dans votre chaîne de connexion SSH :

  1. ssh root@server_domain_or_ip

Si vous n’avez pas configuré les clés SSH pour l’utilisateur root, entrez le mot de passe root lorsqu’on vous le demande.

Utilisation de su pour devenir Root

Se connecter directement en tant que root n’est généralement pas recommandé, car il est facile de commencer à utiliser le système pour des tâches non administratives, ce qui est dangereux.

La prochaine façon d’obtenir des privilèges de super-utilisateur vous permet de devenir l’utilisateur root à tout moment, au besoin.

Nous pouvons le faire en invoquant la commande su, qui signifie « utilisateur de substitution ». Pour obtenir des privilèges root, tapez :

  1. su

Vous serez invité à saisir le mot de passe de l’utilisateur root, après quoi, vous serez placé dans une session de shell root.

Lorsque vous avez terminé les tâches qui nécessitent des privilèges root, revenez à votre shell normale en tapant :

  1. exit

Utilisation de sudo pour exécuter des commandes en tant que Root

La dernière méthode d’obtention des privilèges root dont nous allons discuter est avec la commande sudo.

La commande sudo vous permet d’exécuter des commandes ponctuelles avec des privilèges root, sans avoir besoin de lancer un nouveau shell. Elle est exécutée comme ceci:

  1. sudo command_to_execute

Contrairement à su, la commande sudo demandera le mot de passe de l’utilisateur actuel, et non le mot de passe root.

En raison de ses implications en matière de sécurité, l’accès sudo n’est pas accordé aux utilisateurs par défaut et doit être configuré avant de fonctionner correctement. Consultez nos tutoriels rapides Comment créer un nouvel utilisateur avec sudo pour Ubuntu et CentOS pour apprendre à configurer un utilisateur sudo-enabled.

Dans la section suivante, nous discuterons de manière plus détaillée de la modification de la configuration sudo.

Qu’est-ce que Visudo?

La commande sudo est configurée à travers un fichier situé à /etc/sudoers.

Attention: Ne jamais éditer ce fichier avec un éditeur de texte normal ! Utilisez toujours la commande visudo à la place !

Parce que la syntaxe incorrecte dans le fichier /etc/sudoers peut vous laisser avec un système cassé où il est impossible d’obtenir des privilèges élevés, il est important d’utiliser la commande visudo pour modifier le fichier.

La commande visudo ouvre un éditeur de texte comme d’habitude, mais elle valide la syntaxe du fichier lors du sauvegarde. Cela empêche les erreurs de configuration de bloquer les opérations sudo, qui peuvent être votre seule façon d’obtenir des privilèges root.

Traditionnellement, visudo ouvre le fichier /etc/sudoers avec l’éditeur de texte vi. Ubuntu, cependant, a configuré visudo pour utiliser l’éditeur de texte nano à la place.

Si vous souhaitez le changer en vi, exécutez la commande suivante:

  1. sudo update-alternatives --config editor
Output
There are 4 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status ------------------------------------------------------------ * 0 /bin/nano 40 auto mode 1 /bin/ed -100 manual mode 2 /bin/nano 40 manual mode 3 /usr/bin/vim.basic 30 manual mode 4 /usr/bin/vim.tiny 10 manual mode Press <enter> to keep the current choice[*], or type selection number:

Sélectionnez le numéro correspondant à l’option que vous souhaitez faire.

Sur CentOS, vous pouvez changer cette valeur en ajoutant la ligne suivante à votre ~/.bashrc:

  1. export EDITOR=`which name_of_editor`

Sourcez le fichier pour mettre en œuvre les changements:

  1. . ~/.bashrc

Après avoir configuré visudo, exécutez la commande pour accéder au fichier /etc/sudoers:

  1. sudo visudo

Comment Modifier le Fichier Sudoers

Vous serez présenté avec le fichier /etc/sudoers dans votre éditeur de texte sélectionné.

I have copied and pasted the file from Ubuntu 20.04, with comments removed. The CentOS /etc/sudoers file has many more lines, some of which we will not discuss in this guide.

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

root    ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d

Jetons un coup d’œil à ce que font ces lignes.

Lignes par défaut

La première ligne, Defaults env_reset, réinitialise l’environnement de la session pour supprimer toutes les variables d’utilisateur. Il s’agit d’une mesure de sécurité utilisée pour effacer des variables d’environnement potentiellement nocives de la session sudo.

La deuxième ligne, Defaults mail_badpass, indique au système d’envoyer des avis de mauvaises tentatives de mot de passe sudo à l’utilisateur mailto configuré. Par défaut, c’est le compte root.

La troisième ligne, qui commence par Defaults secure_path=..., spécifie le PATH (les endroits dans le système de fichiers que l’OS recherchera pour les applications) qui sera utilisé pour les opérations sudo. Cela empêche l’utilisation de chemins d’utilisateur qui pourraient être nocifs.

Lignes de privilèges utilisateur

La quatrième ligne, qui dicte les privilèges sudo de l’utilisateur root, est différente des lignes précédentes. Jetons un coup d’œil à ce que signifient les différents champs :

  • root ALL=(ALL:ALL) ALL
    Le premier champ indique le nom d’utilisateur auquel la règle s’appliquera (root).

  • root ALL=(ALL:ALL) ALL
    Le premier « ALL » indique que cette règle s’applique à tous les hôtes.

  • root ALL=(ALL:ALL) ALL
    Ce « ALL » indique que l’utilisateur root peut exécuter des commandes en tant qu’utilisateurs.

  • root ALL=(ALL:ALL) ALL
    Ce « ALL » indique que l’utilisateur root peut exécuter des commandes en tant que toutes les groupes.

  • root ALL=(ALL:ALL) ALL
    Le dernier « ALL » indique que ces règles s’appliquent à toutes les commandes.

Cela signifie que notre utilisateur root peut exécuter n’importe quelle commande en utilisant sudo, tant qu’il fournit son mot de passe.

Lignes de privilèges de groupe

Les deux lignes suivantes sont similaires aux lignes de privilèges utilisateur, mais elles spécifient les règles sudo pour les groupes.

Les noms commençant par un % indiquent les noms de groupes.

Ici, nous voyons que le groupe admin peut exécuter n’importe quelle commande en tant qu’utilisateur sur n’importe quel hôte. De même, le groupe sudo a les mêmes privilèges, mais peut également s’exécuter en tant que tout groupe.

Ligne inclus /etc/sudoers.d

La dernière ligne peut sembler être un commentaire à première vue:

/etc/sudoers
. . .

#includedir /etc/sudoers.d

Elle fait commence par un #, ce qui indique généralement un commentaire. Cependant, cette ligne indique en réalité que les fichiers dans le répertoire /etc/sudoers.d seront source et appliqués également.

Les fichiers dans ce répertoire suivent les mêmes règles que le fichier /etc/sudoers lui-même. Tout fichier qui ne se termine pas par ~ et qui ne contient pas de . sera lu et ajouté à la configuration sudo.

Ceci est principalement destiné aux applications pour modifier les privilèges sudo lors de l’installation. Placer toutes les règles associées dans un seul fichier dans le répertoire /etc/sudoers.d peut faciliter la visualisation des privilèges associés à chaque compte et faciliter la réversion des informations d’identification sans avoir à manipuler directement le fichier /etc/sudoers.

Comme avec le fichier /etc/sudoers lui-même, vous devez toujours modifier les fichiers dans le répertoire /etc/sudoers.d avec visudo. La syntaxe pour modifier ces fichiers serait :

  1. sudo visudo -f /etc/sudoers.d/file_to_edit

Comment accorder à un utilisateur des privilèges sudo

L’opération la plus courante que les utilisateurs souhaitent réaliser lors de la gestion des permissions sudo est d’accorder à un nouvel utilisateur un accès général sudo. C’est utile si vous souhaitez donner un compte un accès administratif complet au système.

La façon la plus simple de le faire sur un système configuré avec un groupe d’administration générique, comme le système Ubuntu dans ce guide, est en fait d’ajouter l’utilisateur concerné à ce groupe.

Par exemple, sur Ubuntu 20.04, le groupe sudo a tous les privilèges d’administrateur. Nous pouvons accorder à un utilisateur les mêmes privilèges en les ajoutant au groupe de cette manière :

  1. sudo usermod -aG sudo username

La commande gpasswd peut également être utilisée :

  1. sudo gpasswd -a username sudo

Ces deux méthodes accomplissent la même chose.

Sur CentOS, c’est généralement le groupe wheel au lieu du groupe sudo :

  1. sudo usermod -aG wheel username

Ou, en utilisant gpasswd :

  1. sudo gpasswd -a username wheel

Sur CentOS, si l’ajout de l’utilisateur au groupe ne fonctionne pas immédiatement, vous devrez peut-être modifier le fichier /etc/sudoers pour décommenter le nom du groupe :

  1. sudo visudo
/etc/sudoers
. . .
%wheel ALL=(ALL) ALL
. . .

Comment Configurer des Règles Personnalisées

Maintenant que nous nous sommes familiarisés avec la syntaxe générale du fichier, créons quelques nouvelles règles.

Comment Créer des Alias

Le fichier sudoers peut être organisé plus facilement en regroupant des choses avec différents types d’“alias”.

Par exemple, nous pouvons créer trois groupes différents d’utilisateurs, avec une adhésion superposée :

/etc/sudoers
. . .
User_Alias		GROUPONE = abby, brent, carl
User_Alias		GROUPTWO = brent, doris, eric,
User_Alias		GROUPTHREE = doris, felicia, grant
. . .

Les noms de groupe doivent commencer par une lettre majuscule. Nous pouvons alors autoriser les membres de GROUPTWO à mettre à jour la base de données apt en créant une règle comme celle-ci :

/etc/sudoers
. . .
GROUPTWO	ALL = /usr/bin/apt-get update
. . .

Si nous ne spécifions pas un utilisateur/groupe à utiliser, comme ci-dessus, sudo utilise par défaut l’utilisateur root.

Nous pouvons autoriser les membres de GROUPTHREE à éteindre et redémarrer la machine en créant un “alias de commande” et en l’utilisant dans une règle pour GROUPTHREE :

/etc/sudoers
. . .
Cmnd_Alias		POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPTHREE	ALL = POWER
. . .

Nous créons un alias de commande appelé POWER qui contient des commandes pour éteindre et redémarrer la machine. Nous permettons ensuite aux membres de GROUPTHREE d’exécuter ces commandes.

Nous pouvons également créer des alias « Exécuter en tant que », qui peuvent remplacer la partie de la règle qui spécifie l’utilisateur pour exécuter la commande:

/etc/sudoers
. . .
Runas_Alias		WEB = www-data, apache
GROUPONE	ALL = (WEB) ALL
. . .

Cela permettra à quiconque membre de GROUPONE d’exécuter des commandes en tant qu’utilisateur www-data ou apache.

Gardez à l’esprit que les règles ultérieures annuleront les règles précédentes lorsqu’il y aura un conflit entre les deux.

Comment verrouiller les règles

Il existe de nombreuses façons d’obtenir un contrôle accru sur la manière dont sudo réagit à un appel.

La commande updatedb associée au paquet mlocate est relativement inoffensive sur un système à utilisateur unique. Si nous voulons permettre aux utilisateurs d’exécuter cette commande avec les privilèges root sans avoir à saisir un mot de passe, nous pouvons créer une règle comme celle-ci:

/etc/sudoers
. . .
GROUPONE	ALL = NOPASSWD: /usr/bin/updatedb
. . .

NOPASSWD est une « étiquette » qui signifie qu’aucun mot de passe ne sera demandé. Il existe une commande associée appelée PASSWD, qui est le comportement par défaut. Une étiquette est pertinente pour le reste de la règle, sauf si elle est annulée par son « étiquette jumelle » plus tard dans la ligne.

Par exemple, nous pouvons avoir une ligne comme celle-ci:

/etc/sudoers
. . .
GROUPTWO	ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
. . .

Un autre tag utile est NOEXEC, qui peut être utilisé pour empêcher certains comportements dangereux dans certains programmes.

Par exemple, certains programmes, comme less, peuvent lancer d’autres commandes en tapant ceci à partir de leur interface:

!command_to_run

Cela exécute essentiellement n’importe quelle commande que l’utilisateur lui donne avec les mêmes permissions que less est en cours d’exécution, ce qui peut être très dangereux.

Pour restreindre cela, nous pourrions utiliser une ligne comme celle-ci:

/etc/sudoers
. . .
username	ALL = NOEXEC: /usr/bin/less
. . .

Informations diverses

Il y a encore quelques morceaux d’information qui pourraient être utiles lors de la manipulation de sudo.

Si vous avez spécifié un utilisateur ou un groupe pour « s’exécuter en tant que » dans le fichier de configuration, vous pouvez exécuter des commandes en tant que ces utilisateurs en utilisant les drapeaux -u et -g, respectivement:

  1. sudo -u run_as_user command
  2. sudo -g run_as_group command

Pour plus de commodité, par défaut, sudo enregistrera vos informations d’identification pendant un certain temps dans un terminal. Cela signifie que vous n’aurez pas à retaper votre mot de passe tant que le compte à rebours n’aura pas expiré.

Pour des raisons de sécurité, si vous souhaitez effacer ce compte à rebours lorsque vous avez terminé d’exécuter des commandes d’administration, vous pouvez exécuter:

  1. sudo -k

Si, d’un autre côté, vous voulez « préparer » la commande sudo pour ne pas être interrogé plus tard, ou renouveler votre bail sudo, vous pouvez toujours taper :

  1. sudo -v

Vous serez invité à saisir votre mot de passe, qui sera mis en cache pour les utilisations ultérieures de sudo jusqu’à ce que le délai de sudo expire.

Si vous vous demandez simplement quelles sortes de privilèges sont définis pour votre nom d’utilisateur, vous pouvez taper:

  1. sudo -l

Cela vous donnera la liste de toutes les règles dans le fichier /etc/sudoers qui s’appliquent à votre utilisateur. Cela vous donne une bonne idée de ce que vous serez autorisé ou non à faire avec sudo en tant qu’utilisateur.

Il y a de nombreuses fois où vous exécuterez une commande et elle échouera parce que vous avez oublié de la préfixer par sudo. Pour éviter d’avoir à réécrire la commande, vous pouvez profiter d’une fonctionnalité de bash qui signifie « répéter la dernière commande »:

  1. sudo !!

Les deux points d’exclamation répètent la dernière commande. Nous l’avons précédée de sudo pour changer rapidement la commande non privilégiée en commande privilégiée.

Pour un peu de plaisir, vous pouvez ajouter la ligne suivante dans votre fichier /etc/sudoers avec visudo:

  1. sudo visudo
/etc/sudoers
. . .
Defaults	insults
. . .

Cela fera en sorte que sudo retourne une insulte amusante lorsqu’un utilisateur saisit un mot de passe incorrect pour sudo. Nous pouvons utiliser sudo -k pour effacer le mot de passe sudo mis en cache précédemment pour l’essayer:

  1. sudo -k
  2. sudo ls
Output
[sudo] password for demo: # enter an incorrect password here to see the results Your mind just hasn't been the same since the electro-shock, has it? [sudo] password for demo: My mind is going. I can feel it.

Conclusion

Vous devriez maintenant avoir une compréhension de base de la manière de lire et de modifier le fichier sudoers, et une idée des différentes méthodes que vous pouvez utiliser pour obtenir des privilèges root.

Rappelez-vous, les privilèges de super-utilisateur ne sont pas accordés aux utilisateurs réguliers pour une raison. Il est essentiel que vous compreniez ce que chaque commande fait lorsque vous l’exécutez avec les privilèges root. Ne prenez pas cette responsabilité à la légère. Apprenez la meilleure façon d’utiliser ces outils pour votre cas d’utilisation et verrouillez toute fonctionnalité inutile.

Source:
https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file