willshersystems.sshd
Serveur OpenSSH
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. (voirmeta/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
- Debian wheezy, jessie, stretch, buster, bullseye, bookworm
- Distributions dérivées d'EL 6, 7, 8, 9, 10
- Toutes les versions de Fedora
- Dernière version d'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.
OpenSSH SSH daemon configuration
ansible-galaxy install willshersystems.sshd