Wyszukiwanie w witrynie

Skonfiguruj uwierzytelnianie dwuskładnikowe SSH (2FA) na serwerze CentOS/RHEL


W tym samouczku dowiesz się, jak skonfigurować uwierzytelnianie dwuskładnikowe SSH na serwerze CentOS/RHEL przy użyciu dobrze znanego narzędzia Google Authenticator. Znacząco poprawi to bezpieczeństwo usługi SSH na serwerze CentOS/RHEL.

Jak działa uwierzytelnianie dwuskładnikowe

Zwykle wystarczy podać hasło lub użyć klucza SSH, aby zalogować się do zdalnego serwera CentOS/RHEL. Uwierzytelnianie dwuskładnikowe (2FA) wymaga wprowadzenia dwóch informacji w celu zalogowania się, dlatego też w celu zalogowania się do serwera SSH konieczne będzie wprowadzenie jednorazowego hasła czasowego. 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ż dla Twojego serwera 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ę google-authenticator i jest instalowane z repozytorium EPEL. 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 CentOS/RHEL

Zaloguj się do serwera CentOS/RHEL i uruchom następujące polecenia, aby zainstalować Google Authenticator z repozytorium EPEL (Extra Package for Enterprise Linux). qrencode służy do generowania kodu QR w wierszu poleceń.

sudo dnf install -y epel-release

sudo dnf install -y google-authenticator qrencode qrencode-libs

Następnie uruchom polecenie google-authenticator, aby utworzyć nowy tajny klucz w katalogu ~/.ssh/.

google-authenticator -s ~/.ssh/google_authenticator

Na pytanie „Czy chcesz, aby tokeny uwierzytelniające były oparte na czasie? ” Odpowiedz y.

Następnie zobaczysz kod QR, który musisz 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. To hasło jednorazowe musisz wprowadzić w terminalu.

Teraz w oknie terminala powinieneś zobaczyć awaryjny kod zdrapkowy. Ważne jest, aby zapisać te informacje w bezpiecznym miejscu na wypadek zgubienia telefonu.

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 ograniczania 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, musi być włączone 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

Aby włączyć 2FA w SSH, dodaj następujące dwie linie.

#two-factor authentication via Google Authenticator
auth     required     pam_google_authenticator.so secret=${HOME}/.ssh/google_authenticator

Zapisz i zamknij plik. Następnie zrestartuj demona SSH, aby zmiana zaczęła obowiązywać.

sudo systemctl restart sshd

Od teraz demon SSH będzie wymagał podania hasła użytkownika oraz kodu weryfikacyjnego (hasło jednorazowe wygenerowane przez Google Authenticator). Poniższy zrzut ekranu przedstawia sesję logowania SSH z komputera Ubuntu na serwer CentOS Linux.

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, musi być włączone 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

Aby włączyć 2FA w SSH, dodaj następujące dwie linie.

#two-factor authentication via Google Authenticator
auth     required     pam_google_authenticator.so secret=${HOME}/.ssh/google_authenticator

Skomentuj także następujący wiersz (Dodaj # na początku), aby wyłączyć uwierzytelnianie hasłem.

auth substack password-auth

Zapisz i zamknij plik. Następnie zrestartuj demona SSH, aby zmiana zaczęła obowiązywać.

sudo systemctl restart sshd

Od tego momentu do logowania będziesz musiał używać klucza SSH i kodu weryfikacyjnego Google Authenticator.

Notatki

  • Każdy użytkownik Twojego serwera CentOS/RHEL musi uruchomić polecenie google-authenticator -s ~/.ssh/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 ponownie uruchom polecenie google-authenticator -s ~/.ssh/google_authenticator, aby zaktualizować ~/.ssh/google_authenticator plik.

Jak wyłączyć uwierzytelnianie dwuskładnikowe SSH na serwerze CentOS/RHEL

Edytuj plik reguł PAM dla demona SSH.

sudo nano /etc/pam.d/sshd

Skomentuj następujący wiersz.

auth required pam_google_authenticator.so secret=${HOME}/.ssh/google_authenticator

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 sshd

Podsumowanie

Mam nadzieję, że ten samouczek pomógł Ci skonfigurować uwierzytelnianie dwuskładnikowe SSH na serwerze CentOS/RHEL. Jak zawsze, jeśli uznałeś ten post za przydatny, zapisz się do naszego bezpłatnego biuletynu, aby uzyskać więcej przydatnych samouczków. Uważaj 🙂

Powiązane artykuły