15 exemples utiles de Sudoers pour configurer sudo sur Linux

malekalmorte

Date création :

18 décembre 2022

Dernière modification :

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.

15 exemples utiles de Sudoers pour configurer sudo sur Linux

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 sudo

log.json donne encore plus d’informations.

Les log et journaux de sudo

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

A propros de malekalmorte

malekal-site-logo-150

Passionné par l'informatique depuis très jeune, j'aide les internautes sur les forums depuis 2005 pour résoudre leurs tracas informatiques.
Je vous propose par la même occasion ce site avec de nombreux tutoriels pour vous aider aussi à résoudre de manière autonome les problèmes informatiques du quotidien.