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/loginpro přihlášení na konzoli/etc/pam.d/sudo, kde se každésudoptá telefonu (silné, ale upovídané; sudo si ověření chvíli pamatuje, takže to zůstává snesitelné)/etc/pam.d/supro 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.confje stále na výchozích 3 sekundách, nebo tajný klíč neodpovídá hodnotěvpn_secret_inna 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_unixvcommon-authchybí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
- Dvoufaktorové ověření VPN přes RADIUS – kompletní nastavení auth-proxy: konfigurace proxy, na které tento návod staví
- Dvoufaktorové přihlášení do MikroTik routeru: stejný vzor pro přihlášení k samotnému routeru přes WinBox/SSH