Machines

sudo est installé sur toutes les machines.

On a choisi de ne pas utiliser le compte root, et préféré un compte utilisateur par administrateur.

Configuration

Le fichier /etc/sudoers n'a généralement pas à être édité. Il est préférable d'ajouter des fichiers dans /etc/sudoers.d en utilisant la commande :

sudo visudo -f /etc/sudoers.d/nom_du_fichier

Les modifications décrites ici ont été faites en grande partie pour des questions d'ergonomie, plus rarement pour des raisons de sécurité, mais quelques fois pour les deux à la fois.

/etc/sudoers.d/00 defaults

Defaults passwd_timeout=1
Defaults passwd_tries=2
Ces deux paramètres sont limitatifs par rapport aux réglages par défaut. Ils servent surtout à embêter les users peu concentrées.
Defaults requiretty
Interdit l'exécution de la commande sudo à partir d'autre chose qu'une console ou un terminal, notamment à partir de scripts cron ou cgi-bin. Plusieurs des fichiers sudoers suivants consistent à apporter des exceptions à ce paramètre.
Defaults use_pty
Fait que sudo s'exécutera dans un pseudo-terminal dédié qui sera fermé à la fin de l'exécution de la commande, ce qui rend impossible l'exécution d'un programme malicieux en tâche de fond dans le terminal d'où a été invoquée la commande.
Defaults !tty_tickets
Defaults timestamp_timeout=5
Le premier paramètre permet à l'user de ne pas avoir à s'authentifier lors de l'invocation de sudo dans un terminal si elle vient de le faire dans un autre. Cela rend plus souple l'utilisation conjointe de sudo et de screen (ou tmux), mais peut requérir de revoir à la baisse la durée de validité d'une authentification (timestamp_timeout), dont la valeur par défaut est de 15 minutes.
Defaults timestampdir=/run/sudo/ts
Defaults lecture_status_dir=/run/sudo/lectured
Defaults lecture_file=/etc/sudoers.d/rebooted.warn
Tant que le paramètre lecture conserve sa valeur par défaut (once), le stockage des horodatages sur un système de fichiers temporaire permet de se rendre compte assez vite (dès la première invocation de sudo) qu'un redémarrage du système a eu lieu, en affichant un avertissement. Il est alors envisageable (c'est ce qui a été fait ici) de modifier le paramètre lecture_file pour afficher, à la place de l'avertissement par défaut, et même en couleurs, une série d'instructions (mesures à prendre, logs à consulter, qui contacter, etc).
NOTE : le choix d'un système de fichiers temporaire pour stocker les cookies de lecture va à l'encontre de la recommandation de la page de manuel.
Defaults env_keep+="HOME"
Defaults env_keep+="SSH_TTY SSH_CLIENT SSH_CONNECTION"
Ces variables sont conservées dans l'environnement de sudo. Le cas de HOME est particulier en raison de ses effets de bord. Par exemple, sudo etckeeper commit utilisera (s'ils existent) les fichiers .gitconfig et .vimrc de l'user plutôt que ceux de root (s'ils existent) ou ceux du système. La contrepartie, c'est que des fichiers possédés par root peuvent aussi être créés dans ce même répertoire; cependant, il est possible de ne pas tenir compte de ce paramètre (env_keep+="HOME") en appelant sudo avec l'option -H. Ce paramètre a été ajouté parce qu'il n'existe aucune option permettant à l'user de n'exporter que cette variable : l'option -E, qui les exporte toutes ou presque, est fortement déconseillée pour des raisons de sécurité.

/etc/sudoers.d/01 nopasswd

Ce fichier indique à sudo quels groupes peuvent utiliser quelles commandes sans avoir à s'authentifier.

Groupe sudo

  • etckeeper unclean
  • etckeeper vcs status
  • etckeeper vcs log
  • etckeeper vcs log -p
  • etckeeper vcs diff

/etc/sudoers.d/02 gestion-adh

Ce fichier permet à l'user wiki-ca de gérer la liste e-mail ag@nos-oignons.net.

Defaults:wiki-ca !requiretty
Ce paramètre surcharge celui que l'on trouve dans 00_defaults justement pour permettre à cet user de lancer certaines commandes (sans mot de passe) depuis un script cron.

Le reste du fichier concerne la liste de commandes que l'user wiki-ca pourra utiliser en tant qu'user list sans avoir à s'authentifier :

  • list_members ag
  • add_members -r - ag
  • remove_members -f - ag

Autres exceptions à requiretty

/etc/sudoers.d/03_compta
Ce fichier permet au groupe wiki-ca de lancer un hook d'ikiwiki en tant qu'user website pour rafraîchir le site web.
/etc/sudoers.d/04_awstats
Ce fichier permet à root de provoquer la mise à jour des pages de statistiques du site en tant qu'user awstats avant la rotation des logs du serveur web.
/etc/sudoers.d/05_acmetool
Ce fichier permet à l'user acme de mettre à jour le certificat du site web avant expiration.

/etc/sudoers.d/rebooted.warn

Fichier dont le contenu sera donné à lire à l'user à la place de l'avertissement par défaut.

Ce fichier n'est pas à proprement parler un fichier de configuration de sudo ; s'il a pu être placé dans /etc/sudoers.d sans interférer avec la commande sudo, c'est parce que son nom contient un point.

Procédures