Configuration globale

Configuration globale SSH

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é.

PAM

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

SSHD

On configure ensuite le fichier sshd_config avec les paramètres par défaut:

  • On met le port d’écoute sur 22
  • On prend en compte toutes les adresses IPv4
  • On Durcit les règle de journalisation à AUTH et DEBUG3 (niveau maximum de journalisation)
  • On interdit l’accès au service aux comptes root
  • On active l’authentification avec clé publique
  • On interdit l’authentification avec password
  • On autorise les challenges response de façon à permettre à google authenticator de fonctionner
  • On active l’utilisation de PAM

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