Wyszukiwanie w witrynie

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

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

Znajdź w pliku następujące dwa parametry i upewnij się, że oba mają wartość tak.

UsePAM yes

ChallengeResponseAuthentication yes

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

Zapisz i zamknij plik. Następnie edytuj plik reguł PAM dla demona SSH.

sudo nano /etc/pam.d/sshd

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

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

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

Znajdź w pliku następujące dwa parametry i upewnij się, że oba mają wartość tak.

UsePAM yes

ChallengeResponseAuthentication yes

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

Nastę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-interactive

Zapisz i zamknij plik. Następnie edytuj plik reguł PAM dla demona SSH.

sudo nano /etc/pam.d/sshd

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

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

Od 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-authenticator i 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/sshd

Skomentuj następujący wiersz.

auth   required   pam_google_authenticator.so

Zapisz i zamknij plik. Jeśli dodałeś następujący wiersz w pliku /etc/ssh/sshd_config,

AuthenticationMethods publickey,keyboard-interactive

Usuń metodę uwierzytelniania keyboard-interactive.

AuthenticationMethods publickey

Zapisz i zamknij plik. Następnie zrestartuj demona SSH.

sudo systemctl restart ssh

Podsumowanie

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.

Powiązane artykuły