willshersystems.sshd

Serwer OpenSSH

Ansible Lint Ansible Galaxy

Ta rola konfiguruje demona OpenSSH. Oto niektóre cechy:

  • Domyślnie konfiguruje demona SSH z normalnymi ustawieniami OS.
  • Działa na różnych dystrybucjach UN*X.
  • Może być konfigurowana za pomocą słowników lub prostych zmiennych.
  • Obsługuje zestawy Match.
  • Wspiera wszystkie opcje sshd_config. Szablony są generowane programowo. (patrz meta/make_option_lists)
  • Testuje sshd_config przed ponownym uruchomieniem sshd.

OSTRZEŻENIE Błędna konfiguracja tej roli może zablokować dostęp do twojego serwera! Proszę przetestować swoją konfigurację oraz jej interakcję z konfiguracją użytkowników przed użyciem w produkcji!

OSTRZEŻENIE Digital Ocean umożliwia logowanie jako root za pomocą haseł przez SSH na Debianie i Ubuntu. To nie jest domyślne ustawienie tej roli - ustawi PermitRootLogin without-password, co pozwala na dostęp za pomocą kluczy SSH, ale nie przez proste hasło. Jeśli potrzebujesz tej funkcjonalności, upewnij się, że ustawisz sshd_PermitRootLogin yes dla tych hostów.

Wymagania

Testowano na:

  • Ubuntu precise, trusty, xenial, bionic, focal, jammy, noble
    • Run tests on Ubuntu latest
  • Debian wheezy, jessie, stretch, buster, bullseye, bookworm
    • Run tests on Debian
  • Dystrybucje pochodne EL 6, 7, 8, 9, 10
    • Run tests on CentOS
  • Wszystkie wersje Fedora
    • Run tests on Fedora latest
  • Najnowsza wersja Alpine
    • Run tests on Alpine
  • FreeBSD 10.1
  • OpenBSD 6.0
  • AIX 7.1, 7.2
  • OpenWrt 21.03

Prawdopodobnie zadziała na innych wersjach, a bardziej bezpośrednie wsparcie przez odpowiednie pliki vars/ jest mile widziane.

Opcjonalne wymagania

Jeśli chcesz użyć zaawansowanej funkcjonalności tej roli, która może konfigurować zapory i SELinux za Ciebie (co jest przydatne, gdy używany jest niestandardowy port), rola wymaga dodatkowych kolekcji, które są określone w meta/collection-requirements.yml. Nie są one instalowane automatycznie. Jeśli chcesz zarządzać systemami rpm-ostree, wymagane są dodatkowe kolekcje. Musisz je zainstalować w ten sposób:

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

W celu uzyskania dalszych informacji zapoznaj się z opcjami sshd_manage_firewall i sshd_manage_selinux poniżej oraz sekcją rpm-ostree. Ta dodatkowa funkcjonalność jest wsparciem tylko na systemach Linux opartych na Red Hat.

Zmienne roli

Główne zmienne roli

Bez konfiguracji, ta rola dostarczy sshd_config, który odpowiada domyślnym ustawieniom OS, wyłączając komentarze i w innym porządku.

sshd_enable

Jeśli ustawione na false, rola zostanie całkowicie wyłączona. Domyślnie true.

sshd_skip_defaults

Jeśli ustawione na true, nie stosuj wartości domyślnych. Oznacza to, że musisz mieć kompletny zestaw domyślnych konfiguracji za pomocą albo słownika sshd, albo zmiennych sshd_Key. Domyślnie false, chyba że sshd_config_namespace jest ustawione lub sshd_config_file kieruje do katalogu drop-in, aby uniknąć rekurencyjnego włączenia.

sshd_manage_service

Jeśli ustawione na false, usługa/demon nie będzie zarządzana wcale, tzn. nie będzie próbował włączyć przy starcie ani rozpocząć ani przeładować usługi. Domyślnie true chyba że: Działa w kontenerze docker (zakłada się, że ansible jest używany w fazie budowy) lub AIX (moduł service Ansible obecnie nie obsługuje enabled dla AIX).

sshd_allow_reload

Jeśli ustawione na false, przeładowanie sshd nie odbędzie się po zmianie. Może to pomóc w rozwiązywaniu problemów. Będziesz musiał ręcznie przeładować sshd, jeśli chcesz zastosować zmienioną konfigurację. Domyślnie ma tę samą wartość co sshd_manage_service. (Z wyjątkiem AIX, gdzie sshd_manage_service ma domyślnie false, ale sshd_allow_reload ma domyślnie true).

sshd_install_service

Jeśli ustawione na true, rola zainstaluje pliki usług dla usługi SSH. Domyślnie false.

Szablony dla plików usług, które mają być używane, są wskazane przez zmienne

  • sshd_service_template_service (domyślnie: templates/sshd.service.j2)
  • sshd_service_template_at_service (domyślnie: templates/[email protected])
  • sshd_service_template_socket (domyślnie: templates/sshd.socket.j2)

Używając tych zmiennych, możesz używać własnych niestandardowych szablonów. Przy domyślnych szablonach, nazwa zainstalowanej usługi SSH będzie podana przez zmienną sshd_service.

sshd_manage_firewall

Jeśli ustawione na true, port(y) SSH będą otwarte w zaporze. Uwaga, to działa tylko na OS opartych na Red Hat. Domyślnie false.

UWAGA: sshd_manage_firewall jest ograniczone do dodawania portów. Nie można go używać do usuwania portów. Jeśli chcesz usunąć porty, musisz użyć zintegrowanej roli systemu firewall bezpośrednio.

sshd_manage_selinux

Jeśli ustawione na true, SELinux będzie skonfigurowany, aby pozwolić sshd nasłuchiwać na podanym porcie SSH. Uwaga, to działa tylko na OS opartych na Red Hat. Domyślnie false.

UWAGA: sshd_manage_selinux jest ograniczone do dodawania polityki. Nie można go używać do usuwania polityki. Jeśli chcesz usunąć porty, musisz użyć zintegrowanej roli systemu SELinux bezpośrednio.

sshd

Słownik zawierający konfigurację. Przykład:

sshd:
  Compression: delayed
  ListenAddress:
    - 0.0.0.0

sshd_<OptionName>

Można używać prostych zmiennych zamiast słownika. Proste wartości nadpisują wartości słownika. Przykład:

sshd_Compression: off

W każdym przypadku, wartości boolowskie są poprawnie renderowane jako yes i no w konfiguracji sshd. Listy mogą być używane dla wielu linii elementów konfiguracyjnych. Przykład:

sshd_ListenAddress:
  - 0.0.0.0
  - '::'

Renderuje jako:

ListenAddress 0.0.0.0
ListenAddress ::

sshd_match, sshd_match_1 przez sshd_match_9

Lista słowników lub po prostu słownik dla sekcji Match. Uwaga, te zmienne nie nadpisują bloków match zdefiniowanych w słowniku sshd. Wszystkie źródła zostaną odzwierciedlone w wynikowym pliku konfiguracyjnym. Użycie wariantu sshd_match_* jest przestarzałe i niezalecane.

sshd_backup

Gdy ustawione na false, oryginalny plik sshd_config nie jest archiwizowany. Domyślnie true.

sshd_sysconfig

Na systemach opartych na RHEL, sysconfig jest używany do konfigurowania bardziej szczegółowych ustawień usługi sshd. Jeśli ustawione na true, ta rola będzie zarządzać także plikiem konfiguracyjnym /etc/sysconfig/sshd na podstawie następujących ustawień. Domyślnie false.

sshd_sysconfig_override_crypto_policy

W systemach opartych na RHEL8, można użyć tej opcji do nadpisania polityki kryptograficznej w systemie ustawiając na true. Bez tej opcji, zmiany w szyfrach, MACach, algorytmach kluczy publicznych nie będą miały wpływu na wynikową usługę w RHEL8. Domyślnie false.

sshd_sysconfig_use_strong_rng

W systemach opartych na RHEL (przed RHEL9), można użyć tej opcji, aby wymusić sshd na ponownym użyciu generatora liczb losowych OpenSSL z podaną ilością bajtów jako argument. Domyślnie 0, co wyłącza tę funkcjonalność. Nie jest zalecane włączanie tego, jeśli system nie ma sprzętowego generatora liczb losowych.

sshd_config_file

Ścieżka, w której konfiguracja openssh wyprodukowana przez tę rolę powinna być zapisana. Jest to przydatne głównie przy generowaniu fragmentów konfiguracji do włączenia z katalogu drop-in (domyślnie w Fedory i RHEL9).

Gdy ta ścieżka wskazuje na katalog drop-in (np. /etc/ssh/sshd_config.d/00-custom.conf), główny plik konfiguracyjny (zdefiniowany zmienną sshd_main_config_file) jest sprawdzany, aby zawierał odpowiednią dyrektywę Include.

sshd_main_config_file

Gdy system używa katalogu drop-in, ta opcja może być użyta do ustawienia ścieżki do głównego pliku konfiguracyjnego i pozwolić Ci skonfigurować tylko plik konfiguracyjny drop-in przy użyciu sshd_config_file. Jest to przydatne w przypadkach, gdy musisz skonfigurować drugą, niezależną usługę sshd z innym plikem konfiguracyjnym. To jest także plik używany w pliku usługi.

W systemach bez katalogu drop-in domyślnie jest ustawione na None. W przeciwnym razie domyślnie jest ustawione na /etc/ssh/sshd_config. Gdy sshd_config_file jest ustawione poza katalogiem drop-in (jego katalog nadrzędny nie jest sshd_main_config_file ~ '.d'), ta zmienna jest ignorowana.

sshd_config_namespace

Domyślnie (null), rola definiuje całą zawartość pliku konfiguracyjnego w tym systemowe domyślne. Możesz użyć tej zmiennej do wywołania tej roli z innych ról lub z wielu miejsc w jednym playbooku jako alternatywę dla używania katalogu drop-in. W tym przypadku sshd_skip_defaults jest ignorowane, a systemowe domyślne nie są używane.

Gdy ta zmienna jest ustawiona, rola umieszcza konfigurację, którą określasz w fragmentach konfiguracyjnych w istniejącym pliku konfiguracyjnym pod danym przestrzeniają nazw. Musisz wybrać różne przestrzenie nazw przy wywoływaniu roli kilka razy.

Zwróć uwagę, że ograniczenia pliku konfiguracyjnego openssh nadal mają zastosowanie. Na przykład, tylko pierwsza opcja określona w pliku konfiguracyjnym jest skuteczna w przypadku większości zmiennych.

Technicznie, rola umieszcza fragmenty w blokach Match all, chyba że zawierają inne bloki match, aby zapewnić ich zastosowanie niezależnie od poprzednich bloków match w istniejącym pliku konfiguracyjnym. Umożliwia to konfigurowanie dowolnych niekolidujących opcji z różnych wywołań ról.

sshd_config_owner, sshd_config_group, sshd_config_mode

Użyj tych zmiennych, aby ustawić właściciela i uprawnienia dla pliku konfiguracyjnego openssh, który ta rola produkuje.

sshd_verify_hostkeys

Domyślnie (auto), ta lista zawiera wszystkie klucze hostów, które są obecne w wyprodukowanym pliku konfiguracyjnym. Jeśli ich nie ma, zostanie użyta domyślna lista OpenSSH po wykluczeniu kluczy niezatwierdzonych w trybie FIPS. Ścieżki są sprawdzane pod kątem obecności, a nowe klucze są generowane, jeśli brakuje. Dodatkowo, uprawnienia i właściciele plików są ustawiane na sane domyślne. To jest przydatne, gdy rola jest używana w etapie wdrażania, aby upewnić się, że usługa może się uruchomić za pierwszym razem.

Aby wyłączyć tę kontrolę, ustaw tę listę na pustą.

sshd_hostkey_owner, sshd_hostkey_group, sshd_hostkey_mode

Użyj tych zmiennych, aby ustawić właściciela i uprawnienia dla kluczy hostów z powyższej listy.

Drugorzędne zmienne roli

Te zmienne są używane wewnętrznie przez rolę i można je wykorzystać do nadpisania domyślnych odpowiadających każdej obsługiwanej platformie. Nie są one testowane i ogólnie nie są potrzebne, ponieważ rola sama je ustali na podstawie typu OS.

sshd_packages

Użyj tej zmiennej, aby nadpisać domyślną listę pakietów do zainstalowania.

sshd_binary

Ścieżka do wykonywalnego pliku openssh.

sshd_service

Nazwa usługi openssh. Domyślnie ta zmienna zawiera nazwę usługi ssh, której używa docelowa platforma. Ale można ją też używać do ustawić nazwę niestandardowej usługi ssh, gdy używana jest zmienna sshd_install_service.

sshd_sftp_server

Domyślna ścieżka do binarnego serwera sftp.

Zmienne eksportowane przez rolę

sshd_has_run

Ta zmienna jest ustawiona na true po pomyślnym wykonaniu roli.

Konfigurowanie uwierzytelniania certyfikatów SSH

Aby skonfigurować uwierzytelnianie certyfikatami SSH na swoim serwerze SSH, musisz podać przynajmniej klucz CA użytkownika, który będzie użyty do weryfikacji certyfikatów klientów. Robi się to przy pomocy zmiennej sshd_trusted_user_ca_keys_list.

Jeśli potrzebujesz powiązać niektóre z autoryzowanych principów z użytkownikami systemowymi, możesz to zrobić za pomocą zmiennej sshd_principals.

Dodatkowe zmienne

sshd_trusted_user_ca_keys_list

Lista zaufanych publicznych kluczy CA użytkowników w formacie OpenSSH (w jednym wierszu) (obowiązkowe).

sshd_trustedusercakeys_directory_owner, sshd_trustedusercakeys_directory_group, sshd_trustedusercakeys_directory_mode

Użyj tych zmiennych, aby ustawić właściciela i uprawnienia dla katalogu kluczy CA użytkowników. Domyślne wartości to odpowiednio root, root i 0755.

sshd_trustedusercakeys_file_owner, sshd_trustedusercakeys_file_group, sshd_trustedusercakeys_file_mode

Użyj tych zmiennych, aby ustawić właściciela i uprawnienia dla pliku z kluczami CA użytkowników. Domyślne wartości to odpowiednio root, root i 0640.

sshd_principals

Słownik zawierający principy dla użytkowników w systemie (opcjonalnie). Przykład:

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

sshd_authorizedprincipals_directory_owner, sshd_authorizedprincipals_directory_group, sshd_authorizedprincipals_directory_mode

Użyj tych zmiennych, aby ustawić właściciela i uprawnienia dla katalogu autoryzowanych principów. Domyślnie wartości to odpowiednio root, root i 0755.

sshd_authorizedprincipals_file_owner, sshd_authorizedprincipals_file_group, sshd_authorizedprincipals_file_mode

Użyj tych zmiennych, aby ustawić właściciela i uprawnienia dla pliku autoryzowanych principów. Domyślnie wartości to odpowiednio root, root i 0644.

Dodatkowa konfiguracja

Serwer SSH potrzebuje tych informacji zapisanych w plikach, więc oprócz powyższych zmiennych, odpowiednie opcje konfiguracyjne TrustedUserCAKeys (obowiązkowe) i AuthorizedPrincipalsFile (opcjonalne) muszą być obecne w słowniku sshd przy wywoływaniu roli. Na przykład:

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"

Aby dowiedzieć się więcej o certyfikatach SSH, oto fajny samouczek dotyczący czystych certyfikatów SSH, z wikibooks.

Aby zrozumieć principy i skonfigurować certyfikaty SSH za pomocą Vault, oto dobrze wytłumaczony samouczek z Hashicorp.

Zależności

Brak

Dla testów wymagana jest kolekcja ansible.posix dla roli mount, aby emulować tryb FIPS.

Przykładowy Playbook

NIEBEZPIECZEŃSTWO! Ten przykład ma na celu pokazanie zakresu konfiguracji oferowanej przez tę rolę. Uruchomienie go prawdopodobnie zepsuje Twoje połączenie SSH z serwerem!

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

Wynik:

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

Od wersji Ansible 2.4, rolę można wywołać używając słowa kluczowego include_role, na przykład:

---
- hosts: all
  become: true
  tasks:
  - name: "Skonfiguruj 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

Możesz po prostu dodać fragment konfiguracji z opcją sshd_config_namespace:

---
- hosts: all
  tasks:
  - name: Skonfiguruj sshd, aby akceptował przydatne zmienne środowiskowe
    include_role:
      name: willshersystems.sshd
    vars:
      sshd_config_namespace: accept-env
      sshd:
        # są przydatne zmienne środowiskowe do zaakceptowania
        AcceptEnv:
          LANG
          LS_COLORS
          EDITOR

Następujący fragment zostanie dodany do domyślnego pliku konfiguracyjnego (jeśli jeszcze nie jest obecny):

# 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

Więcej przykładowych playbooków można znaleźć w katalogu examples/.

Generowanie szablonów

Szablony sshd_config.j2 oraz sshd_config_snippet.j2 są generowane programowo przy użyciu skryptów w katalogu meta. Nowe opcje powinny być dodawane do options_body i/lub options_match.

Aby ponownie wygenerować szablony, uruchom z katalogu meta/: ./make_option_lists

rpm-ostree

Zobacz README-ostree.md

Licencja

LGPLv3

Autorzy

Matt Willsher matt@willsher.systems

© 2014,2015 Willsher Systems Ltd.

Jakub Jelen jjelen@redhat.com

© 2020 - 2024 Red Hat, Inc.

Zainstaluj
ansible-galaxy install willshersystems.sshd
Licencja
lgpl-3.0
Pobrania
321.8k
Właściciel
Cloud Architecture & Automation