了解 FreeBSD 上带有 security/sssd 的 PAM 身份验证过程

了解 FreeBSD 上带有 security/sssd 的 PAM 身份验证过程

我试图了解 FreeBSD 10.0 上的 PAM 配置中哪些行为出现了错误

该机器配置了两个不同的身份验证领域,一个是默认的 Unix 身份验证,另一个使用系统安全服务守护进程(sssd)。

此时我正在使用此配置,/etc/pam.d/sshd因为我只想允许 sssd 从 ssh 登录。

auth            sufficient      pam_opie.so                  no_warn no_fake_prompts
auth            requisite       pam_opieaccess.so            no_warn allow_local
auth            sufficient      /usr/local/lib/pam_sss.so
#auth           sufficient      pam_krb5.so                  no_warn try_first_pass
#auth           sufficient      pam_ssh.so                   no_warn try_first_pass
auth            required        pam_unix.so                  no_warn use_first_pass

# account
account         required        pam_nologin.so
#account        required        pam_krb5.so
account         required        pam_login_access.so
account         required        /usr/local/lib/pam_sss.so    ignore_unknown_user
account         required        pam_unix.so

# session
#session        optional        pam_ssh.so                   want_agent
session         optional        /usr/local/lib/pam_sss.so
session         optional        /usr/local/lib/pam_mkhomedir.so      mode=0700
session         required        pam_permit.so

# password
password        sufficient      /usr/local/lib/pam_sss.so    use_authtok
#password       sufficient      pam_krb5.so                  no_warn try_first_pass
password        required        pam_unix.so                  no_warn try_first_pass

如果我理解正确的话,当 sssd 用户登录机器时,它会碰到这条auth sufficient /usr/local/lib/pam_sss.so线,因此sufficient它会毫无问题地登录。当本地用户帐户尝试登录时,它会在 sssd 检查中失败,但会成功pam_unix.so使用第一次输入的密码,而无需再次输入密码。

但事实并非如此。要成功以本地帐户身份登录,我必须use_first_passpam_unix.soauth realm 中的选项中删除,当用户登录时,系统首先要求输入 sssd 帐户,但由于本地用户不存在于外部身份验证服务中,因此失败。然后系统再次要求输入相同的密码,但在模块上进行身份验证pam_unix.so。最后授予访问权限。

例如,它的行为方式如下:

ssh sssd-test.example.com -l local-user-account
Password: 
Password for [email protected]:
Last login: Sat May 24 16:22:40 2014 from 192.168.1.100
FreeBSD 10.0-RELEASE-p1 (GENERIC) #0: Tue Apr  8 06:45:06 UTC 2014

Welcome to FreeBSD!

$

我不太清楚为什么会发生这种情况,也不清楚这是否与会话有关account。就我对 PAM 的理解而言,配置应该是正确的。

提前致谢,

答案1

嗯,我关于 PAM 工作原理的前提是正确的。

pam_sss.so模块期望该参数forward_pass传递到其他 PAM 模块的密码,就像该pam_unix.so模块一样。因此,只需使用此选项即可完成工作。结果行是:

auth            sufficient      /usr/local/lib/pam_sss.so           forward_pass

这又导致了另一个问题。如果 sssd 或 sssd 的身份验证域关闭,您将无法登录,因为模块pam_sss.so将无法正常工作,因此密码将无法转发。

因此,显而易见的选择是将其放在pam_unix.so前面pam_sss.so,让一切都“充分”,并在末尾加上 nicely pam_deny.so。这是 Linux 解决问题的方法,但这似乎在 FreeBSD 上不起作用。

在通过邮件列表进行搜索后,我们发现在 FreeBSD 上执行此操作的正确方法是使用 PAM 中的奇怪顺序:

auth            sufficient      pam_opie.so                 no_warn no_fake_prompts
auth            requisite       pam_opieaccess.so           no_warn allow_local
auth            sufficient      pam_unix.so                 no_warn
auth            sufficient      /usr/local/lib/pam_sss.so   use_first_pass
auth            required        pam_unix.so                 no_warn use_first_pass

因此,pam_unix.so在 PAM 中输入两次,第一次输入 as,sufficient最后一次输入 as,这样required就成功了。我不知道为什么会发生这种情况,但它确实有效,而且似乎是正确的做法。

相关内容