willshersystems.sshd

OpenSSH Server

Ansible Lint Ansible Galaxy

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. (siehe meta/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
    • Tests auf Ubuntu aktuell durchführen
  • Debian: wheezy, jessie, stretch, buster, bullseye, bookworm
    • Tests auf Debian durchführen
  • EL 6, 7, 8, 9, 10 abgeleitete Distributionen
    • Tests auf CentOS durchführen
  • Alle Fedora-Versionen
    • Tests auf Fedora aktuell durchführen
  • Aktuelles Alpine
    • Tests auf Alpine durchführen
  • 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.

Installieren
ansible-galaxy install willshersystems.sshd
Lizenz
lgpl-3.0
Downloads
321.8k
Besitzer
Cloud Architecture & Automation