Ubuntu 12.04 服务器上的 389-ds 已启动并运行。已启用Fine-grained password policies
并User must change password after reset
用于整个树。随后创建了测试用户。
从 CentOS 客户端登录:提示用户更改密码:You are required to change your password immediately.
从 Ubuntu 客户端登录:用户登录,无提示。
将 CentOS 客户端配置文件复制到 Ubuntu 客户端,确切地说是 /etc/pam_ldap.conf(在 Ubuntu 上是 /etc/ldap.conf)、/etc/nslcd.conf、/etc/openldap/ldap.conf(在 Ubuntu 上是 /etc/ldap/ldap.conf)——没有成功。
两个客户端均已成功验证,并且都可以更改用户密码。
所有登录都是终端登录,不涉及 GUI。
两个客户端上均有 PAM:
乌本图:
/etc/pam.d/通用帐户
帐户 [成功=2 new_authtok_reqd=done 默认=忽略]
pam_unix.so 帐户 [成功=1 默认=忽略] pam_ldap.so 帐户必备 pam_deny.so 帐户必需
pam_permit.so/etc/pam.d/common-auth
身份验证 [成功 = 2 默认 = 忽略] pam_unix.so nullok_secure 身份验证 [成功 = 1 默认 = 忽略] pam_ldap.so use_first_pass 身份验证
必备 pam_deny.so 身份验证必需 pam_permit.so 身份验证可选
pam_cap.so/etc/pam.d/通用密码
密码 [success=2 default=ignore] pam_unix.so 模糊 sha512 密码 [success=1 user_unknown=ignore default=die]
pam_ldap.so try_first_pass 密码必需
pam_deny.so 密码必需
pam_permit.so 密码可选 pam_gnome_keyring.so
CentOS
/etc/pam.d/系统身份验证-ac
#%PAM-1.0 身份验证需要 pam_env.so 身份验证足够 pam_fprintd.so 身份验证足够 pam_unix.so nullok try_first_pass 身份验证必备 pam_succeed_if.so uid >= 500 quiet 身份验证足够 pam_ldap.so use_first_pass 身份验证
需要 pam_deny.so帐户需要 pam_unix.so broken_shadow 帐户
足够 pam_localuser.so 帐户足够
pam_succeed_if.so uid < 500 安静帐户 [default=bad success=ok user_unknown=ignore] pam_ldap.so 帐户需要
pam_permit.so密码必需 pam_cracklib.so try_first_pass retry=3 类型= 密码足够 pam_unix.so sha512 shadow nullok try_first_pass use_authtok 密码足够 pam_ldap.so use_authtok 密码需要 pam_deny.so
会话可选 pam_keyinit.so 撤销会话必需
pam_limits.so 会话可选 pam_mkhomedir.so 会话
[成功 = 1 默认 = 忽略] pam_succeed_if.so 服务在 crond 安静 use_uid 会话必需 pam_unix.so 会话可选
pam_ldap.so/etc/pam.d/passwd-身份验证
#%PAM-1.0 身份验证需要 pam_env.so 身份验证足够 pam_unix.so nullok try_first_pass 身份验证必备
pam_succeed_if.so uid >= 500 quiet 身份验证足够
pam_ldap.so use_first_pass 身份验证需要 pam_deny.so帐户需要 pam_unix.so broken_shadow 帐户
足够 pam_localuser.so 帐户足够
pam_succeed_if.so uid < 500 安静帐户 [default=bad success=ok user_unknown=ignore] pam_ldap.so 帐户需要
pam_permit.so密码必需 pam_cracklib.so try_first_pass retry=3 类型= 密码足够 pam_unix.so sha512 shadow nullok try_first_pass use_authtok 密码足够 pam_ldap.so use_authtok 密码需要 pam_deny.so
会话可选 pam_keyinit.so 撤销会话必需
pam_limits.so 会话可选 pam_mkhomedir.so 会话
[成功 = 1 默认 = 忽略] pam_succeed_if.so 服务在 crond 安静 use_uid 会话必需 pam_unix.so 会话可选
pam_ldap.so
一个区别是,在 Ubuntu 上我没有安装 cracklib。我计划稍后再安装,现在我只是在测试。
我想知道如果 Ubuntu LDAP 客户端加入 Windows AD,它如何从中接收密码过期通知。应该是类似的东西,但我搞不懂。
如何让 Ubuntu 客户端遵守密码策略?为什么我You are required to change your password immediately.
在登录时看不到提示,而同样的配置在 CentOS 上也可以用?
谢谢你!
节日快乐!
答案1
我在 Ubuntu 上使用 389-ds 进行工作项目时遇到了完全相同的问题。
我不确定是否要从 CentOS 复制配置 — — 我手边没有盒子。
但当我查阅并阅读 PAM 时,我发现这一切都在文件中/etc/pam.d/通用帐户。
pam_unix.so 位于 pam_ldap.so 之上,并且它还有 [success=2 default=ignore],这意味着如果成功则跳过接下来的两个规则,对于其他任何规则,忽略该行。
现在,由于 LDAP 帐户是有效的 UNIX 帐户,因为我们将 ldap 添加到/etc/nsswitch.conf,该规则将返回成功并且 pam_ldap.so 模块将永远不会运行。
为了解决这个问题,我的/etc/pam.d/通用帐户现在看起来像这样:
# here are the per-package modules (the "Primary" block)
account [success=1 default=bad] pam_succeed_if.so user ingroup auth-access quiet
account [success=reset default=bad] pam_succeed_if.so uid <= 500 quiet
account [success=2 user_unknown=ignore default=ok] pam_ldap.so
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
# here's the fallback if no module succeeds
account requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
account required pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config
如您所见,我还在其中添加了一些规则,仅允许 LDAP 组“auth-access”中的用户或 UID 低于 500 的系统用户被视为有效帐户。
稍微解释一下:
我们达到了第一条规则
account [success=1 default=bad] pam_succeed_if.so user ingroup auth-access quiet
如果用户在该组中,则执行成功,如果是这样,我们跳过下一行,因为我们知道这将失败(他们是有效的 LDAP 用户,因此他们的系统 UID 不会低于 500) - 如果不成功,则返回失败(糟糕)。
如果没有跳过,则执行下一条规则
account [success=reset default=bad] pam_succeed_if.so uid <= 500 quiet
因此,如果此操作成功(因为 UID 低于 500),请重置上述模块设置的失败值,因为它们将不属于该 LDAP 组的一部分。
最重要的部分
account [success=2 user_unknown=ignore default=ok] pam_ldap.so
检查 LDAP 服务器的帐户状态 - 如果成功,我们就知道 LDAP 用户是有效的 UNIX 用户,因此继续并跳过接下来的两行(将我们带到 pam_permit.so 并让用户登录)。如果 LDAP 服务器不知道该用户,请忽略此行并转到下一行 - 对于所有其他状态,“ok”表示可以按原样传递这些返回代码,这将传递诸如密码过期等信息。
进而:
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
如果符合此规则,则我们不是有效的 LDAP 用户,因此请检查我们是否是有效的系统用户 - 如果成功,则跳过下一行(将我们带到 pam_permit.so)。否则,忽略,这将带我们到 pam_deny.so。
希望这有助于进一步解释 - 如果我不太容易理解的话,对我有帮助的文档是:http://uw714doc.sco.com/en/SEC_pam/pam-4.html
问候,iamacarpet