willshersystems.sshd
Serwer OpenSSH
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. (patrzmeta/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
- Debian wheezy, jessie, stretch, buster, bullseye, bookworm
- Dystrybucje pochodne EL 6, 7, 8, 9, 10
- Wszystkie wersje Fedora
- Najnowsza wersja 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.
OpenSSH SSH daemon configuration
ansible-galaxy install willshersystems.sshd