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

Используйте более сложную структуру И / ИЛИ с PAM

PAM позволяет использовать sufficent и required для некоторой логики, например

auth sufficient pam_a.so
auth required pam_b.so
auth required pam_c.so

что означало бы «либо a истинно, либо b должно быть истинным, а затем c должно быть истинным».

Можно ли делать более сложные операции? как «(а или б) и (в или г)» или «(а и б) или (в и г)»? Возможно, с еще большим количеством слоев скобок.

Да, есть логика, позволяющая пропускать произвольное количество строк. Нет никаких «группирующих скобок» или чего-либо подобного, но если вы объедините логику, о которой вы только что упомянули, с возможностью пропускать строки, вы можете выборочно исключить поведение.

Вот пример с моего личного сервера:

# 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". Раздел начинается так:

  For the more complicated syntax valid control values have the following form:

            [value1=action1 value2=action2 ...]

  Where valueN corresponds to the return code from the function invoked in the
  module for which the line is defined.
  ...

Имейте в виду, что эта логика намного сложнее, и если люди редактируют ваши конфигурации PAM, не замечая наличия пропуска строк, они могут вызвать всевозможный хаос, добавляя или удаляя строки в неправильных местах.