Я изучаю PAM и немного не понимаю, что означает некоторая комбинация контрольных флагов. Из документации Red Hat мы имеем:
требуемый
сбой такого PAM в конечном итоге приведет к сбою возврата PAM-API, но только после того, как будут вызваны оставшиеся стековые модули (для этой службы и типа)реквизит
как требуется, однако, в случае, если такой модуль возвращает ошибку, управление возвращается непосредственно приложению.Достаточного
успеха такого модуля достаточно, чтобы удовлетворить требования аутентификации стека модулей (если ранее требуемый модуль потерпел неудачу, успех этого модуля игнорируется). Отказ этого модуля не считается фатальным для удовлетворения заявки, которую этот тип успешно выполнил. Если модуль завершается успешно, структура PAM немедленно возвращает приложение успешной работе, не пытаясь использовать другие модули.
Таким образом, в моем понимании, если модуль requisite
выходит из строя, весь стек модулей не будет проанализирован, и элемент управления немедленно вернется к приложению. Если модуль sufficient
завершается успешно, оставшийся стек модулей не будет проанализирован, и элемент управления немедленно вернется к приложению. Если модуль required
выходит из строя, весь стек будет проанализирован.
Теперь я не могу понять, каково будет поведение, когда определенный модуль required
выходит из строя, а другой модуль sufficient
успешно.
источник
required
элемент не удался, зачемPAM
продолжать проходить через стек? если это все равно окончательно провалится?На мой взгляд,
required
управляющий флаг должен быть всегда успешным, чтобы модуль был успешным.sufficient
Помечено модуль игнорируется , если он выходит из строя. Если он успешен, и ни один изrequired
отмеченных выше модулей не дал сбоя, тогда нет необходимости проверять другие модули того же типа, и этот модуль считается успешным. Таким образом, в основном,required
флаг имеет более высокий приоритет, чемsufficient
флаг, но последний имеет возможность перестать проверять остальные из них, если предыдущиеrequired
преуспели.Пример:
Если строки 1, 2, 3 и 4 успешны, то строка 5 может быть пропущена, и модуль
auth
успешен. Если строка 4 не удалась, она игнорируется, а строка 5 проверяется. Если какая-либо из линий 1, 2, 3 потерпела неудачу, то строка 4 не учитывается.источник