Я читал все, что могу найти в PAM (например, http://wpollock.com/AUnix2/PAM-Help.htm), однако я все еще не понимаю, как именно должны работать расширенные параметры. Например, в каждой ссылке говорится следующее:
Each of the four control-flag keywords (required, requisite, sufficient, and
optional) have an equivalent expression in terms of the [...] syntax:
required
[success=ok new_authtok_reqd=ok ignore=ignore default=bad]
Насколько я понимаю, модули могут возвращать множество токенов, и что действие, связанное с каждым токеном, описано в файле конфигурации. Исходя из этого понимания, что
new_authtok_reqd=ok
иметь отношение к обязательный контрольный флаг? В чем смысл / цель
ignore=ignore ?
Только это:
success=ok
то, что я думаю, соответствует обязательный поведение, но делает
default=bad
означает, что если модуль возвращает любой другой токен действия, модуль не работает? Это действие = значение жетон успех = хорошо отменено по умолчанию = плохо, или наоборот? Что требует приоритета? Это не ясно из всего, что я читал.
В общем, предположим, у меня есть что-то вроде
[success=done default=die]
Что произойдет, если модуль вернет успех и еще один токен?
Наконец, я тоже не могу найти ответа на этот вопрос: может ли каждое значение ok, done, bad, die, ignore, reset, N
быть связанным с каким-либо действием? Что бы это вообще значило сказать
[default=done] ?
Модули PAM имеют более 30 различных возвращаемых значений, которые сопоставляются либо проходить или потерпеть поражение всего стека PAM, как указано в конфигурации.
Примечательно, что модуль PAM может вести себя по-разному в зависимости от контекста (авторизация, учетная запись, пароль, сеанс), в котором он вызывается.
Пары стоимостьзнак равнодействие в квадратных скобках описывают, какое действие следует предпринять для каждого возможного возвращаемого значения модуля PAM.
Хорошее объяснение ценностей и действий можно найти, внимательно прочитав указанную выше страницу до конца.
success=ok
модуль вернул успех, это будет учтено при оценке всего стека PAM, если ни один предыдущий модуль не отказал, рассмотрите проходить для всего стека до этого момента.new_authtok_reqd=ok
требуется новый токен аутентификации. Например. в сессия контекст это может заставить пользователя изменить свой пароль.ignore=ignore
модуль PAM хочет, чтобы его результат игнорировался, поэтому мы игнорируем его.default=bad
все остальные результаты приводят к сбою стека PAM (но не останавливайте обработку последующих модулей)Что произойдет, если модуль вернет успех и еще один токен?
Модули PAM возвращают только одно значение.
Наконец, я тоже не могу найти ответ на этот вопрос: может ли каждое значение ok, done, bad, die, ignore, reset, N быть связано с каким-либо действием? Что бы это вообще значило сказать
[default=done] ?
Это означает: любой токен, не упомянутый здесь (то есть каждый возможный токен), завершает обработку стека PAM и возвращает результат на данный момент.
Прежде всего, ua2b дал критический ответ, который вызвал у меня замешательство:
Модули PAM могут возвращать только одно значение статуса для каждого вызова
Поскольку модули могут возвращать только один код состояния, ясно, что действие для любого заключенного в скобки набора пар значение / действие однозначно. Я думал, что модуль может возвращать сразу несколько кодов состояния (на основе чтения различных документов), отсюда и мое замешательство. У меня не получается, что я не могу найти никаких ссылок, включая официальную документацию, способен четко заявить об этом. Вместо этого можно найти такие комментарии:
"Каждая процедура PAM-API возвращает один или несколько кодов состояния."
Для меня это звучит так, будто модуль может вернуть несколько коды состояния. Только после прочтения руководства разработчика модуля PAM я понял, что коды состояния возвращаются как одно целое число, которое сопоставляется с возможными значениями кода состояния, как описано Вот (Да, такая же ссылка!)
Мой следующий вопрос был связан с приравниванием к старому ключевому слову флага управления стилем обязательный с этим синтаксисом квадратных скобок:
[success=ok new_authtok_reqd=ok ignore=ignore default=bad]
Эта эквивалентность повторяется повсюду, например Вот.
Оказывается, это полная чушь. Коды состояния, возвращаемые каким-либо конкретным модулем, могут отличаться и снова отличаться в зависимости от типа группы управления (например, авторизация или учетная запись).
Возьмем, к примеру, модуль pam_securetty. Этот модуль предоставляет только авторизация type и имеет следующие возможные возвращаемые значения кода состояния:
PAM_SUCCESS
PAM_AUTH_ERR
PAM_INCOMPLETE
PAM_SERVICE_ERR
PAM_USER_UNKNOWN
В ignore=ignore
Соответственно, отображение значения / действия кажется бесполезным, поскольку этот модуль никогда не возвращает игнорирование. В этом случае вы можете рассмотреть возможность использования user_unknown=ignore
если на самом деле вы хотите проигнорировать результат, если пользователь не может быть найден.