是否可以忽略丢失的PAM模块?

我正在configurationyubico-pam ,使用Yubikey的challenge-response来启用无密码的sudo访问。 以下工作:

# /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) ),可以通过定义open_err错误代码的行为来定义dlopen()调用失败时的自定义行为。 也就是说, 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的行为方式没有logging在这里,否则这将意味着失败发生在栈底。

为了消除疑问, PAM_OPEN_ERR是头文件中PAM_OPEN_ERR的定义:

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