L’utilitaire sudo (substitute user do) est inclus dans la plupart des distributions Linux pour vous permettre d’exécuter des commandes en root (superutilisateur).
En réalité, il permet d’exécuter des commandes sous un autre utilisateur, pas que root.
Pour cela, on configure le fichier sudoers pour donner des privilèges et choisir le comportement de sudo.
Dans ce tutoriel, je vous propose 15 exemples sudoers pour configurer sudo de Linux.

Table des matières
- 1 15 exemples utiles de Sudoers pour configurer sudo sur Linux
- 1.1 Changer le PATH utilisé par sudo
- 1.2 Activer sudo seulement sur la session de connexion de l’utilisateur TTY
- 1.3 Exécuter la commande Sudo en utilisant un pty
- 1.4 Créer un fichier journal Sudo
- 1.5 Logger Entrée/Sortie de la commande Sudo
- 1.6 Lecture Sudo Users
- 1.7 Personnaliser le message lorsque vous entrez un mot de passe sudo erroné
- 1.8 Augmenter la limite d’essais du mot de passe sudo
- 1.9 Laissez Sudo vous insulter quand vous entrez un mauvais mot de passe
- 1.10 Ne pas demander le mot de passe (NOPASSWD)
- 1.11 Spécifier plusieurs commandes dans sudoers
- 1.12 Créer un groupe d’utilisateur avec User_Alias
- 1.13 Limiter les accès à un répertoire
- 1.14 Limiter l’utilisation de paramètre
- 1.15 Limiter l’accès au réseau LAN
- 2 Liens
15 exemples utiles de Sudoers pour configurer sudo sur Linux
Changer le PATH utilisé par sudo
Vous pouvez spécifier le PATH utilisé pour chaque commande exécutée avec sudo, il a deux importances :
- Utilisé lorsqu’un administrateur système ne fait pas confiance aux utilisateurs de sudo pour avoir une variable d’environnement PATH sécurisée.
- Pour séparer « root path » et « user path », seuls les utilisateurs définis par exempt_group ne sont pas affectés par ce paramètre.
Pour le définir, ajoutez la ligne :
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Activer sudo seulement sur la session de connexion de l’utilisateur TTY
Pour permettre à sudo d’être invoqué à partir d’un vrai tty mais pas par des méthodes telles que cron ou des scripts cgi-bin, ajoutez la ligne :
Defaults requiretty
Exécuter la commande Sudo en utilisant un pty
Parfois, les attaquants peuvent exécuter un programme malveillant à l’aide de sudo, ce qui forcerait à nouveau un processus d’arrière-plan qui resterait sur le terminal de l’utilisateur même lorsque le programme principal a fini de s’exécuter.
Pour éviter un tel scénario, vous pouvez configurer sudo pour qu’il n’exécute d’autres commandes qu’à partir d’un psuedo-pty en utilisant le paramètre use_pty, que la journalisation des E/S soit activée ou non, comme suit :
Defaults use_pty
Créer un fichier journal Sudo
Par défaut, sudo enregistre les données via syslog (3). Cependant, pour spécifier un fichier journal personnalisé, utilisez le paramètre logfile comme suit :
Defaults logfile="/var/log/sudo.log"
Pour enregistrer le nom d’hôte et l’année à quatre chiffres dans le fichier journal personnalisé, utilisez les paramètres log_host et log_year respectivement comme suit :
Defaults log_host, log_year, logfile="/var/log/sudo.log"
Logger Entrée/Sortie de la commande Sudo
Les paramètres log_input et log_output permettent à sudo d’exécuter une commande en pseudo-tty et de consigner toutes les entrées de l’utilisateur et toutes les sorties envoyées à l’écran de manière réceptive.
Le répertoire par défaut du journal des entrées/sorties est /var/log/sudo-io, et s’il existe un numéro de séquence de session, il est stocké dans ce répertoire. Vous pouvez spécifier un répertoire personnalisé via le paramètre iolog_dir.
Defaults log_input, log_output
Certaines séquences d’échappement sont prises en charge, telles que %{seq} qui se développe en un numéro de séquence en base 36 croissant de façon monotone, tel que 000001, où tous les deux chiffres sont utilisés pour former un nouveau répertoire, par exemple /var/log/sudo-io/00/00, /var/log/sudo-io/00/00/00, /var/log/sudo-io/00/A0 puis /var/log/sudo-io/00/01/00 et ainsi de suite.
Dans ce dernier on trouve des fichiers log, log.json, stderr stdin stdout timing ttyin ttyout.
log donne notamment les accès aux fichiers.
log.json donne encore plus d’informations.
Lecture Sudo Users
Pour informer les utilisateurs de sudo de l’utilisation des mots de passe sur le système, utilisez le paramètre lecture comme ci-dessous.
Il a 3 valeurs possibles :
- always – toujours faire un cours à un utilisateur.
- once – ne donne un cours à un utilisateur que la première fois qu’il exécute la commande sudo (ceci est utilisé lorsqu’aucune valeur n’est spécifiée).
- never – ne jamais informer l’utilisateur.
Defaults lecture="always"
En outre, vous pouvez définir un fichier de cours personnalisé avec le paramètre lecture_file, tapez le message approprié dans le fichier :
Defaults lecture_file="/chemin/fichier"
Personnaliser le message lorsque vous entrez un mot de passe sudo erroné
Lorsqu’un utilisateur saisit un mauvais mot de passe, un certain message est affiché sur la ligne de commande. Le message par défaut est « Désolé, essayez de nouveau« , vous pouvez modifier le message en utilisant le paramètre badpass_message comme suit :
Defaults badpass_message="Mot de passe incorrect, merci de réessayer. Si vous avez oublié le mot de passe, contactez votre administrateur."
Augmenter la limite d’essais du mot de passe sudo
Par défaut, sudo vous redemandera 3 fois de saisir le mot de passe lorsque la saisie est éronnée.
Vous pouvez augmenter le nombre d’essai grâce au paramètre passwd_tries.
Defaults passwd_tries=5
Laissez Sudo vous insulter quand vous entrez un mauvais mot de passe
Dans le cas où un utilisateur tape un mauvais mot de passe, sudo affichera des insultes sur le terminal avec le paramètre insults.
Attention, ceci désactivera automatiquement le paramètre badpass_message.
Defaults insults
Ne pas demander le mot de passe (NOPASSWD)
Sudoers vous permet d’exécuter une commande privilégiée sans entrer le mot de passe. Ceci est très utile lorsque vous exécutez des scripts automatisés dans le système en tant qu’utilisateur normal, le script peut avoir à exécuter une commande privilégiée.
Rappelez-vous que, même s’il s’agit d’un script ou d’un processus, il doit s’exécuter EN TANT QU’UTILISATEUR, il ne peut pas s’exécuter tout seul.
Tous les scripts automatisés ne sont pas assez intelligents pour entrer le mot de passe lorsqu’on leur demande. Mais il est possible d’entrer automatiquement le mot de passe. Pour l’instant, ne pensons pas aux scripts intelligents. Donc pour conclure, une commande privilégiée peut être utilisée par un utilisateur sans entrer le mot de passe.
Exemple de script nécessitant NOPASSWD : Supervisor sous Linux, dont nous parlerons dans un autre article.
sysadmin ALL = (root) NOPASSWD : /usr/sbin/apache2
Spécifier plusieurs commandes dans sudoers
Vous pouvez spécifier plusieurs commandes afin de donner accès à celles-ci.
Séparer les commandes par des virgules.
Par exemple pour donner accès à nano et ls pour l’utilisateur malekalmorte :
malekalmorte ALL=/usr/bin/nano,/usr/bin/ls
Si vous avez beaucoup de commandes, le plus simple est d’utiliser un alias grâce à Cmnd_Alias.
Par exemple on créé l’alias SYSADMIN avec la commande apache2 et cat.
Puis on utilise pour donner accès au groupe systemadmin :
Cmnd_Alias SYSADMIN = /usr/sbin/apache2, /usr/bin/cat systemadmin ALL = (root) SYSADMIN
Créer un groupe d’utilisateur avec User_Alias
Vous pouvez aussi utiliser User_Alias afin de spécifier un groupe d’utilisateur.
Par exemple pour créer un groupe GroupAdmin :
User_Alias GROUPAdmin = malekalmorte, kevin, pierre
Puis on utilise ce dernier comme ceci :
GROUPAdmin ALL : (ALL) ALL
Il est aussi possible d’utiliser un groupe Linux (/etc/group), pour cela, utilisez %.
Par exemple pour utiliser le groupe admin :
%adm ALL : (ALL) ALL
Limiter les accès à un répertoire
Pour rappel, il est possible de limiter l’accès à des répertoires spécifiques.
Par exemple, ci-dessous on limite l’accès au répertoire home pour les commandes nano et ls.
malekalmorte ALL=/usr/bin/nano,/usr/bin/ls /home/malekalmorte/*
Limiter l’utilisation de paramètre
Autre exemple avec une limitation de chmod pour changer les permissions de dossiers.
www-data ALL=NOPASSWD:/bin/chmod [0-7][0-5][0-5] /var/www/html/*,/bin/chown utilisateur:groupe /var/www/html/*,/bin/chmod 755 /var/www/html2/myapp/*.txt
Limiter l’accès au réseau LAN
Vous pouvez limiter l’accès aux machines de votre réseau LAN en utilisant des alias de HOSTS.
Par exemple ci-dessous, on créé deux alias avec les noms du PC et les adresses IP.
Puis ont définit les accès.
Host_Alias HOSTS = monlinux,gaminpc Host_Alias HOSTIPS = 172.17.103.0/255.255.255.0 systemadmin HOSTS = (root) /usr/bin/cat /etc/shadow
Liens
- Sudo : comment utiliser le configurer sudoers sur Linux (Debian, Ubuntu, Mint …)
- Erreur « n’apparaît pas dans le fichier sudoers »
- sudo : quels sont les problèmes de sécurité
- 15 exemples utiles de Sudoers pour configurer sudo sur Linux
- Utilisateur et groupes Ubuntu : comment ajouter, supprimer
- Ubuntu : comment passer un utilisateur en administrateur
- Comment utiliser la commande su avec des exemples sur Linux
- Gérer les utilisateurs/groupes sur linux en ligne de commandes (adduser, addgroup, usermod, passwd, …)