我正在配置尤比科帕姆使用 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 */