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é.
Tout d’abord il faut installer le package libpam-google-authenticator afin de pouvoir utiliser la méthode d’authentification google authenticator:
---
# tasks file for roles/openssh/
- name: Installation de Google authenticator
apt:
name: libpam-google-authenticator
update_cache: yes
Une fois l’installation terminée, il faut rajouter dans le fichier pam.d/sshd relatif à l’authentification, la ligne qui permettre au service ssh de considéré l’authentification google authenticator. Cet ajout est réalisé avec le module ansible lineinfile, qui permet d’ajouter un ligne si celle-ci n’est pas déjà présente dans le fichier:
# Ajout de la ligne nécessaire pour l'utilisation de google authenticator dans le fichier de configuration pam
- name: Configuration pam (ajout de ligne)
lineinfile:
path: /etc/pam.d/sshd
line: "{{ item.line }}"
backup: yes
with_items:
- { line: "auth required pam_google_authenticator.so" }
notify:
# On relance le service ssh (sshd)
- Handler_restart_ssh
Afin de désactiver l’authentification par mots de passe lié à pam, il suffit de commenter la ligne "^(#)?(@include common-auth*)" (regexp):
# Commentaire de l'authentification classique afin d'éviter qu'un mot de passe soit demandé avant l'authentification google.
- name: Configuration pam (ligne retiree)
lineinfile:
path: /etc/pam.d/sshd
regex: "^(#*)?(@include common-auth*)"
line: '# \2'
backrefs: yes
backup: yes
notify:
# On relance le service ssh (sshd)
- Handler_restart_ssh
On configure ensuite le fichier sshd_config avec les paramètres par défaut:
Pour chacune des modifications, on la test avec la commande:
validate: 'sshd -T -f %s'
- name: Configuration ssh
lineinfile:
# Modification du fichier principal de gestion des connexions ssh sur le serveur.
path: /etc/ssh/sshd_config
regex: "{{ item.regex }}"
line: "{{ item.value }}"
create: yes
backup: yes
backrefs: yes
# On vérifie que la configuration est valide après chaque modification.
validate: 'sshd -T -f %s'
with_items:
# Force le port à 22
- { regex: "^(#*)?(Port)", value: '\2 22' }
# Considère toutes les adresses IPv4
- { regex: "^(#*)?(ListenAddress)", value: '\2 0.0.0.0' }
# Durcissement des règles de journalisation
- { regex: "^(#*)?(SyslogFacility)", value: '\2 AUTH' }
# QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3
- { regex: "^(#*)?(LogLevel)", value: '\2 DEBUG3' }
# Interdit la connexion en tant que root
- { regex: "^(#*)?(PermitRootLogin)", value: '\2 no' }
# Gestion globale des paramètres ssh
- { regex: "^(#*)?(PubkeyAuthentication)", value: '\2 yes' }
- { regex: "^(#*)?(PasswordAuthentication)", value: '\2 no' }
# ChallengeResponseAuthentication: Indispensable pour l'authentification google
- { regex: "^(#*)?(ChallengeResponseAuthentication)", value: '\2 yes' }
# UsePAM (Pluggable Authentication Module): Indispensable pour l'authentification google
- { regex: "^(#*)?(UsePAM)", value: '\2 yes' }
notify:
# On relance le service ssh (sshd)
- Handler_restart_ssh