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

Cod*_*ome 7 mac-osx pam

我正在配置yubico-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
Run Code Online (Sandbox Code Playgroud)

除非 pam_yubico.so 模块丢失、卸载或损坏,在这种情况下会被告知:

$ sudo su -
sudo: 无法初始化 PAM: 没有那个文件或目录

是否可以告诉 PAM 忽略丢失的模块,而不是简单地立即返回并阻止 PAM 继续评估堆栈?

And*_*w B 1

在扩展语法中(请参阅 参考资料pam.conf(5)),可以通过定义错误open_err代码的行为来定义 dlopen() 调用失败时的自定义行为。也就是说,sufficient应该已经为您完成了这一任务。以下是同一联机帮助页中的等效扩展语法:

\n\n
    sufficient\n      [success=done new_authtok_reqd=done default=ignore]\n
Run Code Online (Sandbox Code Playgroud)\n\n

看到default=ignore最后了吗?

\n\n
   The last of these, default, implies \xc2\xb4all valueN\xc2\xb4s not mentioned\n   explicitly. Note, the full list of PAM errors is available in\n   /usr/include/security/_pam_types.h. \n
Run Code Online (Sandbox Code Playgroud)\n\n

换句话说,default=ignore相当于open_err=ignore。除非 PAM 的行为方式未在此处记录,否则这表明故障发生在堆栈的更下方。

\n\n

PAM_OPEN_ERR为了消除任何疑问,以下是来自标头的定义:

\n\n
#define PAM_OPEN_ERR 1          /* dlopen() failure when dynamically */\n                                /* loading a service module */\n
Run Code Online (Sandbox Code Playgroud)\n