我已经将一些盒子切换到SSSD,因此它们现在针对中央 LDAP 服务器进行身份验证,并在我离线时缓存凭据。这工作正常,并且 Ubuntu 软件包安装正常。
但是现在当我登录时,我的主目录不再自动解密/挂载。如果我退出 GDM 并在控制台登录,则会出现以下错误:
keyctl_seach Required key not avaliable
Run Code Online (Sandbox Code Playgroud)
如果我运行建议的命令 ( ecryptfs-mount-private ) 并提供我的密码,我的主目录就可以正常解锁。
我试图了解登录过程是如何变化的,以至于我的密码不再自动解锁加密密钥。我认为这是 PAM 问题,所以我在下面包含了我的/etc/pam.d/common-auth文件。
我认为密码正在传递给 SSSD,然后跳过通常为解锁密钥所做的任何步骤。有人能解释一下这是怎么做的吗?
auth [success=3 default=ignore] pam_sss.so
auth [success=2 default=ignore] pam_unix.so nullok_secure try_first_pass
auth [success=1 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_ecryptfs.so unwrap
Run Code Online (Sandbox Code Playgroud)
更新1:
auth.log 在用户登录时报告此错误:
login[14202]: NULL passphrase; aborting
Run Code Online (Sandbox Code Playgroud)
google 只在 pam_ecryptfs.so 的源中出现了这个错误,并且在收到的 PAM_AUTHTOK 为 NULL 时触发:
rc = pam_get_item(pamh, PAM_AUTHTOK, (const void **)&passphrase);
[...]
if (passphrase == NULL) {
[...]
syslog(LOG_ERR, "NULL passphrase; aborting\n");
[...]
}
Run Code Online (Sandbox Code Playgroud)
因此,至少 pam_ecryptfs.so 正在被调用(即它不是因为 SSSD 到位而被跳过)。但是,为什么它会得到 NULL 密码?
更新 2:
现在我对 PAM 有了更多的了解,我已经用我的common-auth文件的副本更新了帖子,因为这是登录时使用的文件(不是common-password)
原来答案在文档中!我只需要首先弄清楚问题是什么,然后回去检查设置的每个元素:
http://manpages.ubuntu.com/manpages/natty/man8/pam_sss.8.html
将选项“ forward_pass ”添加到pam_sss.so 告诉SSSD 模块将输入的密码放在堆栈上,以便其他模块(即pam_ecryptfs.so)可以使用该信息。
所以我启用了 ecryptfs + SSSD 的 /etc/pam.d/common-auth 文件看起来像这样:
auth [success=3 default=ignore] pam_sss.so forward_pass
auth [success=2 default=ignore] pam_unix.so nullok_secure try_first_pass
auth [success=1 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_ecryptfs.so unwrap
Run Code Online (Sandbox Code Playgroud)
注意:在 pam_ecryptfs.so 行的末尾加上“debug”这个词也搞砸了!
我今天当然学到了很多关于 PAM、ecryptfs 和 gnome-keyring 的知识!希望这对将来的人们有所帮助 - 我什至可以提交功能请求以将其添加为默认设置。