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.

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 :
- Créez un fichier de configuration séparé sous
/etc/sudoers.d/avecvisudo.
sudo visudo -f /etc/sudoers.d/no-password-common-commands
- 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.
Aucun commentaire.