PAM - необхідний та достатній прапор управління


14

Я вивчаю PAM, і я трохи незрозумілий про значення деяких комбінацій прапорів управління. З документації Red Hat ми маємо:

  • необхідний
    збій такої PAM в кінцевому рахунку призведе до відмови PAM-API повернення, але лише після того, як будуть залишені інші складені модулі (для цієї послуги та типу)

  • реквізит ,
    як потрібно, однак, в разі, коли такий модуль повертає помилку, контроль безпосередньо повертається з додатком.

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

Отже, на моє розуміння, якщо модуль requisiteвиходить з ладу, весь стек модулів не буде розібраний, і управління негайно повернеться до програми. Якщо модуль sufficientпройде успішно, решта стеків модулів не буде розібрана, і управління негайно повернеться до програми. Якщо модуль requiredвиходить з ладу, весь стек буде проаналізований.

Тепер я не можу зрозуміти, якою буде поведінка, коли певний модуль requiredвиходить з ладу, а інший модуль sufficientвдається.

Відповіді:


11

PAM проходить через елементи в стеку послідовно. Він зберігає лише пам’ять про те, в якому стані він перебуває (успіх чи заперечення; успіх означає успіх дотепер), а не про те, як він досяг цього стану.

Якщо елемент, позначений sufficientуспішно, бібліотека PAM припиняє обробку цього стека. Це трапляється, чи були попередні requiredпредмети чи ні. У цей момент PAM повертає поточний стан: успіх, якщо жоден попередній requiredелемент не вдався, інакше відмовлено.

Аналогічно, якщо елемент, позначений пунктом requisiteпомилки, бібліотека PAM припиняє обробку і повертає помилку. Тоді не має значення, чи requiredне вдався попередній елемент.

Іншими словами, requiredне обов'язково викликати обробку всього стека. Це означає лише продовжувати.


Але якщо будь-який requiredелемент не вдався, чому PAMпотрібно продовжувати проходити стек? якщо вона остаточно провалиться?
Мохаммед Нурелдін

1
@MohammedNoureldin Навіть якщо спроба входу не вдалася, потрібно зробити деякі речі, такі як реєстрація, додавання тайм-ауту проти спроб грубої сили тощо. Також зазвичай система не виявляє точної причини відмови, наприклад, якщо шукати ім'я користувача не вдається, тоді користувачеві все ще пропонується ввести пароль.
Жил "ТАК - перестань бути злим"

Порядок - це порядок, у якому вони вказані у конфігурації?
OrangeDog

@OrangeDog Так. Модуль, зазначений у першому рядку, виконується, потім виконується другий рядок (або пропускається залежно від результату першого рядка) тощо.
Жил 'SO- перестань бути злим'

1

На мою думку, requiredконтрольний прапор повинен бути завжди успішним, щоб модуль був успішним.

sufficientПозначено модуль ігнорується , якщо він виходить з ладу. Якщо він успішний, і жодні з requiredпозначених вище модулів не вийшли з ладу, жодні інші модулі одного типу не повинні перевірятися, і модуль вважається успішним. Таким чином, requiredпрапор має більш високий пріоритет, ніж sufficientпрапор, але останній має можливість припинити перевірку решти, якщо попередній був requiredуспішним.

Приклад:

1 auth       required     /lib/security/pam_nologin.so
2 auth       required     /lib/security/pam_securetty.so
3 auth       required     /lib/security/pam_env.so
4 auth       sufficient   /lib/security/pam_rhosts_auth.so
5 auth       required     /lib/security/pam_stack.so service=system-auth

Якщо рядки 1, 2, 3 і 4 є успішними, то рядок 5 можна пропустити і модуль authуспішний. Якщо рядок 4 не є успішною, її ігнорують, а рядок 5 перевіряють. Якщо будь-який з рядків 1, 2, 3 провалився, рядок 4 не враховується.


1
Я думаю, його питання полягає в тому, що станеться, якщо 1 не вдасться, а 2-4 - успіху. 5 біжить? Якби 1 вдалося, 5 не було б запущено. Або іншими словами, чи застосовується "зупинка після достатнього успіху", якщо попередній необхідний модуль не вдався?
cjm

Ні, модуль аутентифікації не зможе виконати таке поєднання.
dsmsk80

Питання не в тому, чи не вдасться авторизуватися. Це буде. Питання полягає в тому, чи запуститься модуль 5 до того, як про помилку буде повідомлено додатку.
cjm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.