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

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

我正在配置尤比科帕姆使用 Yubikey 的质询-响应启用无密码 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 继续评估堆栈?

答案1

在扩展语法(参见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 的行为方式未在此处记录,否则这表明故障发生在堆栈的更深处。

为了消除任何疑问,这里是PAM_OPEN_ERR标题中的定义:

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

相关内容