Dvou-faktorové ověření (2FA) přes Google Authenticator na Ubuntu Server

Postup pro přidání dvoufaktorového ověření (2FA) na server s využitím Google Authenticator. 2FA představuje způsob, jak zabezpečit přístup k serveru (typicky přes SSH a lokální přístup) pomocí kombinace uživatelského hesla + jednorázového hesla (OTP), které generuje aplikace Google Authenticator na mobilním zařízení uživatele. Tento proces přidává další vrstvu bezpečnosti k autentizačnímu mechanismu, protože útočník by potřeboval jak znát heslo, tak mít aktuální OTP, aby se úspěšně přihlásil.

Vladimír NeporAutorIng. Vladimír Nepor
PublikovánoAktualizováno

Postup přidání a aktivace 2FA prostřednictvím Google Authenticator na Ubuntu server

  1. Do mobilního telefonu si nainstalujte aplikaci "Google Authenticator" od vydavatele Google. Aplikace je dostupná pro iOS i Android.
  2. Na serveru nainstalujte balíček Google authentizátoru
    sudo apt install -y libpam-google-authenticator
  3. Dle toho, kde všude chceme požadavek 2FA při přihlašování aplikovat, určíme konfigurační soubor PAM (pluggable authentication modules), do kterého záznam auth required pam_google_authenticator.so vložíme, viz varianty níže:

    • Otevřete konfigurační PAM soubor common-auth
      sudo nano /etc/pam.d/common-auth

      Do konfiguračního souboru je nutné vložit záznam auth required pam_google_authenticator.so. Pozice vložení ovlivňuje pořadí, ve kterém je 2FA autorizace požadována.

      • Jestliže je vložen na začátek, viz vyznačená část níže, 2FA kód je vyžadován před heslem.
        ...
        # pam-auth-update to manage selection of other modules.  See
        # pam-auth-update(8) for details.
        
        # Enable Google Authenticator   <-- vložený záznam
        auth required pam_google_authenticator.so
        
        # here are the per-package modules (the "Primary" block)
        ...
        
      • Jestliže je vložen na konec souboru, 2FA bude vyžadováno až po zadání hesla.
    • Klávesovou zkrátkou CTRL+X a následně klávesami Y a ENTER soubor uložte a zavřete.

    Poznámka: Při variantě s common-auth platí 2FA pro všechny uživatele i pro sudo příkazy. Při variantě jen pro SSH se týká pouze přihlášení přes SSH.

  4. Otevřete konfigurační soubor sshd_config
    sudo nano /etc/ssh/sshd_config
    • Ujistěte se, že KbdInteractiveAuthentication je nastaven na možnost yes
    • Nastavte záznam:
      AuthenticationMethods keyboard-interactive:pam

      Jestliže máme aktivován i public key, můžeme jeho vyžadování vyžadovat záznamem:

      AuthenticationMethods publickey,keyboard-interactive:pam

      U sshd platí první nalezená hodnota: pokud už v souboru (nebo v /etc/ssh/sshd_config.d/) je např. AuthenticationMethods publickey nebo KbdInteractiveAuthentication no z článku SSH klíče, upravte přímo tyto záznamy místo přidávání nových. Záznam vkládejte před případný blok Match. Výsledek ověříte příkazem sudo sshd -T | grep -Ei '^(kbdinteractiveauthentication|authenticationmethods)'.

    • Klávesovou zkrátkou CTRL+X a následně klávesami Y a ENTER soubor uložte a zavřete.
  5. Na serveru zavolejte příkaz google-authenticator a zvolte možnost y pro "time based tokens".
  6. Otevřete Google Authenticator aplikaci na mobilním telefonu a možností "+ (Přidat) → naskenovat QR kód" si vložte do telefonu propojení se serverem.
  7. QR kód je definován bezpečnostním klíčem (secret key), který je zobrazen pod daným QR kódem. Tento kód si opište.
  8. Na výzvu přepište kód zobrazený v aplikaci Google Authenticator do terminálu.
  9. Zobrazených záchranných 5 osmímístných kódů si spolu s secret key (2 body výše) pečlivě uschovejte pro možnost použití v případě ztráty telefonu.
  10. na výzvu ohledně aktualizace souboru ~/.google_authenticator odpovězte y
  11. Na výzvu ohledně zákazu opětovného použití kódů odpovězte y
  12. Na výzvu ohledně časového posunu (time skew) odpovězte n
  13. Na výzvu ohledně rate-limitingu odpovězte y
  14. Restartujte ssh(d) service
    sudo systemctl restart ssh
  15. Nyní je aktivováno 2FA při přihlašování (a u varianty common-auth i u sudo příkazů).
  16. Jestliže je na serveru více běžných uživatelů, 2FA autentizační soubor prostřednictvím google-authenticator je nutné provést pro každého uživatele zvlášť. Každý uživatel má vždy vlastní 2FA kódy.
    • Přepnutí se na konkrétního uživatele: $ sudo su - someuser
    • Spuštění 2FA konfigurace pro uživatele $ google-authenticator
    • Návrat na původního uživatele: $ exit

Potřebujete bezpečně nastavit server?

Navrhneme, zabezpečíme a zdokumentujeme sítě i servery.

Servery a sítě