On a créé des comptes (7.1), des groupes (7.2), déployé des clés SSH (7.3). Reste une dernière question, tout aussi importante : une fois connecté, qu’est-ce que ce compte a le droit de faire ? C’est le rôle de sudo, et de son fichier de configuration, /etc/sudoers.
Le problème qu’on résout
Chez Nordika, avant Ansible, le réflexe courant pour donner des droits d’administration à un nouvel admin était de lui communiquer le mot de passe root, partagé entre plusieurs personnes. Un vrai problème de sécurité et de traçabilité : impossible de savoir qui a fait quoi, et un mot de passe root qui doit être changé partout dès qu’une seule personne quitte l’entreprise.
sudo corrige ça : chaque personne garde son propre compte, avec ses propres droits, et chaque action élevée est tracée sous son nom.
Méthode 1 : ajouter au groupe sudo (rapide, mais tout ou rien)
C’est ce qu’on a déjà vu en 7.1 :
- name: Donner les droits sudo complets à Alice
ansible.builtin.user:
name: alice
groups: sudo
append: yesSimple, efficace, mais radical : le compte obtient un accès sudo complet, sur toutes les commandes, avec (par défaut, selon la distribution) une demande de mot de passe à chaque utilisation. Suffisant pour un admin système à part entière, mais souvent trop large pour un besoin plus ciblé.
Méthode 2 : un fichier sudoers dédié, avec des droits précis
Pour un contrôle plus fin — par exemple, un compte de service qui ne doit avoir le droit de redémarrer qu’un seul service précis, sans accès root complet — on écrit un fichier de règles sudoers dédié, avec le module template déjà vu en section 5 :
# roles/utilisateurs/templates/sudoers_alice.j2
alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart apache2- name: Déployer une règle sudo précise pour Alice
ansible.builtin.template:
src: sudoers_alice.j2
dest: /etc/sudoers.d/alice
validate: "visudo -cf %s"
owner: root
group: root
mode: "0440"validate : le paramètre qui évite de casser sudo pour tout le monde
Remarquez validate: "visudo -cf %s". C’est un détail crucial, propre aux fichiers sudoers : une erreur de syntaxe dans /etc/sudoers (ou dans /etc/sudoers.d/) peut rendre sudo totalement inutilisable sur toute la machine, pour tout le monde, y compris vous.
validate demande à Ansible de tester le fichier fraîchement généré (%s étant remplacé par un chemin temporaire) avec l’outil officiel visudo -cf, avant de l’installer réellement à sa destination finale. Si la syntaxe est invalide, la tâche échoue proprement, et l’ancien fichier (ou l’absence de fichier) reste en place — plutôt qu’un /etc/sudoers.d/alice cassé qui bloquerait tous les accès sudo de la machine.
⚠️ Ce réflexe (
validate) n’est pas propre à sudoers : plusieurs modules Ansible l’acceptent (commecopyettemplateen général) dès que le fichier généré a une syntaxe stricte, dont une erreur peut avoir des conséquences graves. Le prendre en habitude sur tout fichier sensible est un bon réflexe de prudence.
mode: "0440" : des permissions strictes, pas un détail
Un fichier dans /etc/sudoers.d/ doit avoir des permissions précises (0440, lecture seule pour root et le groupe root) — sudo refuse de charger un fichier aux permissions trop permissives, par mesure de sécurité. C’est pour ça qu’on le précise explicitement dans la tâche, plutôt que de laisser les permissions par défaut du système.
Retirer un droit sudo
Pour un compte qui perd un accès élevé (changement de poste, par exemple), deux cas selon la méthode utilisée :
- name: Retirer Alice du groupe sudo
ansible.builtin.user:
name: alice
groups: ""
append: no
- name: Retirer le fichier sudoers dédié d'Alice
ansible.builtin.file:
path: /etc/sudoers.d/alice
state: absentQuelle méthode choisir ?
| Situation | Méthode |
|---|---|
| Admin système à part entière, besoin d’un accès large | Groupe sudo (méthode 1) |
| Compte de service, ou droit très ciblé sur une seule commande | Fichier sudoers dédié (méthode 2) |
| Traçabilité fine nécessaire (qui a le droit de faire quoi, précisément) | Fichier sudoers dédié (méthode 2) |
Ce qu’il faut retenir
sudoremplace le partage d’un mot de passe root : chaque compte garde son identité, chaque action élevée est tracée.- Le groupe
sudodonne un accès large et rapide ; un fichier/etc/sudoers.d/dédié permet un contrôle précis, commande par commande. validate: "visudo -cf %s"est indispensable sur tout fichier sudoers généré par Ansible — une erreur de syntaxe non détectée peut bloquer sudo pour toute la machine.mode: "0440"n’est pas optionnel :sudorefuse un fichier aux permissions trop ouvertes.