Користувача додали на сервері, пароль ввели правильно, а з'єднання все одно завершується з 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 описує аргумент служби та серверні частини, які він може обслуговувати, і саме там варто підтвердити схему, яку ви намагаєтеся побудувати.

Схожі статті