PAM позволяет использовать sufficent
и required
для некоторой логики, как
auth sufficient pam_a.so
auth required pam_b.so
auth required pam_c.so
который означал бы "или верного, или b должно быть верным, и затем c должен быть верным".
Действительно ли возможно сделать более сложные операции? как" (a или b) и (c или d)" или" (a и b) или (c и d)"? Возможно еще с большим количеством слоев круглой скобки.
Да, есть логика, позволяющая пропускать произвольное количество строк. Нет никаких «группирующих скобок» или чего-то подобного, но если вы объедините логику, о которой вы только что упомянули, с возможностью пропускать строки, вы можете выборочно исключить поведение.
Вот пример с моего личного сервера:
# Skip Google authenticator check if they're coming from a local IP.
auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access/nogoogle.conf noaudit
auth required pam_google_authenticator.so nullok
Мне действительно не нужна двухфакторная аутентификация, если исходный IP-адрес приходит из моей локальной сети, поэтому я использую результат проверки pam_access.so
, чтобы пропустить ровно одну строку в случае успеха. Если проверка не удалась, ничего не происходит и проверяется следующая строка.
Вы можете найти больше об этом на странице руководства pam.conf
. Найдите "значение1". Раздел начинается так:
Для более сложного синтаксиса допустимые контрольные значения имеют следующую форму: [значение1 = действие1 значение2 = действие2 ...] Где valueN соответствует коду возврата из функции, вызванной в модуль, для которого определена линия. ...
Имейте в виду, что эта логика намного сложнее, и если люди редактируют ваши конфигурации PAM, не замечая наличия пропуска строк, они могут вызвать всевозможный хаос, добавляя или удаляя строки в неправильных местах.