Skonfiguruj uwierzytelnianie dwuskładnikowe SSH (2FA) na serwerze Debian 11
W tym samouczku dowiesz się, jak skonfigurować uwierzytelnianie dwuskładnikowe SSH na serwerze Debian przy użyciu dobrze znanego narzędzia Google Authenticator. Znacząco poprawi to bezpieczeństwo usługi SSH na Twoim serwerze Debian.
Jak działa uwierzytelnianie dwuskładnikowe
Zwykle wystarczy podać hasło lub użyć klucza SSH, aby zalogować się zdalnie do serwera Debian. Uwierzytelnianie dwuskładnikowe (2FA) wymaga wprowadzenia dwóch informacji w celu zalogowania. Aby zalogować się do serwera SSH, będziesz musiał także wprowadzić jednorazowe hasło czasowe. To jednorazowe hasło jest obliczane przy użyciu algorytmu TOTP, który jest standardem IETF. Obecnie wiele witryn i usług (Facebook, Google, Twitter itp.) oferuje użytkownikom 2FA w celu zabezpieczenia ich kont. Dobrym pomysłem jest włączenie 2FA również na serwerze SSH.
W tym samouczku dowiesz się, jak skonfigurować
- Uwierzytelnianie hasłem za pomocą 2FA
- Uwierzytelnianie kluczem publicznym za pomocą 2FA
Uwaga: oprogramowanie serwerowe typu open source, którego będziemy używać w tym artykule, nazywa się
libpam-google-authenticatori jest instalowane z domyślnego repozytorium Debiana. Firma Google nie angażuje się w proces uwierzytelniania w żadnej formie ani formie. Oprogramowanie serwera i aplikacja mobilna nie wymagają dostępu do sieci.
Krok 1: Zainstaluj i skonfiguruj Google Authenticator na serwerze Debian
Zaloguj się do serwera Debiana i uruchom następujące polecenie, aby zainstalować Google Authenticator z domyślnego repozytorium pakietów Debiana.
sudo apt install -y libpam-google-authenticator
Następnie uruchom polecenie google-authenticator, aby utworzyć nowy tajny klucz w swoim katalogu domowym.
google-authenticatorNa pytanie „Czy chcesz, aby tokeny uwierzytelniające były oparte na czasie? ” Odpowiedz y.
Następnie zobaczysz kod QR, który możesz zeskanować za pomocą aplikacji TOTP na swoim telefonie. Polecam dwie aplikacje:
- Google Authenticator to najbardziej znana aplikacja mobilna TOTP. Można ją zainstalować na swoim telefonie komórkowym za pośrednictwem Google Play lub sklepu z aplikacjami Apple.
- Aplikacja mobilna Google Authenticator nie jest aplikacją typu open source. Jeśli nie ufasz Google, możesz skorzystać z FreeOTP, aplikacji mobilnej TOTP o otwartym kodzie źródłowym opracowanej przez firmę Red Hat.
Zeskanuj kod QR za pomocą Google Authenticator lub FreeOTP na swoim telefonie komórkowym. Pamiętaj, że aby zeskanować pełny kod QR, musisz powiększyć okno terminala.
Kod QR reprezentuje tajny klucz, który jest znany tylko Twojemu serwerowi SSH i Twojej aplikacji mobilnej TOTP. Po zeskanowaniu kodu QR na telefonie pojawi się sześciocyfrowe hasło jednorazowe. Domyślnie zmienia się co 30 sekund. Wpisz to jednorazowe hasło w oknie terminala, aby potwierdzić, że jest prawidłowe.
Teraz w oknie terminala możesz zobaczyć tajny klucz, kod weryfikacyjny i awaryjny kod zdrapki. Zaleca się zapisanie tych informacji w bezpiecznym miejscu do późniejszego wykorzystania.
Następnie możesz wpisać y, aby odpowiedzieć na wszystkie pozostałe pytania. Spowoduje to zaktualizowanie pliku konfiguracyjnego Google Authenticator, wyłączenie wielokrotnego użycia tego samego tokena uwierzytelniającego, wydłużenie okna czasowego i włączenie ograniczenia szybkości w celu ochrony przed próbami logowania metodą brute-force.
Krok 2: Skonfiguruj demona SSH do korzystania z Google Authenticator
- Uwierzytelnianie hasłem za pomocą 2FA
- Uwierzytelnianie kluczem publicznym za pomocą 2FA
Uwierzytelnianie hasłem za pomocą 2FA
Jeśli nie używasz klucza SSH, postępuj zgodnie z poniższymi instrukcjami.
Otwórz plik konfiguracyjny serwera SSH.
sudo nano /etc/ssh/sshd_configZnajdź w pliku następujące dwa parametry i upewnij się, że oba mają wartość tak.
UsePAM yes
ChallengeResponseAuthentication yesPAM oznacza podłączany moduł uwierzytelniający. Zapewnia łatwy sposób podłączenia innej metody uwierzytelniania do systemu Linux. Aby włączyć Google Authenticator z uwierzytelnianiem SSH, PAM i Challenge-Response, należy włączyć uwierzytelnianie.
Jeśli chcesz zezwolić użytkownikowi root na korzystanie z 2FA, znajdź parametr PermitRootLogin i ustaw jego wartość na yes. Nie może to być PermitRootLogin no ani PermitRootLogin zakazujące-hasło.
PermitRootLogin yesZapisz i zamknij plik. Następnie edytuj plik reguł PAM dla demona SSH.
sudo nano /etc/pam.d/sshdNa początku tego pliku możesz zobaczyć następujący wiersz, który umożliwia uwierzytelnianie hasłem, gdy ChallengeResponseAuthentication jest ustawione na yes.
@include common-authAby włączyć 2FA w SSH, dodaj następujące dwie linie.
# two-factor authentication via Google Authenticator
auth required pam_google_authenticator.so
Zapisz i zamknij plik. Następnie zrestartuj demona SSH, aby zmiana zaczęła obowiązywać.
sudo systemctl restart sshOd teraz demon SSH będzie wymagał podania hasła użytkownika oraz kodu weryfikacyjnego (hasło jednorazowe wygenerowane przez Google Authenticator). Nie kończ bieżącej sesji SSH. Powinieneś otworzyć kolejne okno terminala, aby przetestować uwierzytelnianie dwuskładnikowe. Jeśli coś pójdzie nie tak, możesz użyć pierwszej sesji SSH, aby naprawić błędy.
Poniższy zrzut ekranu przedstawia sesję logowania SSH z komputera stacjonarnego Ubuntu na serwer Debian.
Uwierzytelnianie kluczem publicznym za pomocą 2FA
Jeśli używasz klucza SSH do logowania się do serwera SSH, postępuj zgodnie z poniższymi instrukcjami.
Otwórz plik konfiguracyjny serwera SSH.
sudo nano /etc/ssh/sshd_configZnajdź w pliku następujące dwa parametry i upewnij się, że oba mają wartość tak.
UsePAM yes
ChallengeResponseAuthentication yesPAM oznacza podłączany moduł uwierzytelniający. Zapewnia łatwy sposób podłączenia innej metody uwierzytelniania do systemu Linux. Aby włączyć Google Authenticator z uwierzytelnianiem SSH, PAM i Challenge-Response, należy włączyć uwierzytelnianie.
Jeśli chcesz zezwolić użytkownikowi root na korzystanie z 2FA, znajdź parametr PermitRootLogin i ustaw jego wartość na yes. Nie może to być PermitRootLogin no ani PermitRootLogin zakazujące-hasło.
PermitRootLogin yesNastępnie dodaj następujący wiersz na końcu tego pliku. Informuje to demona SSH, że użytkownik musi przejść zarówno uwierzytelnienie za pomocą klucza publicznego, jak i uwierzytelnienie typu wyzwanie-odpowiedź.
AuthenticationMethods publickey,keyboard-interactiveZapisz i zamknij plik. Następnie edytuj plik reguł PAM dla demona SSH.
sudo nano /etc/pam.d/sshdNa początku tego pliku możesz zobaczyć następujący wiersz, który umożliwia uwierzytelnianie hasłem, gdy ChallengeResponseAuthentication jest ustawione na yes. Musimy skomentować tę linię, ponieważ zamiast hasła użyjemy klucza SSH.
@include common-authAby włączyć 2FA w SSH, dodaj następujące dwie linie.
# two-factor authentication via Google Authenticator
auth required pam_google_authenticator.soZapisz i zamknij plik. Następnie zrestartuj demona SSH, aby zmiana zaczęła obowiązywać.
sudo systemctl restart sshOd tego momentu do logowania będziesz musiał używać klucza SSH i kodu weryfikacyjnego Google Authenticator. Prosimy nie kończyć bieżącej sesji SSH. Powinieneś otworzyć kolejne okno terminala, aby przetestować uwierzytelnianie dwuskładnikowe. Jeśli coś pójdzie nie tak, możesz użyć pierwszej sesji SSH, aby naprawić błędy.
Notatki
- Każdy użytkownik Twojego serwera Debian musi uruchomić polecenie
google-authenticatori zeskanować kod QR, aby móc skorzystać z uwierzytelniania dwuskładnikowego. Jeśli użytkownik nie skonfigurował i spróbuje się zalogować, wyświetli się komunikat o błędzie „Odmowa uprawnień (interaktywna klawiatura)”. - Awaryjny kod zdrapkowy to Twój kod zapasowy. Jeśli zgubisz telefon, zamiast jednorazowego hasła możesz wpisać jeden z pięciu awaryjnych kodów zdrapek, aby zakończyć weryfikację dwuetapową. Kody te są przeznaczone wyłącznie do jednorazowego użytku.
- Jeśli chcesz zmienić tajny klucz, po prostu zaloguj się na swój serwer i uruchom ponownie polecenie
google-authenticator, aby zaktualizować plik~/.google_authenticator. - Ponieważ hasło jednorazowe jest obliczane na podstawie wspólnego tajnego klucza i bieżącego czasu, dobrym pomysłem jest włączenie synchronizacji czasu NTP na serwerze Debiana, aby zachować dokładny czas, chociaż poprzednio dopuszczaliśmy przesunięcie czasu między hasłami Debiana o 4 minuty serwer i aplikacja mobilna. Twój serwer Debian i aplikacja mobilna TOTP mogą używać różnych stref czasowych.
Jak wyłączyć uwierzytelnianie dwuskładnikowe SSH
Edytuj plik reguł PAM dla demona SSH.
sudo nano /etc/pam.d/sshdSkomentuj następujący wiersz.
auth required pam_google_authenticator.soZapisz i zamknij plik. Jeśli dodałeś następujący wiersz w pliku /etc/ssh/sshd_config,
AuthenticationMethods publickey,keyboard-interactiveUsuń metodę uwierzytelniania keyboard-interactive.
AuthenticationMethods publickeyZapisz i zamknij plik. Następnie zrestartuj demona SSH.
sudo systemctl restart sshPodsumowanie
Mam nadzieję, że ten samouczek pomógł ci skonfigurować uwierzytelnianie dwuskładnikowe SSH na serwerze Debian 22.04 i 20.04. Jak zawsze, jeśli uznałeś ten post za przydatny, zapisz się do naszego bezpłatnego biuletynu. Możesz także śledzić nas na Twitterze lub polubić naszą stronę na Facebooku.






