Serveryje buvo pridėtas naudotojas, slaptažodis įvestas teisingai, o ryšys vis tiek baigiasi su AUTH_FAILED. Papildinio eilutė paprastai paaiškina kodėl: žodis po papildinio kelio yra PAM tarnybos pavadinimas, ir jis nusprendžia, kuris modulių dėstas atsako į klausimą. Tai ne naudotojo vardas ir ne nuoroda į slaptažodžių failą, kurį OpenVPN skaito pats.

Ką pasirenka antrasis žodis

Konfigūracijos eilutė paima papildinio kelią ir vieną argumentą:

plugin /usr/lib/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn

Tas argumentas perduodamas PAM bibliotekai kaip tarnybos pavadinimas, todėl paleidžiamas dėstas, esantis /etc/pam.d/openvpn. Jei ten įrašysite login, gausite interaktyvią prisijungimo politiką, su tais moduliais, kuriuos ta politika jūsų distribucijoje apima.

Naudokite papildinio kelią, kurį suteikia įdiegtas paketas, o ne iš kito kompiuterio nukopijuotą kelią. Failo vardas ir katalogas skiriasi tarp distribucijų, o neteisingas kelias nepavyksta paleidžiant su papildinio įkėlimo klaida, ne autentifikavimo metu.

Iš kur dėstas iš tikrųjų skaito paskyras

PAM yra paskirstytojas. Tarnybos failas iš eilės išvardija modulius, o pirmasis, kuris gali atsakyti, nulemia rezultatą. Dėstas, kviečiantis pam_unix, skaito vietines paskyras; dėstas, kviečiantis LDAP ar RADIUS modulį, siunčia prisijungimo duomenis visai kitur.

Perskaitykite failą, į kurį išsprendžiamas tarnybos pavadinimas, įskaitant viską, ką jis apima:

cat /etc/pam.d/openvpn
grep -H pam_ /etc/pam.d/openvpn /etc/pam.d/common-auth

Jei dėstas perduoda katalogui, vietinės paskyros pridėjimas nieko nekeičia. Jei jis skaito vietines paskyras, naudotojo sukūrimas kataloge taip pat nieko nekeičia. Paskyra turi egzistuoti ten, kur žiūri dėstas, ir tai yra visa diagnostika daugumoje šių ataskaitų.

Vienas bandymas, du žurnalai

Susiekite vieną nepavykusį ryšį abiejose pusėse. OpenVPN žurnalas rodo papildinio rezultatą ir kliento atmetimą; sistemos autentifikavimo žurnalas rodo, kuris modulis veikė ir ką jis nusprendė. Jų skaitymas tame pačiame laiko intervale yra tai, kas atskiria trūkstamą tarnybos failą nuo backend'o laiko limito. Spraga autentifikavimo žurnale reiškia, kad dėstas nebuvo pasiektas visai.

journalctl -u openvpn-server@server --since "-2 min"
journalctl -t sshd -t sudo --since "-2 min"

Išbandykite tarnybą tiesiogiai įrankiu, kuris kalba PAM, kad nederintumėte VPN ir dėsto vienu metu. Sėkmingas tiesioginis bandymas su tuo pačiu tarnybos pavadinimu ir paskyra susiaurina problemą iki to, kaip demonas perduoda prisijungimo duomenis, o ne iki pačios paskyros.

pamtester openvpn alice authenticate

Jei tiesioginis bandymas nepavyksta su tais pačiais duomenimis, kurie veikia konsolėje, dėstas neskaito to paskyrų šaltinio, kurį numatėte. Jei pavyksta, pažiūrėkite į pokalbį, kurį veda papildinys, ir į tai, ką klientas iš tikrųjų nusiuntė. Paleiskite jį kartą ir su tyčia neteisingu slaptažodžiu, kad matytumėte skirtumą tarp atmetimo ir modulio klaidos. Šie du rezultatai VPN žurnale atrodo identiškai, o čia – visiškai skirtingai.

Atskira tarnyba geriau nei prisijungimo redagavimas

Duokite VPN savo tarnybos failą, kai jo reikalavimai skiriasi nuo interaktyvaus prisijungimo, kaip paprastai būna. login arba common-auth redagavimas keičia politiką kiekvienai programai, kuri juos apima, ir kitas žmogus, derinantis nesusijusią prisijungimo problemą, paveldės jūsų pakeitimą.

Nukopijuokite reikiamus modulius į mažą tarnybos failą, laikykite tvarką aiškiai nurodytą ir pažymėkite, kam jis priklauso. Būtent tą failą reikia tikrinti, kai slaptažodžio pakeitimas atrodo neduodantis jokio rezultato.

Ką klientas siunčia, o ko ne

Klientas pateikia naudotojo vardą ir slaptažodį per palaikomą užklausą ar failą. Serverio papildinys perduoda tas reikšmes į PAM pokalbį; jis neskaito jų iš serverio konfigūracijos. Serverio pusėje esanti eilutė, kuri atrodo apibrėžianti slaptažodį, to nedaro, ir joks profilio redagavimas nesukurs paskyros.

Naudotojo vardas ir slaptažodis gali egzistuoti šalia klientų sertifikatų, o PAM įjungimas nėra priežastis nustoti tikrinti sertifikatų. Išlaikykite sluoksnius, kurių ketino diegimas, ir taisykite tik paskyrų šaltinį.

Priėmimas yra dvikryptis: numatyta paskyra pasiseka, o paskyra, kurios turėtų būti atsisakyta, vis tiek nepavyksta. Failas auth-pam papildinio README dokumentuoja tarnybos argumentą ir backend'us, kuriems jis gali atstovauti, ir tai yra vieta patvirtinti išdėstymą, kurį bandote sukurti.

Susiję straipsniai