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

Можно ли игнорировать отсутствующий модуль PAM?

Я настраиваю юбико-пам для включения доступа к sudo без пароля с помощью запроса-ответа от Yubikey. Следующие работы:

# /etc/pam.d/sudo
auth       sufficient     pam_yubico.so mode=challenge-response
auth       required       pam_opendirectory.so
account    required       pam_permit.so
password   required       pam_deny.so
session    required       pam_permit.so

за исключением случаев, когда модуль pam_yubico.so отсутствует, не установлен или поврежден, в этом случае сообщается:

$ sudo su -
sudo: невозможно инициализировать PAM: нет такого файла или каталога

Можно ли указать PAM игнорировать отсутствующий модуль, а не просто немедленно вернуться и предотвратить продолжение оценки стека PAM?

В расширенном синтаксисе (см. pam.conf(5)), можно определить настраиваемое поведение при сбое вызова dlopen () путем определения поведения для open_err код ошибки. Тем не менее, sufficient уже должен делать это за вас. Вот эквивалентный расширенный синтаксис из той же справочной страницы:

    sufficient
      [success=done new_authtok_reqd=done default=ignore]

Видеть, что default=ignore в конце?

   The last of these, default, implies ´all valueN´s not mentioned
   explicitly. Note, the full list of PAM errors is available in
   /usr/include/security/_pam_types.h. 

Другими словами, default=ignore эквивалентно open_err=ignore. Если PAM не ведет себя не описанным здесь образом, это может означать, что сбой происходит дальше по стеку.

Чтобы устранить любые сомнения, вот определение PAM_OPEN_ERR из заголовков:

#define PAM_OPEN_ERR 1          /* dlopen() failure when dynamically */
                                /* loading a service module */