Корисник је додат на серверу, лозинка је унета исправно, а веза се ипак завршава са AUTH_FAILED. Обично разлог објашњава линија прикључка: реч после путање до прикључка је назив PAM службе и управо она одређује који скуп модула одговара на питање. То није корисничко име и није показивач на датотеку са лозинкама коју OpenVPN сам чита.

Шта бира друга реч

Конфигурациона линија прихвата путању до прикључка и један аргумент:

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

Тај аргумент се прослеђује PAM библиотеци као назив службе, па се зато извршава стек у /etc/pam.d/openvpn. Напишите login тамо и уместо тога ће важити политика интерактивне пријаве, са свим модулима које она укључује у вашој дистрибуцији.

Користите путању до прикључка коју даје инсталирани пакет, а не путању преписану са другог хоста. Назив датотеке и директоријум разликују се међу дистрибуцијама, а погрешна путања не успева при покретању са грешком при учитавању прикључка, а не при аутентификацији.

Одакле стек заиста чита налоге

PAM је диспечер. Датотека службе наводи модуле по реду, а први који може да одговори одлучује исход. Стек који позива pam_unix чита локалне налоге; стек који позива LDAP или RADIUS модул шаље акредитиве сасвим на друго место.

Прочитајте датотеку у коју се разрешава назив службе, укључујући све што она укључује:

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

Ако стек препушта решење директоријуму, додавање локалног налога не мења ништа. Ако чита локалне налоге, стварање корисника у директоријуму такође не мења ништа. Налог мора да постоји тамо где стек тражи, и то је цела дијагноза у већини оваквих извештаја.

Један покушај, два дневника

Пратите једну неуспелу везу на обе стране. Дневник OpenVPN-а показује резултат прикључка и одбијање клијента; системски дневник аутентификације показује који се модул извршио и шта је одлучио. Читање њих у истом временском прозору је оно што раздваја недостајућу датотеку службе од истека времена на позадинској страни. Празнина у дневнику аутентификације значи да стек уопште није достигнут.

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

Тестирајте службу директно алатом који говори PAM, да не бисте истовремено дебаговали VPN и стек. Успешан директан тест са истим називом службе и истим налогом своди проблем на то како демон преноси акредитиве, а не на сам налог.

pamtester openvpn alice authenticate

Ако директан тест не успе са истим акредитивима који раде у конзоли, стек не чита извор налога који сте претпоставили. Ако успе, погледајте разговор који води прикључак и оно што је клијент заиста послао. Пустите га још једном са намерно погрешном лозинком, да видите разлику између одбијања и грешке у модулу. Та два исхода изгледају исто у дневнику VPN-а, а овде сасвим различито.

Посвећена служба боља је од уређивања login

Дајте VPN-у сопствену датотеку службе када се његови захтеви разликују од интерактивне пријаве, а обично се разликују. Уређивање login или common-auth мења политику за сваки програм који их укључује, а следећа особа која буде дебаговала неповезан проблем пријаве наследиће вашу измену.

Копирајте потребне модуле у малу датотеку службе, задржите редослед експлицитним и забележите ко је власник. Управо ту датотеку треба проверити када ресетовање лозинке изгледа да нема ефекта.

Шта клијент шаље, а шта не

Клијент доставља корисничко име и лозинку преко подржаног упита или датотеке. Серверски прикључак прослеђује те вредности у PAM разговор; он их не чита из конфигурације сервера. Серверска линија која изгледа као да дефинише лозинку то не ради, и ниједно уређивање профила неће створити налог.

Корисничко име и лозинка могу постојати заједно са клијентским сертификатима, а укључивање PAM-а није разлог да се прекине провера сертификата. Задржите слојеве које је распоређивање предвидело и поправите само извор налога.

Прихватање је двострано: предвиђени налог успева, а налог који треба да буде одбијен и даље не успева. README прикључка auth-pam описује аргумент службе и позадинске делове које може да опслужи, и управо тамо треба потврдити поставку коју градите.

Повезани чланци