Configuration avancée de l'utilitaire sudo
L'utilitaire « sudo », filtrant les tâches d'administration dans Ubuntu, peut être paramétré finement pour autoriser ou refuser l'exécution de tâches privilégiées. Plus que simplement autoriser l'exécution de toutes les tâches administratives à un groupe d'utilisateurs par l'authentification par mot de passe, sudo
peut permettre à un utilisateur particulier ou un groupe d'utilisateurs particulier d'exécuter une ou des tâches bien précises, avec ou sans saisie du mot de passe. D'autres paramètres, tel le délai d'attente avant qu'une ré-authentification soit nécessaire, l'endroit où est enregistré le journal d’événements et le niveau de courtoisie de sudo
, sont aussi paramétrables.
Le présent document n'a pas pour but de remplacer le manuel du fichier /etc/sudoers. Il vous indique comment modifier ce fichier dans Ubuntu et ses variantes, et vous donne quelques trucs et astuces de configuration utiles pour votre environnement domestique ou de PME/PMI.
Modification du fichier /etc/sudoers
La configuration de sudo
est enregistrée dans le fichier de configuration /etc/sudoers.
La modification de ce fichier s'effectue à travers un utilitaire de vérification appelé visudo.
sudo visudo
Il effectue une vérification de l'intégrité du fichier après modification avant de l'enregistrer. En cas d'erreur lors de la modification, le nouveau fichier n'est pas enregistré, ce qui vous évite de vous retrouver dans l'impossibilité de corriger votre erreur. Enfin, il s'assure que ce fichier conserve ses droits Unix originaux, ce qui garantit le bon fonctionnement de sudo
.
À la fermeture du fichier /etc/sudoers ouvert par son outil d'édition visudo, la nouvelle configuration est automatiquement chargée.
Choisir l'éditeur utilisé par visudo
A chaque fois
Pour forcer l'utilisation d'un éditeur lors de l'ouverture du fichier /etc/sudoers par visudo , exécutez dans une fenêtre de terminal l'une des commandes suivantes :
- Dans Ubuntu :
sudo VISUAL=/usr/bin/gedit visudo
- Dans Kubuntu :
sudo VISUAL=/usr/bin/kate visudo
- Dans Xubuntu :
sudo VISUAL=/usr/bin/mousepad visudo
- Dans Lubuntu :
sudo VISUAL=/usr/bin/leafpad visudo
- En mode console :
sudo EDITOR=/usr/bin/nano visudo
ousudo EDITOR=/usr/bin/vim visudo
configurer l'éditeur par défaut
pour changer l'éditeur en ligne de commande, par défaut, il suffit de lancer :
sudo update-alternatives --config editor
et de sélectionner l'éditeur de votre choix, dans la liste des éditeurs de texte déjà installés.
Ajout ou retrait de privilèges à un compte d'utilisateur ou un groupe d'utilisateurs
À la fin du fichier, ajoutez une ligne d'instruction…
…telle que la suivante :
identifiant ALL = (user) /chemin/complet/commande,/chemin/complet/autrecommande %groupe ALL = (user) /chemin/complet/commande,!/chemin/complet/autrecommande
identifiant
représente un identifiant utilisateur du système Ubuntu. Un seul identifiant doit être précisé par ligne ;%groupe
désigne un groupe d'utilisateurs du système Ubuntu. Le nom du groupe doit donc être précédé d'un symbole de pourcentage (%
). Un seul groupe doit être précisé par ligne ;ALL
désigne la ou les machines dans lesquelles les commandes suivantes sont autorisées ou refusées pour cet utilisateur ou ce groupe d'utilisateurs. Le mot-cléALL
désigne l'ensemble des machines de votre parc informatique. Dans le cadre d'une utilisation à domicile, laisserALL
n'est pas un inconvénient. Dans un grand parc d'entreprise, de meilleures stratégies sont à prévoir ;- user (entre parenthèses) désigne l'utilisateur dont on prend les droits (peut valoir ALL pour tous)
commande
etautrecommande
représentent des commandes pouvant être exécutées par l'utilisateur ou le groupe d'utilisateurs désigné en début de ligne.- Les commandes précédées d'un point d'exclamation (
!
) sont refusées, alors que celles sans point d'exclamation sont autorisées ; - Les commandes multiples sont séparées par une virgule, sans espace ;
- Les commandes doivent être entrées de manière exacte. Pour cette raison, préférez saisir des chemins absolus vers des commandes plutôt que des chemins relatifs (par exemple,
/usr/sbin/update-manager
plutôt queupdate-manager
). Pour connaître le chemin absolu d'une commande ou d'un utilitaire, saisissez dans un terminalwhich commande
1), ouwhereis commande
2) en remplaçantcommande
par la commande en question.
Exécuter des tâches d'administration sans mot de passe
À la fin du fichier, ajoutez une ligne d'instruction telle que la suivante :
identifiant ALL = /chemin/complet/commande, NOPASSWD: /chemin/complet/autrecommande %groupe ALL = NOPASSWD: /chemin/complet/commande,/chemin/complet/autrecommande
Toutes les commandes situées à la droite du mot-clé NOPASSWD:
peuvent être exécutées par l'utilisateur ou le groupe d'utilisateurs précisé en début d'instruction. Celles restées à sa gauche sont toujours soumises à l'authentification par mot de passe.
Dans cet exemple, identifiant doit fournir son mot de passe pour exécuter commande
, mais n'a pas à le saisir pour exécuter autrecommande
. Quand aux membres du groupe groupe, ils n'ont pas à saisir leur mot de passe pour exécuter commande
ou autrecommande
.
Attention : il ne faut pas mettre juste la commande, mais tout le chemin vers le fichier. Par exemple il ne faut pas mettre "ls" mais "/bin/ls".
Faites extrêmement attention lorsque vous autorisez un utilisateur ou un groupe à exécuter une commande sans mot de passe. Ceci pourrait causer des brèches de sécurité si les commandes autorisées sont potentiellement dangereuses.
Voici un petit exemple, changer un code clavier.
Après avoir créé le groupe codeclavier, pensez à utiliser un numéro spécial pour éviter les conflits avec les groupes utilisateurs, vous ajoutez cette ligne dans le fichier /etc/sudoers.
%codeclavier ALL = NOPASSWD: /bin/changecode
et maintenant le petit script évidemment mis dans /bin/code.clavier.sh
sudo /bin/changecode
et enfin /bin/changecode
#!/bin/sh setkeycodes 0x2b 86
Et miracle, il marche. Si vous ajoutez un lien dans /etc/profile.d/, il sera exécuté à votre connexion en tout transparence!!!
Exécuter un programme avec un autre user
La commande sudo permet d'exécuter un programme en tant qu'un autre utilisateur. Par exemple, la ligne :
foo ALL=(bar) NOPASSWD: /chemin/complet/program
permet à foo d'utiliser program en tant que bar sans qu'on ne lui demande son mot de passe.
Note : Après il faut quand même utiliser sudo pour le lancement de program. Comme ceci :
sudo program
Changement d'options
Augmenter ou réduire le temps de grâce avant que la saisie du mot de passe soit de nouveau demandée
Ajoutez l'option timestamp_timeout=X
à la fin de la ligne débutant par Defaults
. La valeur X
doit être remplacée par la durée, en minutes, durant laquelle le mot de passe n'a pas à être fourni pour effectuer des actions d'administration dans le terminal ou pseudo-terminal courant. La valeur 0
désactive ce temps de grâce : un mot de passe doit être fourni à chaque action d'administration.
Defaults env_reset
devient
Defaults env_reset,timestamp_timeout=X
Si cette option n'est pas précisée, le temps de grâce par défaut est 15 minutes.
Afficher des astérisques lors de la saisie du mot de passe
Ajoutez l'option pwfeedback
à la fin de la ligne débutant par Defaults
.
Defaults env_reset
devient
Defaults env_reset,pwfeedback
Changer le message d'erreur de mauvais mot de passe
Ajoutez l'option badpass_message="texte à afficher" à la fin de la ligne débutant par "Defaults".
Defaults env_reset
devient
Defaults env_reset,badpass_message="texte à afficher"
Des insultes en cas d'erreur de mot de passe
Ajoutez l'option insults
à la fin de la ligne débutant par Defaults
.
Defaults env_reset
devient
Defaults env_reset,insults
Réparer un fichier erroné
Si, en tentant d’exécuter une commande sudo, vous obtenez une erreur comme ci-dessous, c'est que votre fichier sudoers est corrompu. Comme il est corrompu, vous ne pouvez plus exécuter sudo, et donc plus modifier le fichier … cercle vicieux
toto@fixe:~$ sudo >>> sudoers file: syntax error, line 0 <<<
Une solution à tenter est de lancer la commande :
pkexec visudo
Redémarrer en mode recovery
Choisir l'option "root"
Remonter les disques en écriture
mount -o remount,rw /
Remonter les disques en écriture
Faire les opérations souhaitées comme éditer le fichier à la main :
cp /etc/sudoers /etc/sudoers.backup nano /etc/sudoers
Voir ici pour d'autres possibilités.
Aller plus loin...
Consultez la page de manuel officiel du fichier /etc/sudoers :
- En ligne : Sudoers Manual ;
- Copie locale :
man sudoers
Ce document regorge d'options supplémentaires et d'exemples pour personnaliser grandement le comportement de sudo
.