了解 FreeBSD 上使用 security/sssd 的 PAM 身份验证过程

Vin*_*rão 6 freebsd authentication pam sssd

我试图了解 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
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,当 sssd 用户登录机器时,它将上线auth sufficient /usr/local/lib/pam_sss.so,因为这是它,因此sufficient它将登录而不会出现任何问题。当本地用户帐户尝试登录时,它将在 sssd 检查中失败,但会成功pam_unix.so使用第一次输入的密码,而无需再次要求输入密码。

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

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

ssh sssd-test.example.com -l local-user-account
Password: 
Password for local-user-account@sssd-test.example.com:
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!

$
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会发生这种情况,或者是否与会议有关account。就我对PAM的理解来说,配置应该是对的。

提前致谢,

Vin*_*rão 6

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

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

auth            sufficient      /usr/local/lib/pam_sss.so           forward_pass
Run Code Online (Sandbox Code Playgroud)

这导致了另一个问题。如果 sssd 甚至 sssd 的身份验证领域关闭,您将无法登录,因为该pam_sss.so模块将无法工作,因此密码将不会被转发。

因此,显而易见的选择是放在pam_unix.so前面pam_sss.so,让一切都“足够”,并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
Run Code Online (Sandbox Code Playgroud)

因此,在 PAM 中放入pam_unix.so两次,第一次 assufficient和最后一次 asrequired就可以了。我不知道为什么会发生这种情况,但它正在起作用,并且似乎是正确的方法。