willshersystems.sshd

Serveur OpenSSH

Ansible Lint Ansible Galaxy

Ce rôle configure le démon OpenSSH. Il :

  • Configure par défaut le démon SSH avec les valeurs par défaut normales du système d'exploitation.
  • Fonctionne sur diverses distributions UN*X.
  • Peut être configuré par un dictionnaire ou des variables simples.
  • Prend en charge les ensembles de Match.
  • Prend en charge toutes les options de sshd_config. Les modèles sont générés de manière programmatique. (voir meta/make_option_lists)
  • Teste le sshd_config avant de recharger sshd.

AVERTISSEMENT Une mauvaise configuration de ce rôle peut vous verrouiller hors de votre serveur ! Veuillez tester votre configuration et son interaction avec la configuration de vos utilisateurs avant de l'utiliser en production !

AVERTISSEMENT Digital Ocean permet l'accès root avec des mots de passe via SSH sur Debian et Ubuntu. Ce n'est pas le paramètre par défaut assigné par ce module - il va définir PermitRootLogin without-password, ce qui permettra un accès par clé SSH mais pas par mot de passe simple. Si vous avez besoin de cette fonctionnalité, assurez-vous de définir sshd_PermitRootLogin yes pour ces hôtes.

Exigences

Testé sur :

  • Ubuntu precise, trusty, xenial, bionic, focal, jammy, noble
    • Run tests on Ubuntu latest
  • Debian wheezy, jessie, stretch, buster, bullseye, bookworm
    • Run tests on Debian
  • Distributions dérivées d'EL 6, 7, 8, 9, 10
    • Run tests on CentOS
  • Toutes les versions de Fedora
    • Run tests on Fedora latest
  • Dernière version d'Alpine
    • Run tests on Alpine
  • FreeBSD 10.1
  • OpenBSD 6.0
  • AIX 7.1, 7.2
  • OpenWrt 21.03

Il fonctionnera probablement sur d'autres versions et un support plus direct via des fichiers appropriés dans vars/ est le bienvenu.

Exigences optionnelles

Si vous souhaitez utiliser des fonctionnalités avancées de ce rôle qui peuvent configurer le pare-feu et selinux pour vous, ce qui est principalement utile lorsqu'un port personnalisé est utilisé, le rôle nécessite des collections supplémentaires spécifiées dans meta/collection-requirements.yml. Celles-ci ne sont pas installées automatiquement. Si vous souhaitez gérer des systèmes rpm-ostree, des collections supplémentaires sont nécessaires. Vous devez les installer ainsi :

ansible-galaxy install -vv -r meta/collection-requirements.yml

Pour plus d'informations, voir les options sshd_manage_firewall et sshd_manage_selinux ci-dessous, ainsi que la section rpm-ostree. Cette fonctionnalité supplémentaire est supportée uniquement sur les systèmes Linux basés sur Red Hat.

Variables de rôle

Variables principales du rôle

Non configuré, ce rôle fournira un sshd_config qui correspond à la valeur par défaut du système d'exploitation, sans les commentaires et dans un ordre différent.

sshd_enable

Si défini sur false, le rôle sera complètement désactivé. Par défaut, c'est true.

sshd_skip_defaults

Si défini sur true, les valeurs par défaut ne seront pas appliquées. Cela signifie que vous devez avoir un ensemble complet de valeurs de configuration via soit le dictionnaire sshd, soit les variables sshd_Key. Par défaut, c'est false à moins que sshd_config_namespace ne soit défini ou que sshd_config_file pointe vers un répertoire de drop-in pour éviter une inclusion récursive.

sshd_manage_service

Si défini sur false, le service/démon ne sera pas géré du tout, c'est-à-dire qu'il ne tentera pas de s'activer au démarrage ou de démarrer ou recharger le service. Par défaut, c'est true sauf si : exécution dans un conteneur docker (il est supposé qu'ansible est utilisé pendant la phase de construction) ou AIX (le module service d'Ansible ne supporte pas actuellement enabled pour AIX)

sshd_allow_reload

Si défini sur false, un rechargement de sshd ne se produira pas lors d'un changement. Cela peut aider au dépannage. Vous devrez recharger sshd manuellement si vous souhaitez appliquer la configuration modifiée. Par défaut, cela a la même valeur que sshd_manage_service. (Sauf sur AIX, où sshd_manage_service est par défaut false, mais sshd_allow_reload est par défaut true)

sshd_install_service

Si défini sur true, le rôle installera des fichiers de service pour le service ssh. Par défaut, c'est false.

Les modèles pour les fichiers de service à utiliser sont pointés par les variables

  • sshd_service_template_service (par défaut : templates/sshd.service.j2)
  • sshd_service_template_at_service (par défaut : templates/[email protected])
  • sshd_service_template_socket (par défaut : templates/sshd.socket.j2)

Avec ces variables, vous pouvez utiliser vos propres modèles personnalisés. Avec les modèles par défaut ci-dessus, le nom du service ssh installé sera fourni par la variable sshd_service.

sshd_manage_firewall

Si défini sur true, le(s) port(s) SSH seront ouverts dans le pare-feu. Notez que cela fonctionne uniquement sur les systèmes d'exploitation basés sur Red Hat. La valeur par défaut est false.

REMARQUE : sshd_manage_firewall est limité à ajouter des ports. Il ne peut pas être utilisé pour supprimer des ports. Si vous souhaitez supprimer des ports, vous devrez utiliser directement le rôle système de pare-feu.

sshd_manage_selinux

Si défini sur true, selinux sera configuré pour permettre à sshd d'écouter sur le(s) port(s) SSH donné(s). Notez que cela fonctionne uniquement sur les systèmes d'exploitation basés sur Red Hat. La valeur par défaut est false.

REMARQUE : sshd_manage_selinux est limité à ajouter des politiques. Il ne peut pas être utilisé pour supprimer des politiques. Si vous souhaitez supprimer des ports, vous devrez utiliser directement le rôle système selinux.

sshd

Un dictionnaire contenant la configuration. Par exemple :

sshd:
  Compression: delayed
  ListenAddress:
    - 0.0.0.0

sshd_<NomOption>

Des variables simples peuvent être utilisées au lieu d'un dictionnaire. Les valeurs simples remplacent les valeurs du dictionnaire. Par exemple :

sshd_Compression: off

Dans tous les cas, les booléens sont correctement rendus sous forme de oui et non dans la configuration sshd. Des listes peuvent être utilisées pour des éléments de configuration multilignes. Par exemple :

sshd_ListenAddress:
  - 0.0.0.0
  - '::'

Cela se rendra sous la forme :

ListenAddress 0.0.0.0
ListenAddress ::

sshd_match, sshd_match_1 à sshd_match_9

Une liste de dictionnaires ou juste un dictionnaire pour un bloc Match. Notez que ces variables ne remplacent pas les blocs de correspondance tels que définis dans le dictionnaire sshd. Toutes les sources seront reflétées dans le fichier de configuration résultant. L'utilisation de la variante sshd_match_* est dépréciée et n'est plus recommandée.

sshd_backup

Lorsqu'il est défini sur false, le fichier original sshd_config n'est pas sauvegardé. La valeur par défaut est true.

sshd_sysconfig

Sur les systèmes basés sur RHEL, le sysconfig est utilisé pour configurer plus de détails du service sshd. S'il est défini sur true, ce rôle gérera également le fichier de configuration /etc/sysconfig/sshd basé sur les configurations suivantes. La valeur par défaut est false.

sshd_sysconfig_override_crypto_policy

Sur les systèmes basés sur RHEL8, cela peut être utilisé pour remplacer la politique de crypto-système globale en le définissant sur true. Sans cette option, les modifications des chiffrements, MAC, algorithmes de clés publiques n'auront aucun effet sur le service résultant dans RHEL8. La valeur par défaut est false.

sshd_sysconfig_use_strong_rng

Sur les systèmes basés sur RHEL (avant RHEL9), cela peut être utilisé pour forcer sshd à reseeder le générateur de nombres aléatoires openssl avec la quantité d'octets donnée en argument. La valeur par défaut est 0, ce qui désactive cette fonctionnalité. Il n'est pas recommandé de l'activer si le système n'a pas de générateur de nombres aléatoires matériel.

sshd_config_file

Le chemin où la configuration openssh produite par ce rôle doit être enregistrée. Ceci est surtout utile lors de la génération de fragments de configuration à inclure depuis un répertoire drop-in (valeur par défaut dans Fedora et RHEL9).

Lorsque ce chemin pointe vers un répertoire drop-in (comme /etc/ssh/sshd_config.d/00-custom.conf), le fichier de configuration principal (défini avec la variable sshd_main_config_file) est vérifié pour contenir une directive Include appropriée.

sshd_main_config_file

Lorsque le système utilise un répertoire drop-in, cette option peut être utilisée pour définir un chemin vers le fichier de configuration principal et vous permet de configurer uniquement le fichier de configuration drop-in à l'aide de sshd_config_file. Cela est utile dans les cas où vous devez configurer un deuxième service sshd indépendant avec un fichier de configuration différent. C'est également le fichier utilisé dans le fichier de service.

Sur les systèmes sans répertoire drop-in, cela par défaut à None. Sinon, cela par défaut à /etc/ssh/sshd_config. Lorsque le sshd_config_file est défini en dehors du répertoire drop-in (son répertoire parent n'est pas sshd_main_config_file ~ '.d'), cette variable est ignorée.

sshd_config_namespace

Par défaut (null), le rôle définit tout le contenu du fichier de configuration y compris les valeurs par défaut du système. Vous pouvez utiliser cette variable pour invoquer ce rôle depuis d'autres rôles ou de plusieurs endroits dans un même playbook comme alternative à l'utilisation d'un répertoire drop-in. sshd_skip_defaults est ignoré et aucune valeur par défaut du système n'est utilisée dans ce cas.

Lorsque cette variable est définie, le rôle place la configuration que vous spécifiez dans des fragments de configuration dans un fichier de configuration existant sous le namespace donné. Vous devez sélectionner différents namespaces lors de l'invocation du rôle plusieurs fois.

Notez que les limitations du fichier de configuration openssh s'appliquent toujours. Par exemple, seule la première option spécifiée dans un fichier de configuration est efficace pour la plupart des variables.

Techniquement, le rôle place des extraits dans des blocs Match all, à moins qu'ils ne contiennent d'autres blocs de correspondance, pour s'assurer qu'ils sont appliqués indépendamment des précédents blocs de correspondance dans le fichier de configuration existant. Cela permet de configurer n'importe quelles options non conflictuelles provenant de différentes invocations de rôles.

sshd_config_owner, sshd_config_group, sshd_config_mode

Utilisez ces variables pour définir la propriété et les autorisations du fichier de configuration openssh produit par ce rôle.

sshd_verify_hostkeys

Par défaut (auto), cette liste contient toutes les clés hôtes présentes dans le fichier de configuration produit. S'il n'y en a aucune, la liste par défaut d'OpenSSH sera utilisée après exclusion des clés non approuvées par FIPS en mode FIPS. Les chemins sont vérifiés pour leur présence et de nouvelles clés sont générées si elles sont manquantes. De plus, les autorisations et les propriétaires de fichiers sont définis sur des valeurs par défaut sécurisées. Ceci est utile si le rôle est utilisé dans la phase de déploiement pour s'assurer que le service peut démarrer du premier coup.

Pour désactiver cette vérification, définissez ceci sur une liste vide.

sshd_hostkey_owner, sshd_hostkey_group, sshd_hostkey_mode

Utilisez ces variables pour définir la propriété et les autorisations des clés hôtes de la liste ci-dessus.

Variables secondaires du rôle

Ces variables sont utilisées par les internes du rôle et peuvent être utilisées pour remplacer les valeurs par défaut qui correspondent à chaque plateforme supportée. Elles ne sont pas testées et ne sont généralement pas nécessaires, car le rôle les déterminera en fonction du type de système d'exploitation.

sshd_packages

Utilisez cette variable pour remplacer la liste par défaut des paquets à installer.

sshd_binary

Le chemin vers l'exécutable openssh.

sshd_service

Le nom du service openssh. Par défaut, cette variable contient le nom du service ssh que la plateforme cible utilise. Mais elle peut aussi être utilisée pour définir le nom d'un service ssh personnalisé lorsque la variable sshd_install_service est utilisée.

sshd_sftp_server

Chemin par défaut vers l'exécutable du serveur sftp.

Variables exportées par le rôle

sshd_has_run

Cette variable est définie sur true après que le rôle a été exécuté avec succès.

Configurer l'authentification par certificat SSH

Pour configurer l'authentification par certificat SSH sur votre serveur SSH, vous devez fournir au moins la clé CA de l'utilisateur de confiance, qui sera utilisée pour valider les certificats des clients. Ceci est fait avec la variable sshd_trusted_user_ca_keys_list.

Si vous devez mapper certains des principaux autorisés aux utilisateurs du système, vous pouvez le faire à l'aide de la variable sshd_principals.

Variables supplémentaires

sshd_trusted_user_ca_keys_list

Liste des clés publiques CA d'utilisateur de confiance au format OpenSSH (une ligne) (obligatoire).

sshd_trustedusercakeys_directory_owner, shsd_trustedusercakeys_directory_group, sshd_trustedusercakeys_directory_mode

Utilisez ces variables pour définir la propriété et les autorisations pour le répertoire des clés CA d'utilisateur de confiance. Les valeurs par défaut sont respectivement root, root et 0755.

sshd_trustedusercakeys_file_owner, shsd_trustedusercakeys_file_group, sshd_trustedusercakeys_file_mode

Utilisez ces variables pour définir la propriété et les autorisations du fichier des clés CA d'utilisateur de confiance. Les valeurs par défaut sont respectivement root, root et 0640.

sshd_principals

Un dictionnaire contenant les principes pour les utilisateurs dans le système (optionnel). Par exemple :

sshd_principals:
  admin:
    - frontend-admin
    - backend-admin
  somelinuxuser:
    - some-principal-defined-in-certificate

sshd_authorizedprincipals_directory_owner, shsd_authorizedprincipals_directory_group, sshd_authorizedprincipals_directory_mode

Utilisez ces variables pour définir la propriété et les autorisations pour le répertoire des Principes Autorisés. Les valeurs par défaut sont respectivement root, root et 0755.

sshd_authorizedprincipals_file_owner, shsd_authorizedprincipals_file_group, sshd_authorizedprincipals_file_mode

Utilisez ces variables pour définir la propriété et les autorisations pour le fichier des Principes Autorisés. Les valeurs par défaut sont respectivement root, root et 0644.

Configuration supplémentaire

Le serveur SSH a besoin de ces informations stockées dans des fichiers, donc en plus des variables ci-dessus, les options de configuration respectives TrustedUserCAKeys (obligatoire) et AuthorizedPrincipalsFile (optionnelle) doivent être présentes dans le dictionnaire sshd lors de l'invocation du rôle. Par exemple :

sshd:
  TrustedUserCAKeys: /etc/ssh/path-to-trusted-user-ca-keys/trusted-user-ca-keys.pub
  AuthorizedPrincipalsFile: "/etc/ssh/path-to-auth-principals/auth_principals/%u"

Pour en savoir plus sur les certificats SSH, voici un bon tutoriel sur les certificats SSH, depuis wikibooks.

Pour comprendre les principes et configurer les certificats SSH avec Vault, voici un tutoriel bien expliqué de Hashicorp.

Dépendances

Aucune

Pour les tests, la collection ansible.posix est requise pour le rôle mount afin d'émuler le mode FIPS.

Exemple de Playbook

DANGER ! Cet exemple est destiné à montrer l'éventail de configurations que ce rôle fournit. Le lancement de celui-ci risque fortement de briser votre accès SSH au serveur !

---
- hosts: all
  vars:
    sshd_skip_defaults: true
    sshd:
      Compression: true
      ListenAddress:
        - "0.0.0.0"
        - "::"
      GSSAPIAuthentication: false
      Match:
        - Condition: "Group user"
          GSSAPIAuthentication: true
    sshd_UsePrivilegeSeparation: false
    sshd_match:
        - Condition: "Group xusers"
          X11Forwarding: true
  roles:
    - role: willshersystems.sshd

Cela donne :

# Ansible managed: ...
Compression yes
GSSAPIAuthentication no
UsePrivilegeSeparation no
Match Group user
  GSSAPIAuthentication yes
Match Group xusers
  X11Forwarding yes

Depuis Ansible 2.4, le rôle peut être invoqué en utilisant le mot-clé include_role, par exemple :

---
- hosts: all
  become: true
  tasks:
  - name: "Configurer sshd"
    include_role:
      name: willshersystems.sshd
    vars:
      sshd_skip_defaults: true
      sshd:
        Compression: true
        ListenAddress:
          - "0.0.0.0"
          - "::"
        GSSAPIAuthentication: false
        Match:
          - Condition: "Group user"
            GSSAPIAuthentication: true
      sshd_UsePrivilegeSeparation: false
      sshd_match:
          - Condition: "Group xusers"
            X11Forwarding: true

Vous pouvez simplement ajouter un extrait de configuration avec l'option sshd_config_namespace :

---
- hosts: all
  tasks:
  - name: Configurer sshd pour accepter quelques variables d'environnement utiles
    include_role:
      name: willshersystems.sshd
    vars:
      sshd_config_namespace: accept-env
      sshd:
        # il y a quelques variables d'environnement utiles à accepter
        AcceptEnv:
          LANG
          LS_COLORS
          EDITOR

L'extrait suivant sera ajouté au fichier de configuration par défaut (s'il n'est pas déjà présent) :

# BEGIN sshd system role managed block: namespace accept-env
Match all
  AcceptEnv LANG LS_COLORS EDITOR
# END sshd system role managed block: namespace accept-env

D'autres exemples de playbooks peuvent être trouvés dans le répertoire examples/.

Génération de modèles

Les modèles sshd_config.j2 et sshd_config_snippet.j2 sont générés de manière programmatique par les scripts dans meta. De nouvelles options doivent être ajoutées au options_body et/ou options_match.

Pour régénérer les modèles, depuis le répertoire meta/ exécutez : ./make_option_lists

rpm-ostree

Voir README-ostree.md

Licence

LGPLv3

Auteurs

Matt Willsher matt@willsher.systems

© 2014,2015 Willsher Systems Ltd.

Jakub Jelen jjelen@redhat.com

© 2020 - 2024 Red Hat, Inc.

Installer
ansible-galaxy install willshersystems.sshd
Licence
lgpl-3.0
Téléchargements
321.8k
Propriétaire
Cloud Architecture & Automation