Korisnik je dodat na server, lozinka je ispravno otkucana, a veza se i dalje završava s AUTH_FAILED. Linija dodatka obično objašnjava zašto: riječ nakon putanje dodatka je naziv PAM servisa i ona odlučuje koji stog modula odgovara na pitanje. To nije korisničko ime i nije pokazivač na datoteku s lozinkama koju OpenVPN sam čita.

Šta odabire druga riječ

Konfiguracijska linija prima putanju dodatka i jedan argument:

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

Taj se argument prosljeđuje PAM biblioteci kao naziv servisa, zbog čega se pokreće stog na /etc/pam.d/openvpn. Ako tamo upišete login, dobivate interaktivnu politiku prijave, sa svim modulima koje ta politika uključuje na vašoj distribuciji.

Koristite putanju dodatka koju pruža instalirani paket, a ne putanju kopiranu s drugog hosta. Naziv datoteke i direktorij razlikuju se među distribucijama, a pogrešna putanja pada pri pokretanju s greškom učitavanja dodatka, a ne pri autentifikaciji.

Gdje stog zapravo čita račune

PAM je dispečer. Servisna datoteka redom navodi module, a prvi koji može odgovoriti odlučuje o ishodu. Stog koji poziva pam_unix čita lokalne račune; stog koji poziva LDAP ili RADIUS modul šalje vjerodajnice sasvim drugdje.

Pročitajte datoteku na koju naziv servisa upućuje, uključujući sve što ona uključuje:

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

Ako stog delegira na direktorij, dodavanje lokalnog računa ne mijenja ništa. Ako čita lokalne račune, stvaranje korisnika u direktoriju također ne mijenja ništa. Račun mora postojati tamo gdje stog gleda, i to je cijela dijagnoza u većini ovih izvještaja.

Jedan pokušaj, dva zapisa

Povežite jednu neuspjelu vezu na obje strane. OpenVPN zapis pokazuje rezultat dodatka i odbijanje klijenta; sistemski zapis autentifikacije pokazuje koji je modul radio i šta je odlučio. Čitanje oba u istom vremenskom okviru razdvaja nedostajuću servisnu datoteku od pozadinskog vremenskog prekida. Praznina u zapisu autentifikacije znači da stog uopće nije dosegnut.

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

Testirajte servis izravno alatom koji govori PAM, da ne otklanjate greške istovremeno na VPN-u i na stogu. Uspješan izravni test s istim nazivom servisa i računom svodi problem na to kako daemon prosljeđuje vjerodajnice, a ne na sam račun.

pamtester openvpn alice authenticate

Ako izravni test padne s istim vjerodajnicama koje rade na konzoli, stog ne čita izvor računa koji ste pretpostavili. Ako uspije, pogledajte razgovor koji dodatak vodi i ono što je klijent stvarno poslao. Pokrenite ga jednom i s namjerno pogrešnom lozinkom, da vidite razliku između odbijanja i greške modula. Ta dva ishoda izgledaju identično u VPN zapisu, a ovdje potpuno različito.

Namjenski servis je bolji od uređivanja datoteke za prijavu

Dajte VPN-u vlastitu servisnu datoteku kada se njegovi zahtjevi razlikuju od interaktivne prijave, što je obično slučaj. Uređivanje login ili common-auth mijenja politiku za svaki program koji ih uključuje, a sljedeća osoba koja otklanja greške u nepovezanom problemu prijave nasljeđuje vašu izmjenu.

Kopirajte module koji su vam potrebni u malu servisnu datoteku, držite redoslijed eksplicitnim i zabilježite ko je vlasnik. Ta datoteka je ono što treba provjeriti kada se čini da poništavanje lozinke nema efekta.

Šta klijent šalje, a šta ne

Klijent daje korisničko ime i lozinku kroz podržani upit ili datoteku. Serverski dodatak prosljeđuje te vrijednosti u PAM razgovor; ne čita ih iz serverske konfiguracije. Serverska linija koja izgleda kao da definira lozinku to ne čini, i nikakvo uređivanje profila neće stvoriti račun.

Korisničko ime i lozinka mogu postojati uz klijentske certifikate, a omogućavanje PAM-a nije razlog da prestanete provjeravati certifikate. Zadržite slojeve koje je raspoređivanje namjeravalo i popravite samo izvor računa.

Prihvat je dvosmjeran: predviđeni račun uspijeva, a račun koji treba odbiti i dalje pada. Datoteka README dodatka auth-pam dokumentuje argument servisa i pozadinske sisteme koje može pokrivati; to je mjesto gdje se potvrđuje rješenje koje pokušavate izgraditi.

Povezani članci