Simplifier l'utilisation de sudo : fini le mot de passe sous Linux

sudo apt update sudo systemctl restart nginx sudo reboot

Quand on utilise Linux, on se retrouve à taper la commande sudo très fréquemment. Mais à force de saisir le mot de passe à chaque fois, cela devient vite agaçant.

Lorsque cette lassitude atteint son paroxysme, on finit par se décider à configurer sudo pour ne plus avoir à entrer le mot de passe. Si vous êtes ici, il est fort probable que vous partagiez ce sentiment !

Dans cet article, nous allons voir comment supprimer la saisie du mot de passe pour sudo.

Sécurité Linux avec Tux et une clé

Où se trouve la configuration de sudo ? Et comment la modifier ?

Le fichier de configuration principal de sudo se trouve ici :

/etc/sudoers

La configuration de sudo est assez délicate : une erreur de syntaxe peut rapidement devenir un casse-tête. Si vous bloquez sudo par une mauvaise configuration, la récupération peut être fastidieuse. C'est pourquoi on utilise la commande dédiée visudo.

sudo visudo

visudo effectue une vérification de la syntaxe lors de l'enregistrement et vous alerte immédiatement en cas de faute de frappe. Le manuel officiel recommande d'ailleurs vivement son utilisation.

N'éditez pas directement /etc/sudoers

Si vous tapez sudo visudo, le fichier /etc/sudoers s'ouvrira directement et vous pourrez le modifier.

Cependant, ouvrir et modifier directement le fichier /etc/sudoers n'est pas une très bonne pratique.

Personnellement, je préfère ne pas toucher au fichier de configuration principal et créer de nouveaux fichiers dans le répertoire /etc/sudoers.d/.

Cela permet de retrouver facilement les modifications que j'ai apportées et de les annuler si nécessaire.

sudo est conçu pour inclure les configurations des fichiers présents dans le répertoire ci-dessous.

En fait, la dernière ligne du fichier /etc/sudoers contient include /etc/sudoers.d/.

sudo visudo -f /etc/sudoers.d/no-password-common-commands

Vous pouvez choisir le nom de fichier que vous voulez, du moment qu'il est facile à identifier plus tard.

Évitez cependant les noms trop génériques ou peu clairs, vous vous en mordriez les doigts par la suite.

Ah ! Notez que les fichiers dont le nom contient ~ ou . sont ignorés par sudo. Une note à ce sujet figure d'ailleurs dans le fichier README du répertoire.

Comprendre le format de configuration

La configuration des sudoers suit grosso modo ce format :

Honnêtement... c'est une syntaxe impossible à mémoriser. Notez-la quelque part ou ajoutez cette page de blog à vos favoris.

On ne l'utilise pas tous les jours, mais quand on en a besoin, on ne s'en souvient jamais.

NOM_UTILISATEUR HÔTE=(UTILISATEUR_À_EXÉCUTER) OPTIONS: COMMANDE

Par exemple, si votre nom d'utilisateur est potter et que vous souhaitez exécuter apt update sans mot de passe, vous pouvez écrire ceci :

potter ALL=(ALL) NOPASSWD: /usr/bin/apt

Analysons chaque partie :

  • potter : Le nom d'utilisateur auquel la configuration s'applique.
  • ALL : Appliquer sur tous les hôtes.
  • (ALL) : Indique avec quels privilèges utilisateur la commande peut être exécutée. J'ai parfois vu (root), mais je préfère utiliser ALL.
  • NOPASSWD: Ne pas demander de mot de passe.
  • /usr/bin/apt : Le "chemin absolu" de la commande autorisée.

Si vous n'êtes pas sûr du chemin d'une commande, vous pouvez le vérifier avec which.

~$which apt
/usr/bin/apt

~$which apt-get
/usr/bin/apt-get

~$which reboot
/usr/sbin/reboot

~$which systemctl
/usr/bin/systemctl

La tentation de tout ouvrir avec ALL

C'est là qu'une forte tentation apparaît :

potter ALL=(ALL) NOPASSWD: ALL

C'est très propre. Toutes les commandes sudo s'exécutent sans mot de passe. C'est pratique. Trop pratique même.

C'est un choix personnel, mais je pense qu'il vaut mieux y résister. Je n'ose pas imaginer la situation où une commande mal tapée s'exécute directement avec les privilèges root.

Si un script tourne mal, il n'y a plus le frein ultime de la saisie du mot de passe. Si quelqu'un utilise votre terminal laissé ouvert un instant, tout est permis. Le monde est plein de gens étranges...

La décision vous appartient.

N'autoriser que les commandes fréquemment utilisées sans mot de passe

Pour ma part, je préfère le compromis : n'autoriser sans mot de passe que les commandes que j'utilise fréquemment. Cette approche est plutôt efficace.

Disons par exemple que vous souhaitez utiliser apt, apt-get, reboot et systemctl sans mot de passe.

Commencez par ouvrir le fichier de configuration :

sudo visudo -f /etc/sudoers.d/no-password-common-commands

Ajoutez-y la ligne suivante :

potter ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get, /usr/sbin/reboot, /usr/bin/systemctl

Désormais, l'utilisateur potter pourra exécuter les commandes ci-dessous sans mot de passe :

sudo apt update
sudo apt -y upgrade
sudo apt-get update
sudo reboot
sudo systemctl reload nginx

Si autoriser toutes les utilisations de systemctl vous semble trop risqué, vous pouvez n'autoriser que des commandes spécifiques :

potter ALL=(ALL) NOPASSWD: /usr/bin/systemctl reload nginx, /usr/bin/systemctl status nginx

Écrire sur plusieurs lignes pour une meilleure lisibilité

Lorsque la liste des commandes devient longue, une seule ligne peut devenir illisible. Dans ce cas, vous pouvez la diviser en utilisant \.

C'est une convention de saut de ligne familière aux utilisateurs Linux, mais curieusement, on a tendance à ne pas l'utiliser en pratique.

Pourtant, cela améliore considérablement la lisibilité.

potter ALL=(ALL) NOPASSWD: \
    /usr/bin/apt, \
    /usr/bin/apt-get, \
    /usr/sbin/reboot, \
    /usr/bin/systemctl

C'est plus clair et plus propre, n'est-ce pas ?

Appliquer à un groupe spécifique

Cette configuration est également très utile. Sur un serveur géré par plusieurs personnes, il est parfois plus simple d'administrer les permissions par groupe.

Pour l'appliquer à un groupe spécifique, utilisez le format %NOM_DU_GROUPE.

Par exemple, pour le groupe admin, cela donnerait ceci :

%admin ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/apt, /usr/bin/apt-get

Augmenter la durée de validité du mot de passe sudo

Si l'idée de supprimer complètement le mot de passe vous met mal à l'aise, il existe une autre solution : ajuster la durée pendant laquelle sudo ne redemande pas le mot de passe.

Par défaut, après une première saisie, le mot de passe n'est pas redemandé pendant environ 10 ou 15 minutes. Vous pouvez modifier cette durée.

Ceci se fait en utilisant le paramètre timestamp_timeout.

Par exemple, cela permet de ne pas redemander le mot de passe sudo pendant 60 minutes :

Defaults timestamp_timeout=60

L'unité est la "minute". Attention, si vous mettez '0', ce sera le cauchemar : il faudra toujours saisir le mot de passe !

Si vous définissez -1, le mot de passe sudo ne sera plus demandé jusqu'à ce que vous fermiez le terminal. C'est un confort presque équivalent à ALL, mais avec une légère sensation d'insécurité.

Bien sûr, ces configurations peuvent coexister : autoriser sans mot de passe certaines commandes et augmenter la durée de validité pour les autres.

Par exemple, vous pouvez les combiner ainsi :

Defaults timestamp_timeout=30

potter ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get, /usr/sbin/reboot

Les commandes fréquemment utilisées sans mot de passe, et pour les autres commandes sudo, une authentification valable pendant 30 minutes.

Je pense que c'est un bon équilibre entre commodité et sécurité, n'est-ce pas ?

Réduire les tracas, c'est bien, mais pas au prix d'une augmentation de l'insécurité.

Conclusion

Supprimer la saisie du mot de passe sudo n'est pas compliqué.

Bien que l'explication ait été longue, voici un résumé rapide :

  1. Créez un fichier de configuration séparé sous /etc/sudoers.d/ avec visudo.
sudo visudo -f /etc/sudoers.d/no-password-common-commands
  1. Ajoutez la règle NOPASSWD.
Defaults timestamp_timeout=30

potter ALL=(ALL) NOPASSWD: \
    /usr/bin/apt, \
    /usr/bin/apt-get, \
    /usr/sbin/reboot

Le niveau d'autorisation sans mot de passe dépend de votre jugement, mais j'aimerais que vous reteniez ceci :

Le véritable confort réside dans la satisfaction simultanée du confort des doigts et de la tranquillité d'esprit.