Назад | Перейти на главную страницу

Как конкретно работают расширенные параметры PAM?

Я читал все, что могу найти в 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 если на самом деле вы хотите проигнорировать результат, если пользователь не может быть найден.