Des*_*son 9 active-directory pam sssd
我刚刚将我的 Arch Linux 工作站链接到我为我们公司设置的 Samba AD。我测试了它,它奏效了,或者我是这么认为的。它接受了我的密码,创建了我的 homedir 和所有内容,然后让我登录。我忘记测试的是它不接受的内容。事实证明,只要用户名有效(AD 或本地,无关紧要),它就会接受任何密码。有人可以指出我做错了什么吗?
我正在使用 SSSD 来管理 AD 连接。这是我的/etc/pam.d/system-auth:
#%PAM-1.0
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_sss.so use_first_pass
auth required pam_env.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_sss.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session optional pam_mkhomedir.so umask=0077
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_sss.so
Run Code Online (Sandbox Code Playgroud)
tel*_*coM 17
让我们详细分析 PAM 配置的身份验证部分。
auth sufficient pam_unix.so nullok try_first_pass
Run Code Online (Sandbox Code Playgroud)
第一行说:“如果这个测试成功,停止进一步检查并接受登录;如果失败,继续检查。检查/etc/passwd和中配置的用户/密码/etc/shadow。如果用户存在并且密码字段为空,则用户是允许进去。” 这是对本地用户帐户的身份验证检查。
auth requisite pam_succeed_if.so uid >= 500 quiet
Run Code Online (Sandbox Code Playgroud)
第二行说:“如果这个测试失败,停止进一步检查并拒绝登录;如果成功,继续检查。用户的 UID 值必须是 500 或更大。” 这可以防止使用 AD 或其他共享用户数据库中的密码登录系统帐户。
auth sufficient pam_sss.so use_first_pass
Run Code Online (Sandbox Code Playgroud)
第三行说:“如果这个测试成功,停止进一步检查并接受登录;如果失败,继续检查。用SSSD检查。” 这是对 AD 帐户的检查。
auth required pam_env.so
Run Code Online (Sandbox Code Playgroud)
第四行说:“如果这一行失败,拒绝登录;但无论如何都要检查到本节的末尾。设置/etc/security/pam_env.conf和/或中描述的任何环境变量/etc/environment。”
现在想想如果用户存在(在 AD 中或在 local 中/etc/passwd)但密码检查失败会发生什么。第一,pam_unix.so失败;但这不会导致拒绝,因为这会阻止您使用任何基于 AD 的用户帐户。
所以这个过程继续到第二行。如果用户具有有效的 UID 映射并且 UID 号为 500 或更大,则这也将成功。如果 UID 小于 500,这将失败的唯一方法。
第三行进行 AD 检查;这也失败了。但同样,“足够”用于允许在此之后配置任何其他身份验证方法,因此该过程将继续,就像使用pam_unix.so.
此时,必须成功执行第四行才能允许用户进入。但这只是设置环境变量。man pam_env告诉我pam_env.so如果成功设置了环境变量,模块将返回 PAM_SUCCESS 值。但是因为这是这个堆栈中的最后一个 PAM 模块,并且到目前为止没有其他模块被绝对拒绝,所以这个模块的结果将成为身份验证阶段的整体结果。
为了解决这个问题,身份验证阶段需要pam_deny.so在最后,以在所有实际身份验证机制都未能接受用户时停止任何登录尝试。
此外,这pam_env.so可能应该在过程中更早发生,以便所有有效用户的环境变量初始化都以相同的方式发生。如果这在auth阶段开始时不起作用,那么pam_env.so可能应该转到session阶段;man pam_env表示将在任一工作auth或session阶段。
因此,我最初的建议是将auth您的 PAM 配置部分更改为:
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_sss.so use_first_pass
auth requisite pam_deny.so
Run Code Online (Sandbox Code Playgroud)
因此,功能将是:
如果事实证明pam_env.so在auth阶段开始时放置会导致问题,您可以尝试将其注释掉;似乎以前在任何有效登录时都会跳过它。
与以往一样,在更改 PAM 配置时,首先打开一个与系统的会话并确保它是sudoroot 用户或以其他方式具有可用的完全 root 权限:然后备份当前配置。进行更改但不要注销以测试它:相反,通过打开另一个会话来测试它。如果失败,您仍会登录原始会话,因此您可以在必要时轻松恢复旧配置。如果这是一个生产系统或其他关键系统,请在进行更改之前打开两个根会话,以防止手指比大脑更快的错误。
| 归档时间: |
|
| 查看次数: |
3277 次 |
| 最近记录: |