7. července 2026

Dvoufaktorové ověření SSH na Linuxu s pam_radius – schválení telefonem pro SSH i sudo

Schvalování telefonem pro SSH, sudo a su na Linuxu s pam_radius a Notakey auth-proxy, včetně bezpečného lokálního přístupu, abyste se nikdy nezamkli.

Stejná Notakey auth-proxy, která už chrání vaši VPN a administrátorské přihlášení do MikroTiku, dokáže ochránit i přihlašování do Linuxu. Součástí PAM stacku v Linuxu je standardní RADIUS modul: nasměrujte jej na proxy a SSH, sudo i su budou kromě hesla vyžadovat také schválení na telefonu.

sshd / sudo ──PAM──▶ pam_radius ──RADIUS──▶ Notakey auth-proxy ──▶ your RADIUS server

                                                    └──▶ push ──▶ user's phone

Tento návod je psán pro Debian/Ubuntu (libpam-radius-auth); v distribucích rodiny RHEL je modul zabalen jako pam_radius (EPEL) a soubory PAM najdete ve stejné struktuře /etc/pam.d/.

Co budete potřebovat

  • Funkční auth-proxy před RADIUS serverem, nastavenou přesně podle kroků 1–3 návodu pro VPN.
  • Stejné uživatelské jméno v podřízeném RADIUS serveru, ve službě Notakey (se zaregistrovaným telefonem) i jako účet na daném linuxovém stroji. PAM pouze autentizuje; uživatel stále potřebuje lokální (nebo adresářový) účet, ke kterému se přihlásí.
  • Linuxový stroj musí mít k proxy přístup přes UDP port 1812. Heslo mezi nimi putuje jako PAP, proto tuto komunikaci držte v management síti, případně spusťte dockerizovanou proxy přímo na daném stroji.

Krok 0 – Nejdříve si připravte nouzový přístup

Než sáhnete na PAM, ověřte, že funguje čistě lokální přihlášení: nastavte rootovi (nebo vyhrazenému nouzovému administrátorovi) silné lokální heslo a vyzkoušejte je na konzoli. Konfigurace níže vždy umožňuje návrat k lokálním heslům, takže tento účet je vaší cestou dovnitř, kdyby proxy, RADIUS server nebo síť někdy vypadly. Udělejte to hned na začátku, ne až se něco pokazí.

Krok 1 – Nainstalujte modul

sudo apt-get install libpam-radius-auth

Krok 2 – Nasměrujte modul na proxy

Upravte /etc/pam_radius_auth.conf a přidejte jeden řádek: adresu proxy, sdílený tajný klíč (odpovídá hodnotě vpn_secret_in na proxy) a časový limit v sekundách:

# server[:port]    shared_secret            timeout (s)
10.0.1.20          secret_to_radius_server  60

Poté soubor zabezpečte, protože obsahuje tajný klíč:

sudo chmod 0600 /etc/pam_radius_auth.conf

Časový limit je stejná past jako všude jinde v této sérii. Výchozí hodnota modulu jsou 3 sekundy: pro kontrolu hesla dostačující, pro schválení člověkem beznadějně málo. Nastavte jej nejméně na hodnotu vpn_message_ttl proxy (30 s); 60 dává pohodlnou rezervu.

Krok 3 – Zapněte modul v PAM

U každého vstupního bodu, který chcete chránit, přidejte jeden řádek těsně nad řádek @include common-auth. Pro SSH:

sudo nano /etc/pam.d/sshd
auth sufficient pam_radius_auth.so
@include common-auth

sufficient znamená: pokud RADIUS odpoví Access-Accept (heslo ověřeno podřízeným serverem a push schválen), přihlášení okamžitě uspěje. Pokud ne, PAM pokračuje k běžné kontrole lokálního hesla pod tímto řádkem.

Stejný řádek podle potřeby přidejte i do těchto souborů:

  • /etc/pam.d/login pro přihlášení na konzoli
  • /etc/pam.d/sudo, kde se každé sudo ptá telefonu (silné, ale upovídané; sudo si ověření chvíli pamatuje, takže to zůstává snesitelné)
  • /etc/pam.d/su pro přepínání uživatelů

Nakonec upravte /etc/pam.d/common-auth a k existujícímu řádku pam_unix.so přidejte try_first_pass:

auth    [success=1 default=ignore]      pam_unix.so nullok_secure try_first_pass

(Ostatní volby na tomto řádku se liší podle verze distribuce; přidáváte pouze try_first_pass.) Bez něj je uživatel při návratu k lokální autentizaci vyzván k zadání hesla podruhé; s ním se již zadané heslo tiše použije znovu.

Krok 4 – Ověřte, že sshd skutečně používá PAM

Autentizace přes PAM vyžaduje v /etc/ssh/sshd_config tato nastavení:

UsePAM yes
KbdInteractiveAuthentication yes

(obojí jsou na Debianu/Ubuntu výchozí hodnoty). Jednu věc je dobré vědět: přihlášení SSH veřejným klíčem autentizační fázi PAM zcela obchází, takže přihlášení klíčem žádný push nevyvolá. Chcete-li klíč a k tomu push, nastavte AuthenticationMethods publickey,keyboard-interactive, ale tuto variantu před nasazením zvlášť otestujte.

Krok 5 – Vytvořte uživatele ověřované jen přes push

A tady je trik, díky kterému je celé nastavení čisté: vytvářejte uživatele bez lokálního hesla.

sudo useradd -m -G sudo john

Žádné následné passwd: lokální heslo účtu zůstane zamčené. Takový uživatel má teď přesně jednu cestu dovnitř: RADIUS přes proxy, tedy heslo a schválení na telefonu. Lokálně není co prolamovat hrubou silou. Jediným účtem s čistě lokálním heslem zůstává váš nouzový administrátor z kroku 0.

Otestujte, opatrně

Nechte své funkční připojení otevřené a z druhého terminálu se přihlaste přes SSH pod uživatelským jménem z RADIUSu:

  • Výzva k zadání hesla se chová jako obvykle; po jeho zadání relace čeká, což znamená, že proxy drží výměnu otevřenou.
  • Na telefon dorazí push notifikace. Schválit → shell. Zamítnout nebo ignorovat → přihlášení po vypršení limitu selže.
  • Ověřte, že se nouzový účet stále přihlásí svým lokálním heslem.

Původní relaci zavřete teprve poté, co projdou obě kontroly.

Řešení potíží

  • Přihlášení selže okamžitě, žádný push. Časový limit v /etc/pam_radius_auth.conf je stále na výchozích 3 sekundách, nebo tajný klíč neodpovídá hodnotě vpn_secret_in na proxy.
  • Push nedorazí, ale čekání proběhne. Uživatelské jméno se liší mezi RADIUSem a službou Notakey, nebo telefon není k této aplikaci zaregistrovaný.
  • Systém se ptá na heslo dvakrát. Na řádku pam_unix v common-auth chybí try_first_pass.
  • Přihlášení SSH klíčem nevyvolá push. To je očekávané chování; autentizace veřejným klíčem obchází autentizační fázi PAM (viz krok 4).

Kam to zapadá

S jednou proxy a jedním RADIUS serverem teď schválení na telefonu vyžaduje VPN, administrátorské rozhraní routeru i všechny vaše linuxové servery. Stejně lze připojit cokoli dalšího, co mluví RADIUSem nebo PAM.

Související návody

← Všechny články

První přihlášení bez hesla už tento týden

30minutový rozhovor s inženýrem, žádná prodejní prezentace. Společně naplánujeme, jak ve vašem prostředí s VPN, SSO nebo Windows spustit funkční pilotní projekt.