Tento tutoriál vám ukáže, jak nastavit dvoufaktorové ověřování SSH na serveru Ubuntu pomocí známého nástroje Google Authenticator. Výrazně to zlepší zabezpečení služby SSH na vašem serveru Ubuntu.
Jak funguje dvoufaktorová autentizace
Normálně stačí zadat heslo nebo použít klíč SSH pro vzdálené přihlášení k serveru Ubuntu. Dvoufaktorová autentizace (2FA) vyžaduje zadání dvou informací, abyste se mohli přihlásit. Budete tedy také muset zadat časové jednorázové heslo pro přihlášení k vašemu SSH serveru. Toto jednorázové heslo je vypočítáno pomocí algoritmu TOTP, což je standard IETF. V dnešní době mnoho webů a služeb (Facebook, Google, Twitter atd.) nabízí uživatelům 2FA k zabezpečení jejich účtů a je dobré povolit 2FA také na vašem SSH serveru.
Tento tutoriál vám ukáže, jak nastavit
- Ověření hesla pomocí 2FA
- Ověření veřejným klíčem pomocí 2FA
Poznámka :Serverový software s otevřeným zdrojovým kódem, který použijeme v tomto článku, se nazývá libpam-google-authenticator
, který se instaluje z výchozího úložiště Ubuntu. Společnost Google se do procesu ověřování nezapojuje v žádné podobě nebo formě. Serverový software a mobilní aplikace nepotřebují přístup k síti.
Krok 1:Instalace a konfigurace aplikace Google Authenticator na serveru Ubuntu
Přihlaste se na svůj server Ubuntu a spusťte následující příkaz k instalaci aplikace Google Authenticator z výchozího úložiště balíčků Ubuntu.
sudo apt install -y libpam-google-authenticator
Poté spusťte google-authenticator
příkaz k vytvoření nového tajného klíče ve vašem domovském adresáři.
google-authenticator
Na otázku „Chcete, aby byly ověřovací tokeny založené na čase?“ Odpovězte y .
Poté se vám zobrazí QR kód, který můžete naskenovat pomocí aplikace TOTP ve vašem telefonu. Doporučuji dvě aplikace:
- Google Authenticator je nejznámější mobilní aplikace TOTP. Můžete si ji nainstalovat přes Google Play nebo Apple App Store do svého mobilního telefonu.
- Google Authenticator mobilní aplikace není open source. Pokud nedůvěřujete Googlu, můžete použít FreeOTP, mobilní aplikaci TOTP s otevřeným zdrojovým kódem vyvinutou společností Red Hat.
Naskenujte QR kód pomocí Google Authenticator nebo FreeOTP na svém mobilním telefonu. Pamatujte, že pro naskenování celého QR kódu musíte zvětšit okno terminálu.
QR kód představuje tajný klíč, který zná pouze váš server SSH a vaše mobilní aplikace TOTP. Po naskenování QR kódu uvidíte na svém telefonu šestimístné jednorázové heslo. Ve výchozím nastavení se mění každých 30 sekund. Toto jednorázové heslo budete muset zadat později, abyste se mohli přihlásit k serveru Ubuntu přes SSH.
V okně terminálu můžete vidět tajný klíč, ověřovací kód a nouzový stírací kód. Doporučujeme, abyste si tyto informace uložili na bezpečné místo pro pozdější použití.
Poté můžete zadat y odpovědět na všechny zbývající otázky. Tím se aktualizuje konfigurační soubor aplikace Google Authenticator, zakáže se více použití stejného ověřovacího tokenu, prodlouží se časové okno a povolí se omezení rychlosti pro ochranu před pokusy o přihlášení hrubou silou.
Krok 2:Konfigurace démona SSH pro použití aplikace Google Authenticator
- Ověření hesla pomocí 2FA
- Ověření veřejným klíčem pomocí 2FA
Ověření hesla pomocí 2FA
Pokud klíč SSH nepoužíváte, postupujte podle pokynů níže.
Otevřete konfigurační soubor serveru SSH.
sudo nano /etc/ssh/sshd_config
Najděte v souboru následující dva parametry a ujistěte se, že jsou oba nastaveny na ano .
UsePAM yes ChallengeResponseAuthentication yes
PAM je zkratka pro zásuvný autentizační modul. Poskytuje snadný způsob, jak zapojit různé metody ověřování do vašeho systému Linux. Chcete-li aktivovat Google Authenticator s SSH, musí být povoleno ověřování PAM a Challenge-Response.
Pokud chcete uživateli root povolit používat 2FA, vyhledejte PermitRootLogin
parametr a nastavte jeho hodnotu na yes
. Nemůže to být PermitRootLogin no
nebo PermitRootLogin prohibit-password
.
PermitRootLogin yes
Uložte a zavřete soubor. Dále upravte soubor pravidel PAM pro démona SSH.
sudo nano /etc/pam.d/sshd
Na začátku tohoto souboru můžete vidět následující řádek, který umožňuje ověření hesla při ChallengeResponseAuthentication
je nastaveno na yes
.
@include common-auth
Chcete-li povolit 2FA v SSH, přidejte následující dva řádky.
# two-factor authentication via Google Authenticator auth required pam_google_authenticator.so
Uložte a zavřete soubor. Poté restartujte démona SSH, aby se změna projevila.
sudo systemctl restart ssh
Od této chvíle bude SSH démon vyžadovat zadání uživatelského hesla a ověřovacího kódu (jednorázové heslo vygenerované aplikací Google Authenticator). Následující snímek obrazovky ukazuje relaci přihlášení SSH z boxu CentOS na server Ubuntu 20.04.
Ověření pomocí veřejného klíče pomocí 2FA
Pokud pro přihlášení k serveru SSH používáte klíč SSH, postupujte podle pokynů níže.
Otevřete konfigurační soubor serveru SSH.
sudo nano /etc/ssh/sshd_config
Najděte v souboru následující dva parametry a ujistěte se, že jsou oba nastaveny na ano .
UsePAM yes ChallengeResponseAuthentication yes
PAM je zkratka pro zásuvný autentizační modul. Poskytuje snadný způsob, jak zapojit různé metody ověřování do vašeho systému Linux. Chcete-li aktivovat Google Authenticator s SSH, musí být povoleno ověřování PAM a Challenge-Response.
Pokud chcete uživateli root povolit používat 2FA, vyhledejte PermitRootLogin
parametr a nastavte jeho hodnotu na yes
. Nemůže to být PermitRootLogin no
nebo PermitRootLogin prohibit-password
.
PermitRootLogin yes
Dále přidejte následující řádek na konec tohoto souboru. To říká démonu SSH, že uživatel musí předat jak ověřování pomocí veřejného klíče, tak ověřování typu výzva-odpověď.
AuthenticationMethods publickey,keyboard-interactive
Uložte a zavřete soubor. Dále upravte soubor pravidel PAM pro démona SSH.
sudo nano /etc/pam.d/sshd
Na začátku tohoto souboru můžete vidět následující řádek, který umožňuje ověření hesla při ChallengeResponseAuthentication
je nastaveno na yes
. Tento řádek musíme zakomentovat, protože místo hesla použijeme klíč SSH.
@include common-auth
Chcete-li povolit 2FA v SSH, přidejte následující dva řádky.
# two-factor authentication via Google Authenticator auth required pam_google_authenticator.so
Uložte a zavřete soubor. Poté restartujte démona SSH, aby se změna projevila.
sudo systemctl restart ssh
Od této chvíle musíte k přihlášení používat klíč SSH a ověřovací kód Google Authenticator.
Poznámky
- Každý uživatel na vašem serveru Ubuntu musí spustit
google-authenticator
příkaz a naskenujte QR kód, abyste mohli použít dvoufaktorové ověření. Pokud uživatel neprovedl nastavení a pokusí se přihlásit, zobrazí se chybová zpráva „Oprávnění odepřeno (interaktivní klávesnice) “ se zobrazí. - Nouzový stírací kód je váš záložní kód. Pokud ztratíte telefon, můžete místo jednorázového hesla zadat jeden z pěti nouzových stíracích kódů a dokončit dvoufázové ověření. Tyto kódy jsou pouze pro jednorázové použití.
- Pokud chcete změnit tajný klíč, jednoduše se přihlaste na svůj server a spusťte
google-authenticator
dalším příkazem aktualizujte~/.google_authenticator
soubor. - Vzhledem k tomu, že jednorázové heslo se vypočítává pomocí sdíleného tajného klíče a aktuálního času, je vhodné povolit synchronizaci času NTP na vašem serveru Ubuntu, abyste udrželi přesný čas, ačkoli dříve jsme povolovali časový posun o 4 minuty. mezi serverem Ubuntu a mobilní aplikací. Váš server Ubuntu a mobilní aplikace TOTP mohou používat různá časová pásma.
Jak deaktivovat dvoufaktorové ověřování SSH
Upravte soubor pravidel PAM pro démona SSH.
sudo nano /etc/pam.d/sshd
Zakomentujte následující řádek.
auth required pam_google_authenticator.so
Uložte a zavřete soubor. Pokud jste přidali následující řádek do /etc/ssh/sshd_config
soubor,
AuthenticationMethods publickey,keyboard-interactive
Odstraňte keyboard-interactive
metoda ověřování.
AuthenticationMethods publickey
Uložte a zavřete soubor. Poté restartujte démona SSH.
sudo systemctl restart ssh