Le code présenté a été modifié enfin de faciliter la lecture et d’éviter une redondance trop importante entre les différentes phases de la configuration.
Le sens du code n’est nullement changé.
Lorsque l’utilisateur maverik est créé, il est directement inclue dans le groupe TOPGUN précédemment créé. On indique ensuite que le terminal de ce compte correspond au binaire bash déjà présent sur la machine. On génère ensuite un clé rsa de 4096 bits. Enfin, on lui donne un mot de passe d’utilisateur par défaut. Ce mot de passe subit un hash de façon à ce qu’il n’apparaisse pas en clair dans les fichiers de configuration de la machine debian.
---
# tasks file for users
- name: Creation utilisateurs + generation de clef rsa
user:
name: "{{ item.name }}"
groups: TOPGUN
append: yes
shell: /bin/bash
generate_ssh_key: yes
ssh_key_bits: 4096
ssh_key_file: .ssh/id_rsa
password: "{{ 'tmp' | password_hash('sha512') }}"
with_items:
- { name: "maverik" }
Afin de personnaliser les moyens d’authentifications au service ssh du serveur, un bloc Match est créé. Celui permet de donner à un ou plusieurs groupes/utilisateurs des règles spécifiques de configuration ssh. Ici, seul le cas des moyens d’authentification est traité.
Grâce au module ansible blockinfile, il est possible d’ajouter dans un fichier (ici sshd_config) un bloc de text, éventuellement indenté, identifié par ses balises de début, et de fin. Ces balises doivent être uniques de façon à ce qu’ansible puisse les reconnaître avant d’ajouter le bloc de texte au fichier. S’il reconnait les balises, il vérifie les différences de texte entre le bloc du fichier, et celui du script. S’ilS sont identiques, aucune modification n’est apportée, sinon le bloc est remplacé. De cette façon, ansible garantit la non-duplication des blocs de texte.
De ce cas précis, on ajoute un bloc dans le fichier sshd_config, qui va permettre de spécifier pour l’utilisateur maverik les moyens d’authentification requis.
La ligne suivante permet de spécifier la configuration du compte maverik:
Match User maverik
# règles
La ligne suivante permet de contraindre l’authentification de l’utilisateur maverik par ssh aux services PAM (ici, seulement google-authenticator comme vu précédemment):
AuthenticationMethods keyboard-interactive:pam
Une fois la modification du fichier sshd_config effectuée, il est conseillé de s’assurer directement de la validité de la modification apportée avec le paramètre de blockinfile:
validate: "/usr/sbin/sshd -T -f %s"
Enfin, comme des fichiers de configuration sshd on été modifiés, on s’assure de bien redémarrer le service en fin d’exécution du script ansible grâce au handler:
notify:
# On relance le service ssh (sshd)
- Handler_restart_ssh
Voici le code complet détaillé dans cette partie:
---
# tasks file for roles/openssh/
# Définition des règles d'accès ssh au serveur par utilisateur et/ou groupe
- name: Configuration ssh specifique - "{{ item.name }}"
blockinfile:
path: /etc/ssh/sshd_config
marker: "# {mark} ANSIBLE MANAGED BLOCK - {{ item.name }}"
block: |
Match {{ item.header }}
{{ item.config_lines }}
backup: yes
validate: "/usr/sbin/sshd -T -f %s"
with_items:
# Configuration spécifique à l'utilisateur maverik
- { name: "maverik", header: "User maverik", config_lines: "PasswordAuthentication no\n\tPubkeyAuthentication no\n\tAuthenticationMethods keyboard-interactive:pam"}
notify:
# On relance le service ssh (sshd)
- Handler_restart_ssh
L’utilisateur maverik a accès uniquement à 3 commandes en tant que root. Afin qu’il puisse exécuter ces commandes convenablement, il faut l’ajouter aux fichiers des sudoers (ici /etc/sudoers), en précisant à quelles commandes il a accès:
maverik ALL=NOPASSWD: /sbin/reboot, /usr/bin/apt update, /usr/bin/apt full-upgrade
Pour cela, on a utilisé le module ansible lineinfile qui permet d’ajouter une ligne à la fin d’un fichier si elle n’est pas déjà présente.
Voici le code complet détaillé dans cette partie:
- name: Ajout de permissions sudo
lineinfile:
path: /etc/sudoers
line: "{{ item.line }}"
backup: yes
state: present
with_items:
# Limiter l'utilisation du sudo pour l'utilisateur maverik à 3 commandes
- { line: 'maverik ALL=NOPASSWD: /sbin/reboot, /usr/bin/apt update, /usr/bin/apt full-upgrade' }
# Permettre à l'utilisateur charlie de sudo n'importe quelle commande.
- { line: 'charlie ALL=(ALL:ALL) ALL' }
Lancer la commande:
$ ssh -v maverik@<IP>
La première demande que formule le serveur ssh est l’authentification via google authenticator (ligne 2) dont le code est demandé à la dernière ligne. Il faut saisir le code google authenticator précédemment généré et récupéré via le code QR:

L’authentification s’est déroulée avec succès (ligne 2 et ligne 3):

Voici la démonstration de la commande:
$ sudo apt update

Voici la démonstration de la commande:
$ sudo apt full-upgrade
