Дозвольте кожному обліковому запису входити як звичайно, але користуватися VPN може лише одна група. PAM може виразити цю різницю без другого сховища паролів, а плагін OpenVPN можна спрямувати на службу, яка містить лише потрібні вам перевірки. Хитрість у тому, щоб побудувати цю службу, випадково не успадкувавши системний стек.

Цей огляд починається з імені служби плагіна, будує політику, а потім перевіряє три важливі результати: учасника, стороннього з правильним паролем і хибні облікові дані.

Навіщо окрема служба PAM

Плагін auth-pam приймає ім'я служби як аргумент. Це ім'я вибирає файл у /etc/pam.d, і саме стек із цього файлу виконується під час входу через VPN. Якщо передати те саме ім'я, яке використовує системний вхід, ви успадкуєте кожне рішення з цього стеку, включно з доданими пізніше з не пов'язаних причин.

Натомість створіть окрему службу. Почніть із робочого стеку, який уже автентифікує через потрібний backend, наприклад локальний файл паролів, SSSD або службу каталогу, потім додайте правило допустимості. Копіювання двох рядків у порожній файл — поширена помилка: термін дії пароля, блокування облікового запису та інші перевірки можуть бути в стеку, який ви не скопіювали.

Відокремлення служби також обмежує масштаб шкоди. Правило лише для VPN у спільному стеку може заборонити доступ через SSH або консоль усім, що перетворює зміну доступу на збій.

Написання правила групи

Перевірка допустимості належить до фази облікового запису, після перевірки облікових даних. Правило на кшталт account required pam_succeed_if.so user ingroup vpnusers дозволяє обробці продовжуватися лише тоді, коли автентифікований користувач є членом цієї групи.

Цей рядок — фрагмент, а не повна служба. Вбудуйте його туди, куди доходить кожен прийнятний шлях, і перевірте керівні прапорці навколо нього. Керування sufficient або перехід вище в стеку може завершити обробку до того, як спрацює ваше правило, і тоді обмеження перетворюється на побажання.

Не додавайте use_uid за звичкою. Без нього модуль оцінює користувача, який автентифікується; з ним модуль оцінює обліковий запис, під яким працює процес OpenVPN, а це зазвичай root або службовий обліковий запис і тому не та людина, яка входить.

Членство в групі походить із розв'язання ідентичності системи, а не зі знайомого вам імені. Для користувачів каталогу переконайтеся, що той самий backend відповідає на групові запити для цього користувача, оскільки локальна група зі знайомим ім'ям — інший об'єкт, ніж група каталогу з тим самим ім'ям.

Пастки порядку та ідентичності

Розмістіть правило групи після стеку автентифікації та після кожної перевірки, яка все ще має діяти, але до або поруч із перевірками облікового запису, які ви зберігаєте. PAM оцінює модулі в порядку файлу, і керівне значення в кожному рядку вирішує, чи є збій остаточним.

Стережіться дубльованих стеків. Частий шаблон — include, який уже містить правило облікового запису, а за ним ваше власне правило групи, що дає два рішення там, де ви очікували одне. Читайте включений файл, а не лише той, який редагували. Швидкий спосіб побачити фактичний порядок — читати файл згори донизу й записувати кожне керівне значення.

Збережіть інші вимоги допуску недоторканими. Успішний пароль не замінює перевірки сертифіката, другий фактор або авторизацію після підключення, і ця політика не замінює жодної з них. Вона лише вирішує, чи може обліковий запис розглядатися для доступу до VPN.

Перевірка учасників, сторонніх і неправильних паролів

Перевірте три випадки, перш ніж вважати політику завершеною. Учасник успішно підключається. Дійсний обліковий запис поза групою підтверджує свій пароль, але отримує відмову в доступі до VPN. Неправильний пароль для будь-якого з облікових записів відхиляється на етапі автентифікації, а не правилом групи.

Дивіться на помилку, видиму клієнту, і журнал сервера разом, бо обидві відмови можуть виглядати однаково для людини, яка підключається. Різниця важлива для підтримки: сторонньому з правильним паролем потрібна зміна групи, а неправильний пароль вимагає скидання облікових даних.

Тримайте другий сеанс відкритим, поки редагуєте PAM, і після зміни перевірте також звичайний вхід через SSH. Сенс окремої служби в тому, що системний вхід має залишитися недоторканим, і єдиний спосіб це знати — перевірити.

Якщо щось зламалося, відновіть попередній файл служби з копії. Потрібне правило легко сформулювати: членство робить обліковий запис допустимим для доступу до VPN, і всі інші обов'язкові перевірки продовжують діяти.

Схожі статті