Integracje · Linux SSH
2FA dla SSH w Linuksie z pam_radius i zatwierdzaniem na telefonie
Dla zespołów administrujących serwerami Linux przez SSH, które chcą, by każda powłoka, każde sudo i su wymagały oprócz hasła zatwierdzenia na telefonie. Linux PAM ma standardowy moduł RADIUS; wystarczy skierować go na Notakey auth-proxy, a cała flota serwerów korzysta z tej samej konfiguracji co VPN.
Jak przebiega połączenie
Z PAM przez RADIUS do proxy, nic więcej na serwerze
sshd i sudo uwierzytelniają przez PAM. Moduł pam_radius przesyła nazwę użytkownika i hasło do Notakey auth-proxy przez RADIUS; proxy przekazuje sprawdzenie hasła do Państwa serwera RADIUS, wysyła prośbę o zatwierdzenie na telefon użytkownika i zwraca Access-Accept dopiero wtedy, gdy powiodą się oba kroki. Przewodnik opisuje Debiana i Ubuntu z pakietem libpam-radius-auth; w dystrybucjach z rodziny RHEL moduł jest dostępny jako pam_radius, a pliki PAM znajdują się w tym samym układzie /etc/pam.d/.
Gdy moduł jest ustawiony jako sufficient, Access-Accept od razu loguje użytkownika, a każda inna odpowiedź przechodzi do zwykłego sprawdzenia lokalnego hasła. Awaryjny administrator (break-glass) zachowuje wyłącznie lokalne hasło; wszystkich pozostałych można założyć bez hasła. Jedyną drogą wejścia jest dla nich wtedy RADIUS przez proxy, czyli hasło i zatwierdzenie na telefonie, a lokalnie nie ma niczego, co dałoby się złamać atakiem siłowym.
To samo proxy i ten sam serwer RADIUS, które już chronią VPN i warstwę administracyjną routera, obsługują także serwery Linux. Po stronie proxy nic się nie zmienia.
Co warto wiedzieć przed rozpoczęciem
- Domyślny limit czasu modułu to 3 sekundy. Należy ustawić co najmniej wartość vpn_message_ttl w proxy (30 sekund); 60 daje wygodny zapas. Natychmiastowe niepowodzenie bez powiadomienia push oznacza zwykle błędny limit czasu lub wspólny sekret.
- Logowania SSH kluczem publicznym całkowicie pomijają fazę auth w PAM, więc logowanie kluczem nie wywołuje powiadomienia push. Aby wymagać klucza i zatwierdzenia, należy ustawić AuthenticationMethods publickey,keyboard-interactive i przetestować ten wariant osobno.
- Hasło jest przesyłane jako PAP między serwerem a proxy. To połączenie powinno przebiegać przez sieć zarządzania; można też uruchomić proxy jako kontener na samym hoście.
- Ta sama nazwa użytkownika musi istnieć w docelowym serwerze RADIUS, w usłudze Notakey z zarejestrowanym telefonem oraz jako konto lokalne lub katalogowe na serwerze Linux. PAM tylko uwierzytelnia; użytkownik nadal potrzebuje konta, na które się loguje.
- Ochrona sudo oznacza, że każde sudo pyta telefon. Buforowanie poświadczeń w sudo sprawia, że da się z tym żyć.
- sshd wymaga UsePAM yes i KbdInteractiveAuthentication yes; w Debianie i Ubuntu oba ustawienia są domyślne.
Od zera do pierwszego zatwierdzenia
- 01
Najpierw wyjście awaryjne
Zanim cokolwiek zmieni się w PAM, należy nadać kontu root lub osobnemu awaryjnemu administratorowi silne lokalne hasło i sprawdzić je na konsoli. Konfiguracja zawsze wraca do lokalnych haseł, więc to konto jest Państwa drogą do środka, gdy proxy, RADIUS lub sieć nie działają.
- 02
Instalacja pam_radius i skierowanie go na proxy
Należy zainstalować libpam-radius-auth, dodać do /etc/pam_radius_auth.conf jedną linię z adresem proxy, wspólnym sekretem odpowiadającym vpn_secret_in w proxy i limitem czasu 60 sekund, a następnie ograniczyć uprawnienia pliku do trybu 0600.
- 03
Włączenie w PAM i test z drugiego terminala
Należy dodać auth sufficient pam_radius_auth.so nad wierszem dołączającym common-auth w /etc/pam.d/sshd (oraz w razie potrzeby w sudo, su lub login), dopisać try_first_pass do linii pam_unix w common-auth, a potem zalogować się przez SSH z drugiego terminala nazwą użytkownika z RADIUS i zatwierdzić powiadomienie push. Przed zamknięciem pierwotnej sesji trzeba się upewnić, że konto awaryjne nadal działa.
Najczęściej zadawane pytania
- Czy stracę dostęp, jeśli proxy lub RADIUS przestanie działać?
- Nie, jeśli zachowają Państwo awaryjne konto administratora (break-glass) z lokalnym hasłem. Moduł pam_radius jest ustawiony jako sufficient, więc każda odpowiedź inna niż Access-Accept przechodzi do zwykłego sprawdzenia lokalnego hasła.
- Czy logowanie do SSH kluczem wywołuje powiadomienie push?
- Nie. Logowania kluczem publicznym całkowicie pomijają fazę auth w PAM. Aby wymagać klucza i zatwierdzenia na telefonie, należy ustawić AuthenticationMethods publickey,keyboard-interactive i przetestować ten wariant osobno.
- Które dystrybucje Linuksa obejmuje przewodnik?
- Debiana i Ubuntu z pakietem libpam-radius-auth. W dystrybucjach z rodziny RHEL moduł jest dostępny jako pam_radius, a pliki PAM znajdują się w tym samym układzie /etc/pam.d/.