PAM (Pluggable Authentication Modules) — це система під GNU/Linux, яка дозволяє багатьом програмам або службам централізовано автентифікувати користувачів. Іншими словами:
PAM — це набір бібліотек, який дозволяє системному адміністратору Linux налаштовувати методи автентифікації користувачів. Він забезпечує гнучкий і централізований спосіб перемикання методів автентифікації для захищених програм за допомогою файлів конфігурації замість зміни коду програми. - Wikipedia
Цей документ не призначений для того, щоб навчити вас, як саме загартувати машину. Це скоріше довідковий посібник, щоб показати вам, що PAM може робити, а не те, що ви маєте робити.
Автентифікація — це етап, під час якого перевіряється, що ви є особою, за яку себе видаєте. Найпоширенішим прикладом є пароль, але існують і інші форми автентифікації.
Реалізація нового методу автентифікації не повинна вимагати змін у вихідному коді конфігурації програми чи служби. Ось чому програми покладаються на PAM, який надає їм примітиви*, необхідні для автентифікації своїх користувачів.
Таким чином, усі програми в системі можуть реалізувати такі складні функції, як SSO (єдиний вхід), OTP (Одноразовий пароль) або Kerberos у абсолютно прозорий спосіб. Системний адміністратор може вибрати, яку саме політику автентифікації використовувати для окремої програми (наприклад, для посилення служби SSH) незалежно від програми.
Кожна програма або служба, що підтримує PAM, матиме відповідний файл конфігурації в каталозі /etc/pam.d/. Наприклад, процес login призначає назву /etc/pam.d/login своєму файлу конфігурації.
* Примітиви — це буквально найпростіші елементи програми або мови, які дозволяють створювати на їх основі більш витончені та складні речі.
Увага
Неправильно налаштований екземпляр PAM може поставити під загрозу безпеку всієї системи. Якщо PAM вразливий, то вразлива вся система. Робіть будь-які зміни обережно.
Директива використовується для налаштування програми для використання з PAM. Директиви матимуть такий формат:
mechanism [control] path-to-module [argument]
Директива (повний рядок) складається з механізму (auth, обліковий запис, пароль або сеанс), перевірка успіху (включити, необов'язково, обов'язково, ...), шлях до модуля та, можливо, аргументи (наприклад, revoke).
Кожен файл конфігурації PAM містить набір директив. Директиви інтерфейсу модуля можна складати або розміщувати одна на одній. Насправді порядок, у якому перераховані модулі, дуже важливий для процесу автентифікації.
Наприклад, ось файл конфігурації /etc/pam.d/sudo:
#%PAM-1.0
auth include system-auth
account include system-auth
password include system-auth
session include system-auth
Механізми PAM (auth, account, session і password) вказують на успіх або помилку. Контрольні прапорці (required, requisite, sufficient, optional) повідомляють PAM, як обробляти цей результат.
Успішне завершення всіх required модулів є необхідним.
Якщо модуль пройдено: решта ланцюжка виконується. Запит дозволений, якщо інші модулі не дають збою.
Якщо модуль виходить з ладу: виконується решта ланцюжка. Зрештою запит відхилено.
Для продовження автентифікації модуль має бути успішно перевірено. Якщо перевірка модуля, позначеного як required, не вдається, користувач не отримує сповіщення, доки не буде перевірено всі модулі, пов’язані з цим інтерфейсом.
Необхідно успішне проходження всіх необхідних модулів.
Якщо модуль пройдено: решта ланцюжка виконується. Запит дозволений, якщо інші модулі не дають збою.
Якщо модуль не працює: запит негайно відхиляється.
Для продовження автентифікації модуль має бути успішно перевіреним. Проте, якщо перевірка модуля, позначеного requisite, не вдається, користувач негайно отримує повідомлення про невдачу першого required або requisite модуля.
Модулі з позначкою sufficient можуть бути використані, щоб дозволити користувачеві «достроково» за певних умов:
Якщо модуль завершується успішно: Запит на автентифікацію негайно дозволяється, якщо жоден із попередніх модулів не вдався.
Якщо модуль не працює: модуль ігнорується. Решта ланцюжка виконується.
Проте, якщо перевірка модуля з позначкою sufficient пройшла успішно, але модулі з позначкою required або requisite не пройшли перевірки, успіх модуля sufficient ігнорується, і запит не виконується.
Модуль pam_unix дозволяє вам керувати глобальною політикою автентифікації.
У /etc/pam.d/system-auth можна додати:
password sufficient pam_unix.so sha512 nullok
Для цього модуля можливі аргументи:
nullok: у механізмі auth дозволяє порожній пароль для входу.
sha512 визначає алгоритм шифрування в механізмі пароля.
debug: надсилає інформацію до syslog.
remember=n: використовуйте це, щоб запам’ятати останні n використаних паролів (працює разом із файлом /etc/security/opasswd, який створюється адміністратором).
Цей модуль використовує бібліотеку cracklib для перевірки надійності нового пароля. Він також може перевірити, чи новий пароль не побудовано на основі старого. Це лише впливає на механізм пароля.
За замовчуванням цей модуль перевіряє наступні аспекти та відхиляє, якщо це так:
Чи це новий пароль зі словника?
Чи є новий пароль паліндромом старого (наприклад: azerty <> ytreza)?
Користувач змінив лише регістр пароля (наприклад, azerty <>AzErTy)?
Можливі аргументи для цього модуля:
retry=n: накладає n запитів (1` за умовчанням) для нового пароля.
difok=n: накладає принаймні n символів (10 за умовчанням), відмінних від старого пароля. Якщо половина символів нового пароля відрізняється від старого, новий пароль вважається дійсним.
minlen=n: накладає пароль мінімум з n+1 символів. Ви не можете призначати мінімум менше 6 символів (модуль скомпільовано таким чином).
Інші можливі аргументи:
dcredit=-n: нав’язує пароль, що містить щонайменше n цифр,
ucredit=-n: нав’язує пароль, що містить принаймні n великих літер,
credit=-n: нав’язує пароль, що містить принаймні n малих літер,
ocredit=-n: накладає пароль, що містить принаймні n спеціальних символів.
Механізм auth приймає або забороняє автентифікацію та скидає лічильник.
Механізм account збільшує лічильник.
Деякі аргументи модуля pam_tally включають:
onerr=fail: збільшує лічильник.
deny=n: після перевищення кількості n невдалих спроб обліковий запис блокується.
no_magic_root: можна використовувати для заборони доступу до служб кореневого рівня, запущених демонами.
напр. не використовуйте це для su.
reset: скидає лічильник до 0, якщо автентифікацію перевірено.
lock_time=nsec: обліковий запис заблоковано на n секунд.
Цей модуль працює разом із файлом за замовчуванням для невдалих спроб /var/log/faillog (який можна замінити іншим файлом з аргументом file=xxxx) і пов’язаним команда faillog.
Синтаксис команди faillog:
faillog[-m n] |-u login][-r]
Опції:
m: щоб визначити максимальну кількість невдалих спроб у вікні команд,
Наразі ви повинні мати набагато краще уявлення про те, що може робити PAM, і як вносити зміни, коли це необхідно. Однак ми повинні повторити важливість бути дуже, дуже обережними з будь-якими змінами, які ви вносите в модулі PAM. Ви можете заблокувати себе у своїй системі або впустити всіх інших.
Ми наполегливо рекомендуємо тестувати всі зміни в середовищі, яке можна легко повернути до попередньої конфігурації. Тим не менш, отримуйте задоволення!
Author: Antoine Le Morvan
Contributors: Steven Spencer, Ezequiel Bruni, Ganna Zhyrnova