Linux(Ubuntu vs CentOS)LDAP客户端,用于389-ds – 密码策略

Ubuntu 12.04服务器上的389-ds启动并运行。 启用Fine-grained password policies并且User must change password after reset在整个树User must change password after reset 。 之后创buildtesting用户。

从CentOS客户端login:提示用户更改密码: You are required to change your password immediately.

从Ubuntu客户端login:用户login, 没有提示

复制CentOS客户端configuration文件到Ubuntu客户端,正好是/etc/pam_ldap.conf(在Ubuntu上是/etc/ldap.conf),/etc/nslcd.conf,/etc/openldap/ldap.conf(在Ubuntu / etc / ldap / ldap.conf) – 没有骰子。

两个客户端都authentication成功,都可以更改用户密码。

所有login都是terminallogin,不涉及GUI。

两个客户端上的PAM:

  1. Ubuntu的:

    • 将/etc/pam.d/common-account

      帐户[成功= 2 new_authtok_reqd =完成默认=忽略]
      pam_unix.so帐户[成功= 1默认=忽略] pam_ldap.so帐户必需pam_deny.so帐户所需
      pam_permit.so

    • 将/etc/pam.d/common-auth

      auth [成功= 2默认=忽略] pam_unix.so nullok_secure auth [成功= 1默认=忽略] pam_ldap.so use_first_pass auth
      需要pam_deny.so授权
      pam_permit.so auth可选的pam_cap.so

    • /etc/pam.d/common-password

      密码[成功= 2默认=忽略] pam_unix.so晦涩sha512密码[成功= 1 user_unknown =忽略默认=死亡]
      pam_ldap.so try_first_pass密码必需
      需要pam_deny.so密码
      pam_permit.so密码可选pam_gnome_keyring.so

  2. CentOS的

    • /etc/pam.d/system-auth-ac

      #%PAM-1.0 auth required pam_env.so auth足够pam_fprintd.so auth足够pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid> = 500 quiet auth足够pam_ldap.so use_first_pass auth
      需要pam_deny.so

      需要帐户pam_unix.so破碎帐户
      足够的pam_localuser.so帐户
      pam_succeed_if.so uid <500安静帐户[默认=错误的成功=好的user_unknown =忽略] pam_ldap.so帐户所需
      pam_permit.so

      密码必需pam_cracklib.so try_first_pass重试= 3 type =密码足够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-auth-ac

      #%PAM-1.0 auth required pam_env.so auth sufficient pam_unix.so nullok try_first_pass auth requisite
      pam_succeed_if.so uid> = 500安静auth足够
      pam_ldap.so use_first_pass auth所需的pam_deny.so

      需要帐户pam_unix.so破碎帐户
      足够的pam_localuser.so帐户
      pam_succeed_if.so uid <500安静帐户[默认=错误的成功=好的user_unknown =忽略] pam_ldap.so帐户所需
      pam_permit.so

      密码必需pam_cracklib.so try_first_pass重试= 3 type =密码足够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。 我打算晚些时候这样做,现在我只是在testing。

我想知道,如果Ubuntu LDAP客户端joinWindows AD,它如何从它接收密码过期的通知。 这应该是类似的东西,但我不明白。

如何使Ubuntu客户端遵守/遵守密码策略? 为什么我看不到You are required to change your password immediately. 提示login时,鉴于相同的configuration工程与CentOS?

谢谢!

节日快乐!

我一直在玩Ubuntu的389-ds工作项目,并遇到完全相同的问题。

我不确定从CentOS复制configuration – 我没有一个方便的框。

但是,当我查看和阅读了PAM,结果都在/etc/pam.d/common-account文件中。

pam_unix.so高于pam_ldap.so,它也有[成功= 2默认=忽略],这意味着如果它成功跳过接下来的两个规则,其他任何事情,忽略行。

现在,由于LDAP帐户是有效的UNIX帐户,因为我们将ldap添加到/etc/nsswitch.conf ,此规则将返回成功,并且pam_ldap.so模块将永远不会运行。

为了解决这个问题,我的/etc/pam.d/common-account现在看起来像这样:

 # 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并让用户login)。 如果用户不知道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