OpenVPN PAM: innloggingsargumentet er en tjeneste, ikke en bruker
Ordet etter stien til auth-pam-plugin-modulen velger en PAM-stakk. Les den stakken, finn kontokilden, og test den med pamtester før du redigerer profiler.
En bruker ble lagt til på serveren, passordet ble skrevet riktig, og tilkoblingen ender fortsatt med AUTH_FAILED. Plugin-linjen forklarer vanligvis hvorfor: ordet etter plugin-stien er et PAM-tjenestenavn, og det avgjør hvilken stakk av moduler som svarer på spørsmålet. Det er ikke et brukernavn, og det er ikke en peker til en passordfil som OpenVPN leser selv.
Hva det andre ordet velger
Konfigurasjonslinjen tar en plugin-sti og ett argument:
plugin /usr/lib/openvpn/plugins/openvpn-plugin-auth-pam.so openvpnDet argumentet sendes til PAM-biblioteket som tjenestenavn, noe som gjør stakken i /etc/pam.d/openvpn til den som kjøres. Skriv login der, og du får i stedet den interaktive innloggingspolicyen, med de modulene den policyen tilfeldigvis inneholder på distribusjonen din.
Bruk plugin-stien den installerte pakken tilbyr, ikke en sti kopiert fra en annen vert. Filnavnet og katalogen varierer mellom distribusjoner, og en feil sti feiler ved oppstart med en plugin-lastefeil, ikke ved autentisering.
Hvor stakken faktisk leser kontoer
PAM er en distributør. Tjenestefilen lister opp moduler i rekkefølge, og den første som kan svare avgjør resultatet. En stakk som kaller pam_unix, leser lokale kontoer; en stakk som kaller en LDAP- eller RADIUS-modul, sender legitimasjonen helt andre steder.
Les filen tjenestenavnet løses til, inkludert alt den inkluderer:
cat /etc/pam.d/openvpn
grep -H pam_ /etc/pam.d/openvpn /etc/pam.d/common-authHvis stakken delegerer til en katalog, endrer det ingenting å legge til en lokal konto. Hvis den leser lokale kontoer, endrer det heller ingenting å opprette brukeren i katalogen. Kontoen må finnes der stakken ser, og det er hele diagnosen i de fleste av disse rapportene.
Ett forsøk, to logger
Korreler én mislykket tilkobling på begge sider. OpenVPN-loggen viser plugin-resultatet og klientens avvisning; systemets autentiseringslogg viser hvilken modul som kjørte og hva den besluttet. Å lese dem i samme tidsvindu er det som skiller en manglende tjenestefil fra en backend-timeout. Et hull i autentiseringsloggen betyr at stakken aldri ble nådd.
journalctl -u openvpn-server@server --since "-2 min"
journalctl -t sshd -t sudo --since "-2 min"Test tjenesten direkte med et verktøy som snakker PAM, så du ikke feilsøker VPN-en og stakken samtidig. En vellykket direkte test med samme tjenestenavn og konto snevrer problemet inn til hvordan daemonen sender legitimasjon, ikke til kontoen selv.
pamtester openvpn alice authenticateHvis den direkte testen feiler med de samme legitimasjonene som fungerer i en konsoll, leser ikke stakken kontokilden du antok. Hvis den lykkes, se på samtalen plugin-modulen kjører, og på det klienten faktisk sendte. Kjør den også én gang med et bevisst feil passord, så du ser forskjellen mellom en avvisning og en modulfeil. De to utfallene ser identiske ut i VPN-loggen og helt forskjellige her.
En egen tjeneste slår å redigere innloggingen
Gi VPN-en sin egen tjenestefil når kravene avviker fra interaktiv innlogging, noe de vanligvis gjør. Redigering av login eller common-auth endrer policyen for hvert program som inkluderer dem, og den neste som feilsøker et urelatert innloggingsproblem, arver endringen din.
Kopier modulene du trenger inn i en liten tjenestefil, hold rekkefølgen eksplisitt, og noter hvem som eier den. Den filen er det man sjekker når en passordtilbakestilling ser ut til å ikke ha noen effekt.
Hva klienten sender, og hva den ikke sender
Klienten leverer et brukernavn og et passord via sin støttede forespørsel eller fil. Server-plugin-modulen sender disse verdiene inn i PAM-samtalen; den leser dem ikke fra serverens konfigurasjon. En linje på serversiden som ser ut som den definerer et passord, gjør ikke det, og ingen profilredigering oppretter en konto.
Brukernavn og passord kan eksistere sammen med klient sertifikater, og å aktivere PAM er ikke en grunn til å slutte å verifisere sertifikater. Behold lagene utrullingen hadde tenkt, og reparer bare kontokilden.
Aksept er tosidig: den tiltenkte kontoen lykkes, og en konto som bør avvises, feiler fortsatt. Filen README for auth-pam-plugin-modulen dokumenterer tjenesteargumentet og back-endene den kan stå foran, og det er stedet å bekrefte ordningen du prøver å bygge.