willshersystems.sshd
OpenSSH Server
Diese Rolle konfiguriert den OpenSSH-Daemon. Sie:
- Konfiguriert standardmäßig den SSH-Daemon mit den normalen OS-Standardwerten.
- Funktioniert über verschiedene
UN*X
-Distributionen hinweg. - Kann durch ein Dictionary oder einfache Variablen konfiguriert werden.
- Unterstützt Match-Sets.
- Unterstützt alle
sshd_config
-Optionen. Vorlagen werden programmatisch generiert. (siehemeta/make_option_lists
) - Testet die
sshd_config
, bevor sshd neu geladen wird.
WARNUNG Eine falsche Konfiguration dieser Rolle kann dazu führen, dass Sie den Zugriff auf Ihren Server verlieren! Bitte testen Sie Ihre Konfiguration und ihre Interaktion mit der Konfiguration Ihrer Benutzer, bevor Sie sie in der Produktion verwenden!
WARNUNG Digital Ocean erlaubt Root-Zugriff mit Passwörtern via SSH auf Debian und
Ubuntu. Dies ist nicht die Standardkonfiguration dieses Moduls - es wird
PermitRootLogin without-password
gesetzt, was den Zugang über SSH-Schlüssel, aber nicht
über einfache Passwörter erlaubt. Wenn Sie diese Funktionalität benötigen, stellen Sie sicher, dass Sie
sshd_PermitRootLogin yes
für diese Hosts setzen.
Anforderungen
Getestet auf:
- Ubuntu: precise, trusty, xenial, bionic, focal, jammy, noble
- Debian: wheezy, jessie, stretch, buster, bullseye, bookworm
- EL 6, 7, 8, 9, 10 abgeleitete Distributionen
- Alle Fedora-Versionen
- Aktuelles Alpine
- FreeBSD 10.1
- OpenBSD 6.0
- AIX 7.1, 7.2
- OpenWrt 21.03
Es wird wahrscheinlich auch mit anderen Distributionen funktionieren, und direkte Unterstützung über geeignete vars/ Dateien ist willkommen.
Optionale Anforderungen
Wenn Sie die erweiterte Funktionalität dieser Rolle nutzen möchten, die Firewall und SELinux für Sie konfigurieren kann, was hauptsächlich nützlich ist, wenn ein benutzerdefinierter Port verwendet wird, benötigt die Rolle zusätzliche Sammlungen, die in
meta/collection-requirements.yml
angegeben sind. Diese werden nicht automatisch installiert.
Wenn Sie rpm-ostree
Systeme verwalten möchten, sind zusätzliche Sammlungen erforderlich. Sie müssen sie wie folgt installieren:
ansible-galaxy install -vv -r meta/collection-requirements.yml
Für weitere Informationen siehe die Optionen sshd_manage_firewall
und sshd_manage_selinux
unten sowie den Abschnitt zu rpm-ostree
. Diese zusätzliche Funktionalität wird nur auf Red Hat-basierten Linux-Systemen unterstützt.
Rollenvariablen
Hauptrollenvariablen
Unkonfiguriert stellt diese Rolle eine sshd_config
zur Verfügung, die den OS-Standardeinstellungen entspricht, abzüglich der Kommentare und in einer anderen Reihenfolge.
sshd_enable
Wenn auf false gesetzt, wird die Rolle vollständig deaktiviert. Standardeinstellung ist true.
sshd_skip_defaults
Wenn auf true gesetzt, werden keine Standardwerte angewendet. Das bedeutet, dass Sie ein komplettes Set von Konfigurationsstandards entweder über das sshd
-Dictionary oder
sshd_Key
-Variablen haben müssen. Standardeinstellung ist false, es sei denn, sshd_config_namespace
ist gesetzt oder sshd_config_file
zeigt auf ein Drop-in-Verzeichnis, um rekursive Einfügungen zu vermeiden.
sshd_manage_service
Wenn auf false gesetzt, wird der Dienst/Dämon überhaupt nicht verwaltet, d.h. es wird nicht versucht, ihn beim Booten zu aktivieren oder den Dienst zu starten oder neu zu laden. Standardeinstellung ist true, es sei denn: Es wird innerhalb eines Docker-Containers ausgeführt (es wird angenommen, dass Ansible während der Bauphase verwendet wird) oder AIX (Das Ansible service
-Modul unterstützt derzeit enabled
nicht für AIX).
sshd_allow_reload
Wenn auf false gesetzt, erfolgt kein Reload von sshd bei Änderungen. Dies kann bei der Fehlersuche hilfreich sein. Sie müssen sshd manuell neu laden, wenn Sie die geänderte Konfiguration anwenden möchten. Die Standardeinstellung entspricht dem gleichen Wert wie sshd_manage_service
.
(Außer auf AIX, wo sshd_manage_service
standardmäßig false ist, aber sshd_allow_reload
standardmäßig true ist).
sshd_install_service
Wenn auf true gesetzt, installiert die Rolle Dienstdateien für den SSH-Dienst. Standardeinstellung ist false.
Die Vorlagen für die zu verwendenden Dienstdateien werden durch die Variablen
sshd_service_template_service
(Standard:templates/sshd.service.j2
)sshd_service_template_at_service
(Standard:templates/[email protected]
)sshd_service_template_socket
(Standard:templates/sshd.socket.j2
)
festgelegt. Mit diesen Variablen können Sie Ihre eigenen benutzerdefinierten Vorlagen verwenden. Mit den oben genannten Standardvorlagen wird der Name des installierten SSH-Dienstes durch die Variable sshd_service
bereitgestellt.
sshd_manage_firewall
Wenn auf true gesetzt, werden die SSH-Port(s) in der Firewall geöffnet. Beachten Sie, dass dies nur auf Red Hat-basierten OS funktioniert. Die Standardeinstellung ist false.
HINWEIS: sshd_manage_firewall
ist auf Hinzufügen von Ports beschränkt. Es kann nicht zum Entfernen von Ports verwendet werden. Wenn Sie Ports entfernen möchten, müssen Sie die Firewall-Systemrolle direkt verwenden.
sshd_manage_selinux
Wenn auf true gesetzt, wird SELinux konfiguriert, um sshd zu erlauben, an den angegebenen SSH-Port(s) zu hören. Beachten Sie, dass dies nur für Red Hat-basierte OS funktioniert. Die Standardeinstellung ist false.
HINWEIS: sshd_manage_selinux
ist auf Hinzufügen von Richtlinien beschränkt. Es kann nicht zum Entfernen von Richtlinien verwendet werden. Wenn Sie Ports entfernen möchten, müssen Sie die SELinux-Systemrolle direkt verwenden.
sshd
Ein Dictionary, das die Konfiguration enthält. z.B.
sshd:
Compression: delayed
ListenAddress:
- 0.0.0.0
sshd_<OptionName>
Einfache Variablen können anstelle eines Dictionaries verwendet werden. Einfache Werte überschreiben die Dictionary-Werte. z.B.:
sshd_Compression: off
In allen Fällen werden Booleans korrekt als ja und nein in der sshd-Konfiguration gerendert. Listen können für mehrzeilige Konfigurationselemente verwendet werden. z.B.
sshd_ListenAddress:
- 0.0.0.0
- '::'
Wird gerendert als:
ListenAddress 0.0.0.0
ListenAddress ::
sshd_match, sshd_match_1 bis sshd_match_9
Eine Liste von Dictionaries oder einfach ein Dictionary für einen Match-Block. Beachten Sie, dass diese Variablen die Match-Blöcke, die im sshd
-Dictionary definiert sind, nicht überschreiben. Alle Quellen werden in der resultierenden Konfigurationsdatei reflektiert. Die Verwendung der sshd_match_*
-Variante ist veraltet und wird nicht mehr empfohlen.
sshd_backup
Wenn auf false gesetzt, wird die ursprüngliche sshd_config
-Datei nicht gesichert. Die Standardeinstellung ist true.
sshd_sysconfig
Auf RHEL-basierten Systemen wird die Sysconfig verwendet, um mehr Details des sshd-Dienstes zu konfigurieren. Wenn auf true gesetzt, verwaltet diese Rolle auch die Konfigurationsdatei /etc/sysconfig/sshd
basierend auf den folgenden Konfigurationen. Die Standardeinstellung ist false.
sshd_sysconfig_override_crypto_policy
In RHEL8-basierten Systemen kann dies verwendet werden, um die systemweite Crypto-Policy zu überschreiben, indem es auf true gesetzt wird. Ohne diese Option haben Änderungen an Chiffren, MACs, öffentlichen Schlüsselalgorithmen keinen Einfluss auf den resultierenden Dienst in RHEL8. Die Standardeinstellung ist false.
sshd_sysconfig_use_strong_rng
In RHEL-basierten Systemen (vor RHEL9) kann dies verwendet werden, um sshd dazu zu bringen, den OpenSSL-Zufallszahlengenerator mit der angegebenen Anzahl an Bytes als Argument neu zu starten. Die Standardeinstellung ist 0, was diese Funktionalität deaktiviert. Es wird nicht empfohlen, dies zu aktivieren, wenn das System keinen Hardware-Zufallszahlengenerator besitzt.
sshd_config_file
Der Pfad, unter dem die von dieser Rolle erzeugte OpenSSH-Konfiguration gespeichert werden soll. Dies ist hauptsächlich nützlich, wenn Konfigurationsausschnitte von einem Drop-in-Verzeichnis generiert werden (Standard in Fedora und RHEL9).
Wenn dieser Pfad auf ein Drop-in-Verzeichnis verweist (wie
/etc/ssh/sshd_config.d/00-custom.conf
), wird die Hauptkonfigurationsdatei (definiert mit der Variable sshd_main_config_file
) auf eine richtige
Include
-Direktive geprüft.
sshd_main_config_file
Wenn das System ein Drop-in-Verzeichnis verwendet, kann diese Option verwendet werden, um einen Pfad zur Hauptkonfigurationsdatei festzulegen und Ihnen zu ermöglichen, nur die Drop-in-Konfigurationsdatei über
sshd_config_file
zu konfigurieren. Dies ist nützlich in Fällen, in denen Sie einen zweiten unabhängigen sshd-Dienst mit einer anderen Konfigurationsdatei konfigurieren müssen. Dies ist auch die Datei, die in der Dienstdatei verwendet wird.
Auf Systemen ohne Drop-in-Verzeichnis ist sie standardmäßig auf None
gesetzt. Andernfalls ist sie standardmäßig auf /etc/ssh/sshd_config
gesetzt. Wenn die sshd_config_file
außerhalb des Drop-in-Verzeichnisses gesetzt wird (das übergeordnete Verzeichnis ist nicht
sshd_main_config_file
~ '.d'), wird diese Variable ignoriert.
sshd_config_namespace
Standardmäßig (null) definiert die Rolle den gesamten Inhalt der Konfigurationsdatei einschließlich der Systemstandards. Sie können diese Variable verwenden, um diese Rolle von anderen Rollen oder von mehreren Stellen in einem einzigen Playbook aufzurufen, als Alternative zur Verwendung eines Drop-in-Verzeichnisses. In diesem Fall wird sshd_skip_defaults
ignoriert und es werden keine Systemstandards verwendet.
Wenn diese Variable gesetzt ist, platziert die Rolle die Konfiguration, die Sie angeben, in Konfigurationsausschnitten in einer vorhandenen Konfigurationsdatei unter dem angegebenen Namespace. Sie müssen unterschiedliche Namespaces auswählen, wenn Sie die Rolle mehrere Male aufrufen.
Beachten Sie, dass die Einschränkungen der OpenSSH-Konfigurationsdatei weiterhin gelten. Zum Beispiel ist nur die erste in einer Konfigurationsdatei angegebene Option für die meisten Variablen wirksam.
Technisch platziert die Rolle Ausschnitte in Match all
-Blöcken, es sei denn, sie enthalten andere Match-Blöcke, um sicherzustellen, dass sie unabhängig von den vorherigen Match-Blöcken in der vorhandenen Konfigurationsdatei angewendet werden. Dies ermöglicht die Konfiguration beliebiger nicht konfliktierender Optionen aus verschiedenen Rollenaufrufen.
sshd_config_owner, sshd_config_group, sshd_config_mode
Verwenden Sie diese Variablen, um den Besitz und die Berechtigungen für die von dieser Rolle erzeugte OpenSSH-Konfigurationsdatei festzulegen.
sshd_verify_hostkeys
Standardmäßig (auto) enthält diese Liste alle Hostschlüssel, die in der erzeugten Konfigurationsdatei vorhanden sind. Wenn keine vorhanden sind, wird die Standardliste von OpenSSH verwendet, nachdem nicht FIPS-zugelassene Schlüssel im FIPS-Modus ausgeschlossen wurden. Die Pfade werden auf Vorhandensein überprüft und neue Schlüssel werden generiert, wenn sie fehlen. Darüber hinaus werden die Berechtigungen und Datei-Besitzer auf sinnvolle Standardwerte gesetzt. Dies ist nützlich, wenn die Rolle in der Bereitstellungsphase verwendet wird, um sicherzustellen, dass der Dienst beim ersten Versuch gestartet werden kann.
Um diese Überprüfung zu deaktivieren, setzen Sie dies auf eine leere Liste.
sshd_hostkey_owner, sshd_hostkey_group, sshd_hostkey_mode
Verwenden Sie diese Variablen, um den Besitz und die Berechtigungen für die Hostschlüssel der obigen Liste festzulegen.
Sekundäre Rollenvariablen
Diese Variablen werden von den internen Funktionen der Rolle verwendet und können verwendet werden, um die Standardwerte zu überschreiben, die jedem unterstützten Plattform entsprechen. Sie sind nicht getestet und werden im Allgemeinen nicht benötigt, da die Rolle diese anhand des OS-Typs bestimmen wird.
sshd_packages
Verwenden Sie diese Variable, um die standardmäßige Liste der zu installierenden Pakete zu überschreiben.
sshd_binary
Der Pfad zur OpenSSH-Binärdatei.
sshd_service
Der Name des OpenSSH-Dienstes. Standardmäßig enthält diese Variable den Namen des SSH-Dienstes, den die Zielplattform verwendet. Sie kann jedoch auch verwendet werden, um den Namen des benutzerdefinierten SSH-Dienstes festzulegen, wenn die Variable sshd_install_service
verwendet wird.
sshd_sftp_server
Standardpfad zu der SFTP-Server-Binärdatei.
Vom Rolle exportierte Variablen
sshd_has_run
Diese Variable wird auf true gesetzt, nachdem die Rolle erfolgreich ausgeführt wurde.
Konfigurieren Sie die SSH-Zertifikatauthentifizierung
Um die SSH-Zertifikatauthentifizierung auf Ihrem SSH-Server zu konfigurieren, müssen Sie mindestens den vertrauenswürdigen Benutzer CA-Schlüssel bereitstellen, der zur Validierung von Client-Zertifikaten verwendet wird.
Dies geschieht mit der Variablen sshd_trusted_user_ca_keys_list
.
Wenn Sie einige der autorisierten Prinzipale den Systembenutzern zuordnen müssen, können Sie dies mit
der Variablen sshd_principals
tun.
Zusätzliche Variablen
sshd_trusted_user_ca_keys_list
Liste der vertrauenswürdigen Benutzer-CA-öffentlichen Schlüssel im OpenSSH (einzeilig) Format (obligatorisch).
sshd_trustedusercakeys_directory_owner, shsd_trustedusercakeys_directory_group, sshd_trustedusercakeys_directory_mode
Verwenden Sie diese Variablen, um den Besitz und die Berechtigungen für das Verzeichnis der vertrauenswürdigen Benutzer-CA-Schlüssel festzulegen. Standardwerte sind jeweils root, root und 0755.
sshd_trustedusercakeys_file_owner, shsd_trustedusercakeys_file_group, sshd_trustedusercakeys_file_mode
Verwenden Sie diese Variablen, um den Besitz und die Berechtigungen für die Datei der vertrauenswürdigen Benutzer-CA-Schlüssel festzulegen. Standardwerte sind jeweils root, root und 0640.
sshd_principals
Ein Dictionary, das Prinzipale für Benutzer im OS enthält (optional). z.B.
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
Verwenden Sie diese Variablen, um den Besitz und die Berechtigungen für das Verzeichnis der autorisierten Prinzipale festzulegen. Standardwerte sind jeweils root, root und 0755.
sshd_authorizedprincipals_file_owner, shsd_authorizedprincipals_file_group, sshd_authorizedprincipals_file_mode
Verwenden Sie diese Variablen, um den Besitz und die Berechtigungen für die Datei der autorisierten Prinzipale festzulegen. Standardwerte sind jeweils root, root und 0644.
Zusätzliche Konfiguration
Der SSH-Server benötigt diese Informationen, die in Dateien gespeichert sind, also müssen neben den obigen Variablen auch die entsprechenden Konfigurationsoptionen TrustedUserCAKeys
(obligatorisch) und AuthorizedPrincipalsFile
(optional) im sshd
-Dictionary vorhanden sein, wenn Sie die Rolle aufrufen. Zum Beispiel:
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"
Um mehr über SSH-Zertifikate zu erfahren, finden Sie hier ein nettes Tutorial zu reinen SSH-Zertifikaten von Wikibooks.
Um Prinzipale zu verstehen und SSH-Zertifikate mit Vault einzurichten, finden Sie hier ein gut erklärtes Tutorial von Hashicorp.
Abhängigkeiten
Keine
Für Tests ist die Sammlung ansible.posix
erforderlich für die mount
-Rolle, um FIPS-Modus zu emulieren.
Beispiel-Playbook
GEFAHR! Dieses Beispiel dient dazu, die Vielzahl an Konfigurationsmöglichkeiten dieser Rolle zu zeigen. Es auszuführen könnte wahrscheinlich Ihren SSH-Zugriff auf den Server unterbrechen!
---
- 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
Ergebnisse in:
# Ansible managed: ...
Compression yes
GSSAPIAuthentication no
UsePrivilegeSeparation no
Match Group user
GSSAPIAuthentication yes
Match Group xusers
X11Forwarding yes
Seit Ansible 2.4 kann die Rolle mit dem include_role
-Schlüsselwort aufgerufen werden, zum Beispiel:
---
- hosts: all
become: true
tasks:
- name: "Configure 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
Sie können einfach einen Konfigurationsausschnitt mit der Option sshd_config_namespace
hinzufügen:
---
- hosts: all
tasks:
- name: Configure sshd to accept some useful environment variables
include_role:
name: willshersystems.sshd
vars:
sshd_config_namespace: accept-env
sshd:
# es gibt einige nützliche Umgebungsvariablen zu akzeptieren
AcceptEnv:
LANG
LS_COLORS
EDITOR
Der folgende Ausschnitt wird zur Standardkonfigurationsdatei hinzugefügt (bislang nicht vorhanden):
# 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
Weitere Beispiel-Playbooks finden Sie im Verzeichnis examples/
.
Vorlagengenerierung
Die Vorlagen sshd_config.j2
und
sshd_config_snippet.j2
werden programmatisch
von den Skripten im meta-Ordner generiert. Neue Optionen sollten zu den
options_body
und/oder options_match
hinzugefügt werden.
Um die Vorlagen neu zu generieren, führen Sie aus dem
meta/
-Verzeichnis den Befehl aus:
./make_option_lists
rpm-ostree
Siehe README-ostree.md
Lizenz
LGPLv3
Autoren
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