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.

Postup přidání a aktivace Google Authenticator 2FA metody na Ubuntu serveru

  1. Do mobilního telefonu si nainstalujte aplikaci "Google Authenticator" od vydavatele Google.
  2. Na serveru nainstalujeme příkazem sudo apt install -y libpam-google-authenticator balíček Google authentizátoru
    • Jestliže chceme 2FA u lokálního přihlašování, záznam auth required pam_google_authenticator.so vložíme do sudo nano /etc/pam.d/common-auth. Přidaná část je vyznačena tučně. Jestliže jej vložíme na začátek, viz vyznačená část níže, 2FA kód bude vyžadován před heslem. Jestliže jej vložíme na konec souboru, 2FA bude vyžadováno až po zadání hesla.

      ...
      # pam-auth-update to manage selection of other modules.  See
      # pam-auth-update(8) for details.
      
      # Enable Google Authenticator
      auth required pam_google_authenticator.so
      
      # here are the per-package modules (the "Primary" block)
      ...
      
    • Jestliže 2FA chceme jen u vzdáleného přihlašování, záznam auth required pam_google_authenticator.so vložíme do konfiguračního PAM (pluggable authentication modules) souboru sudo nano /etc/pam.d/sshd. V něm si povšimněme záznamu @include common-auth, který jsme možná aktualizovali v bodě výše - pokud ano, záznam auth required pam_google_authenticator.so je načítán již s tímto souborem - tedy v případě definovaného 2FA u lokálního přihlašování je 2FA automaticky definováno i u vzdáleného přihlašování. Pokud jsme do onoho souboru tento záznam nevkládali (nechceme 2FA u lokálního přihlašování), můžeme jej vložit přímo do tohoto souboru sudo nano /etc/pam.d/sshd, který poté bude vypadat následovně:

      # PAM configuration for the Secure Shell service
      
      # Standard Un*x authentication.
      @include common-auth
      
      # Enable Google Authenticator
      auth required pam_google_authenticator.so
      
      # Disallow non-root logins when /etc/nologin exists.
      account    required     pam_nologin.so
      

      Poznámka: Nechceme-li dále vyžadovat heslo při vzdáleném přihlašování, záznam @include common-auth můžeme zakomentovat (Pohlídejte si však, že záznam pro 2FA máte i v souboru sudo nano /etc/pam.d/sshd.

      Klávesovou zkrátkou ctrl+x soubor uložíme a opustíme

  3. Příkazem sudo nano /etc/ssh/sshd_config otevřeme konfigurační SSHD soubor a ujistíme se, že KbdInteractiveAuthentication je nastaven na možnost yes

    Dále, na konec onoho souboru vložíme 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.

    Klávesovou zkratkou ctrl+x soubor uložíme a ukončíme.

  4. Na serveru zavoláme příkaz google-authenticator a zvolíme možnost y pro "time based tokens".
  5. Otevřeme Google Authenticator aplikaci na mobilním telefonu a možností "+ (Přidat) → naskenovat QR kód" si vložíme do telefonu propojení se serverem.
  6. QR kód je difinován bezpečnostním klíčem (secret key), který je zobrazen pod daným QR kódem. Tento kód si opíšeme.
  7. Na základě vyzvání vložíme kód zobrazený v Google Authenticátor aplikace na server.
  8. Zobrazených záchranných 5 osmímístných kódů si spolu s secret key (2 body výše) pečlivě uschováme pro možnost použití v případě ztráty telefonu.
  9. na výzvu ohledně aktualizace souboru /*username*/.google_authenticator odpovězte y
  10. Na výzvu ohledně zákazu opětovného použití kódů odpovězte y
  11. Na výzvu ohledně časového posunu (time skew) odpovězte n
  12. Na výzvu ohledně rate-limitingu odpovězte y
  13. Příkazem sudo systemctl restart sshd se provede restart sshd.
  14. Příkazem sudo systemctl restart ssh se provede restart SSH.
  15. Nyní je aktivováno 2FA při přihlašování a sudo příkazech.