Wyszukiwanie w witrynie

Jak skonfigurować uwierzytelnianie dwuskładnikowe dla SSH w systemie Linux


Domyślnie SSH korzysta już z bezpiecznej komunikacji danych pomiędzy zdalnymi maszynami, ale jeśli chcesz dodać dodatkową warstwę zabezpieczeń do swoich połączeń SSH, możesz dodać Google Authenticator (uwierzytelnianie dwuskładnikowe) moduł umożliwiający wprowadzenie losowego, jednorazowego hasła (TOTP) kodu weryfikacyjnego podczas łączenia się z serwerami SSH. Podczas łączenia będziesz musiał wprowadzić kod weryfikacyjny ze swojego smartfona lub komputera.

Google Authenticator to moduł typu open source, który zawiera implementacje tokenów weryfikacyjnych z jednorazowymi hasłami (TOTP) opracowanymi przez Google.

Obsługuje kilka platform mobilnych, a także PAM (Puggable Authentication Module). Te jednorazowe hasła są generowane przy użyciu otwartych standardów stworzonych przez OATH Inicjatywę na rzecz otwartego uwierzytelniania).

W tym artykule pokażę, jak skonfigurować SSH do uwierzytelniania dwuskładnikowego w dystrybucjach Linuksa opartych na RedHat i Debianie, takich jak Fedora, CentOS Stream, Rocky Linux i AlmaLinux, Ubuntu, Debian i Mint.

Instalowanie Google Authenticator w systemie Linux

Otwórz maszynę, na której chcesz skonfigurować uwierzytelnianie dwuskładnikowe i zainstaluj następujące biblioteki PAM wraz z bibliotekami programistycznymi, które są potrzebne, aby moduł PAM działał poprawnie z moduł uwierzytelniający Google.

W systemach opartych na RedHat zainstaluj pakiet „pam-devel”, używając następującego polecenia yum.

yum install google-authenticator -y

W systemach opartych na Debianie zainstaluj pakiet „libpam0g-dev”, używając następującego polecenia apt.

sudo apt install libpam-google-authenticator -y

Wygeneruj tokeny uwierzytelniające Google

Po uruchomieniu polecenia „google-authenticator” wyświetli się seria pytań.

google-authenticator

W większości sytuacji po prostu wpisz „y” (tak) jako odpowiedź. Jeśli coś pójdzie nie tak, możesz ponownie wpisać polecenie „google-authenticator”, aby zresetować ustawienia.

  • Czy chcesz, aby tokeny uwierzytelniające były oparte na czasie (t/n) y

Po zadaniu tego pytania otrzymasz swój „tajny klucz” i „kody awaryjne”. Zapisz gdzieś te szczegóły. „tajny klucz” będzie nam później potrzebny do skonfigurowania aplikacji Google Authenticator.

google-authenticator

Do you want authentication tokens to be time-based (y/n) y
Warning: pasting the following URL into your browser exposes the OTP secret to Google:
  https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/root@tecmint%3Fsecret%3DCYZF2YF7HFGX55ZEPQYLHOO5JM%26issuer%3Dtecmint
Failed to use libqrencode to show QR code visually for scanning.
Consider typing the OTP secret into your app manually.
Your new secret key is: CYZF2YF7HFGX55ZEPQYLHOM
Enter code from app (-1 to skip): -1 Code confirmation skipped Your emergency scratch codes are: 83714291 53083200 80975623 57217008 77496339

Następnie postępuj zgodnie z kreatorem konfiguracji i w większości przypadków wpisz odpowiedź jako „y” (tak), jak pokazano poniżej.

Do you want me to update your "/root/.google_authenticator" file (y/n) y Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) y By default, tokens are good for 30 seconds and in order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of 1:30min to about 4min. Do you want to do so (y/n) y If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting (y/n) y

Konfigurowanie SSH do korzystania z Google Authenticator w systemie Linux

Otwórz plik konfiguracyjny PAM/etc/pam.d/sshd” i dodaj następujący wiersz na dole pliku.

auth required pam_google_authenticator.so nullok
auth required pam_permit.so

Następnie otwórz plik konfiguracyjny SSH/etc/ssh/sshd_config” i przewiń w dół, aby znaleźć odpowiednią linię.

ChallengeResponseAuthentication no

Zmień to na „tak”. Więc staje się tak.

ChallengeResponseAuthentication yes

Na koniec zrestartuj usługę SSH, aby wprowadzić nowe zmiany.

systemctl restart sshd
Or
sudo systemctl restart sshd

Konfigurowanie aplikacji Google Authenticator

Uruchom aplikację Google Authenticator na swoim smartfonie. Naciśnij + i wybierz „Wprowadź klucz konfiguracyjny”. Jeśli nie masz tej aplikacji, możesz pobrać i zainstalować aplikację Google Authenticator na swoich urządzeniach Android/iPhone/Blackberry.

Dodaj swoje konto „Nazwa” i wprowadź wygenerowany wcześniej „tajny klucz”.

Wygeneruje jednorazowe hasło (kod weryfikacyjny), które będzie się zmieniać co 30 sekund na Twoim telefonie.

Teraz spróbuj zalogować się przez SSH. Zostaniesz poproszony o podanie kodu Google Authenticator (kodu weryfikacyjnego) i hasła przy każdej próbie zalogowania się przez SSH. Masz tylko 30 sekund na wprowadzenie tego kodu weryfikacyjnego. Jeśli go przegapisz, wygenerowany zostanie nowy kod weryfikacyjny.

login as: tecmint
Access denied
Using keyboard-interactive authentication.
Verification code:
Using keyboard-interactive authentication.
Password:
Last login: Tue Apr 23 13:58:29 2022 from 172.16.25.125
[root@tecmint ~]#

Jeśli nie masz smartfona, możesz także użyć dodatku Firefox o nazwie Authenticator, aby przeprowadzić uwierzytelnianie dwuskładnikowe.

Ważne: uwierzytelnianie dwuskładnikowe działa w przypadku logowania SSH opartego na haśle. Jeśli korzystasz z dowolnej sesji SSH z kluczem prywatnym/publicznym, uwierzytelnianie dwuskładnikowe zostanie zignorowane i zaloguje Cię bezpośrednio.