2026 m. liepos 7 d.

Linux SSH 2FA su pam_radius – SSH ir sudo patvirtinimas telefonu

Dviejų veiksnių Linux SSH, sudo ir su apsauga su pam_radius ir Notakey auth-proxy bei saugiu vietiniu atsarginiu prisijungimu, kad neužsirakintumėte.

Tas pats Notakey auth-proxy, kuris jau saugo jūsų VPN ir MikroTik administratoriaus prisijungimą, gali apsaugoti ir prisijungimus prie Linux. Linux PAM posistemėje yra standartinis RADIUS modulis: nukreipkite jį į proxy, ir SSH, sudo bei su greta slaptažodžio reikalaus dar ir patvirtinimo telefone.

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

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

Šis vadovas skirtas Debian/Ubuntu (libpam-radius-auth); RHEL šeimos distribucijose modulis platinamas pavadinimu pam_radius (EPEL), o PAM failai išdėstyti toje pačioje /etc/pam.d/ struktūroje.

Reikalavimai

  • Veikiantis auth-proxy prieš RADIUS serverį, sukonfigūruotas lygiai taip, kaip VPN vadovo 1–3 žingsniuose.
  • Tas pats naudotojo vardas galiniame RADIUS serveryje, Notakey servise (su užregistruotu telefonu) ir kaip paskyra Linux kompiuteryje. PAM tik autentifikuoja; naudotojui vis tiek reikia vietinės (arba katalogo) paskyros, prie kurios jungiamasi.
  • Linux kompiuteris turi pasiekti proxy UDP 1812 prievadu. Slaptažodis tarp jų keliauja PAP formatu, todėl laikykite šį ryšį valdymo tinkle arba paleiskite dokerizuotą proxy pačiame kompiuteryje.

0 žingsnis. Pirmiausia pasiruoškite avarinį išėjimą

Prieš liesdami PAM įsitikinkite, kad veikia grynai vietinis prisijungimas: suteikite root (arba specialiai avarinei administratoriaus paskyrai) stiprų vietinį slaptažodį ir patikrinkite jį konsolėje. Toliau aprašyta konfigūracija visada grįžta prie vietinių slaptažodžių, todėl ši paskyra – jūsų kelias vidun, jei proxy, RADIUS serveris ar tinklas kada nors neveiktų. Padarykite tai iš anksto, o ne tada, kai kas nors jau sugedo.

1 žingsnis. Įdiekite modulį

sudo apt-get install libpam-radius-auth

2 žingsnis. Nukreipkite jį į proxy

Atverkite /etc/pam_radius_auth.conf ir pridėkite vieną eilutę: proxy adresą, bendrąjį slaptažodį (jis turi sutapti su proxy vpn_secret_in) ir skirtąjį laiką sekundėmis:

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

Tada apribokite prieigą prie failo, nes jame saugomas slaptažodis:

sudo chmod 0600 /etc/pam_radius_auth.conf

Skirtasis laikas – tie patys spąstai kaip ir visur kitur šioje serijoje. Numatytoji modulio reikšmė yra 3 sekundės: pakanka slaptažodžio patikrai, bet beviltiškai maža, kai patvirtinti turi žmogus. Nustatykite bent proxy vpn_message_ttl reikšmę (30 s); 60 sekundžių suteikia patogią atsargą.

3 žingsnis. Įjunkite jį PAM konfigūracijoje

Kiekvienam prisijungimo taškui, kurį norite apsaugoti, pridėkite vieną eilutę iš karto virš @include common-auth eilutės. SSH atveju:

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

sufficient reiškia: jei RADIUS atsako Access-Accept (slaptažodis patikrintas galiniame serveryje ir push pranešimas patvirtintas), prisijungimas iš karto pavyksta. Jei ne, PAM pereina prie žemiau esančios įprastos vietinio slaptažodžio patikros.

Tą pačią eilutę pagal poreikį pridėkite ir čia:

  • /etc/pam.d/login – prisijungimai konsolėje
  • /etc/pam.d/sudo – kiekvienas sudo klaus telefono (saugu, bet dažnoka; padėtį gelbsti sudo prisijungimo duomenų podėlis)
  • /etc/pam.d/su – naudotojo keitimas

Galiausiai atverkite /etc/pam.d/common-auth ir prie esamos pam_unix.so eilutės pridėkite try_first_pass:

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

(Kitos šios eilutės parinktys skirtingose laidose skiriasi; pridedama tik try_first_pass.) Be jos naudotojo, grįžtančio prie vietinio autentifikavimo, slaptažodžio klausiama antrą kartą; su ja jau įvestas slaptažodis panaudojamas tyliai.

4 žingsnis. Patikrinkite, ar sshd tikrai naudoja PAM

/etc/ssh/sshd_config faile PAM pagrįstam autentifikavimui reikia:

UsePAM yes
KbdInteractiveAuthentication yes

(abi reikšmės Debian/Ubuntu sistemose yra numatytosios). Svarbu žinoti: SSH prisijungimai viešuoju raktu PAM autentifikavimo fazę aplenkia visiškai: prisijungimas raktu push pranešimo nesukels. Jei norite rakto ir push pranešimo kartu, nustatykite AuthenticationMethods publickey,keyboard-interactive, bet šį variantą prieš diegdami išbandykite atskirai.

5 žingsnis. Sukurkite naudotojus, prisijungiančius tik su push patvirtinimu

Štai gudrybė, dėl kurios ši sąranka tokia tvarkinga: kurkite naudotojus be vietinio slaptažodžio.

sudo useradd -m -G sudo john

Jokio passwd po to: paskyros vietinis slaptažodis lieka užrakintas. Šiam naudotojui lieka lygiai vienas kelias vidun: RADIUS per proxy, tai yra slaptažodis ir patvirtinimas telefone. Vietinėje sistemoje nėra ko atspėlioti perrinkimo atakomis. Jūsų avarinė administratoriaus paskyra iš 0 žingsnio lieka vienintelė su grynai vietiniu slaptažodžiu.

Išbandykite atsargiai

Palikite veikiančią sesiją atvirą ir junkitės per SSH iš antro terminalo su RADIUS naudotojo vardu:

  • Slaptažodžio užklausa elgiasi įprastai; jį įvedus sesija laukia: tai proxy laiko mainus atvirus.
  • Į telefoną atkeliauja push pranešimas. Patvirtinus → gaunate terminalą. Atmetus arba ignoruojant → pasibaigus skirtajam laikui prisijungimas nepavyksta.
  • Įsitikinkite, kad avarinė paskyra vis dar prisijungia su savo vietiniu slaptažodžiu.

Pradinę sesiją uždarykite tik tada, kai pavyksta abi patikros.

Trikčių šalinimas

  • Prisijungimas nepavyksta akimirksniu, push pranešimo nėra. /etc/pam_radius_auth.conf faile skirtasis laikas vis dar numatytosios 3 sekundės arba slaptažodis nesutampa su proxy vpn_secret_in.
  • Push pranešimo nėra, bet laukiama. Naudotojo vardas nesutampa tarp RADIUS ir Notakey serviso arba telefonas neužregistruotas šioje aplikacijoje.
  • Slaptažodžio klausiama du kartus. common-auth faile pam_unix eilutėje trūksta try_first_pass.
  • SSH prisijungimai raktu negauna push pranešimo. Taip ir turi būti; autentifikavimas viešuoju raktu aplenkia PAM autentifikavimo fazę (žr. 4 žingsnį).

Bendras vaizdas

Vienas proxy, vienas RADIUS serveris – ir dabar VPN, maršrutizatoriaus valdymo plokštuma ir visas jūsų Linux parkas reikalauja patvirtinimo telefone. Prie tos pačios sąrankos gali prisijungti bet kas, kas kalba RADIUS ar PAM.

Susiję vadovai

← Visi įrašai

Pirmasis prisijungimas be slaptažodžio – jau šią savaitę

30 minučių pokalbis su inžinieriumi, o ne pardavimų prezentacija. Kartu suplanuosime, kaip jūsų VPN, SSO ar Windows aplinkoje paleisti veikiantį bandomąjį projektą.