通过security / sssd了解FreeBSD上的PAMauthentication过程

我试图理解FreeBSD 10.0上PAMconfiguration的错误行为

本机configuration有两个不同的身份validation领域,一个是默认的Unix身份validation,另一个是使用System Security服务守护程序(sssd)。

在这一刻我在/etc/pam.d/sshd使用这个configuration,因为我只是想允许sshloginsssd。

 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用户login到机器上时,它将会触及auth sufficient /usr/local/lib/pam_sss.so行,因为这已经sufficient所以login没有任何问题。 当本地用户帐户尝试login时,它将在sssd检查中失败,但是会使用首次input的密码在pam_unix.so成功,而不会再次询问密码。

但这不是发生了什么事情。 要成功以本地帐户login,我必须在auth域中删除pam_unix.so中的use_first_pass选项,并且在用户login时,系统会首先请求sssd帐户,由于本地用户不在外部authentication服务中,因此系统会先失败。 然后系统再次询问相同的密码,但在pam_unix.so模块上进行validation。 最后访问被授予。

例如,它的行为就是这样的:

 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的理解,configuration应该是对的。

提前致谢,

那么我对PAM的工作前提是正确的。

pam_sss.so模块正在期待forward_pass参数作为pam_unix.so模块转发给其他PAM模块的密码。 所以只是把这个选项做这个工作。 结果是:

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

结束于另一个问题。 如果sssd或sssd的身份validation领域closures,您将无法login,因为pam_sss.so模块将不起作用,因此密码将不会被转发。

所以显而易见的select是把pam_unix.so放在pam_sss.so之前,并且让所有的东西都“充足”,最后用pam_deny.so 。 这是解决问题的Linux方法,但是这在FreeBSD上似乎不起作用。

在通过邮件列表进行search之后,在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中,第一个是sufficient ,最后一个是按required的。 我不知道为什么会发生这样的事情,但是它正在工作,似乎是正确的做法。