如何让 openldap 遵守 pwdReset=TRUE

如何让 openldap 遵守 pwdReset=TRUE

我们有一个自定义应用程序,它使用 openldap (2.4.32) 作为用户数据库。根据客户要求,我正在修改它以使用 openldap 的 ppolicy 覆盖。要求是在首次创建或管理员密码重置后强制用户更改密码。在激活和配置覆盖及其默认策略后,我看到新的隐藏字段被添加到我的对象中以跟踪密码过期,但我似乎无法让 pwdMustChange 和 pwdReset 工作。

这是我的覆盖配置:

MBP2:~ me$ ldapsearch -h 10.242.25.158 -D "cn=root,cn=config" -x -W -b "cn=config" -s  sub "olcOverlay=ppolicy"
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <cn=config> with scope subtree
# filter: olcOverlay=ppolicy
# requesting: ALL
#

# {1}ppolicy, {1}bdb, config
dn: olcOverlay={1}ppolicy,olcDatabase={1}bdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcPPolicyConfig
olcOverlay: {1}ppolicy
olcPPolicyDefault: cn=default,ou=policies,dc=my,dc=domain,dc=com

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

以及默认的 pwdPolicy 对象:

MBP2:~ me$ ldapsearch -h 10.242.25.158 -D "cn=ldapadmin,dc=my,dc=domain,dc=com" -x -W -b "ou=policies,dc=my,dc=domain,dc=com" -s sub "cn=default"
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <ou=policies,dc=my,dc=domain,dc=com> with scope subtree
# filter: cn=default
# requesting: ALL
#

# default, policies, my.domain.com
dn: cn=default,ou=policies,dc=my,dc=domain,dc=com
objectClass: person
objectClass: top
objectClass: pwdPolicy
cn: default
pwdAllowUserChange: TRUE
pwdAttribute: 2.5.4.35
pwdCheckQuality: 2
pwdExpireWarning: 600
pwdFailureCountInterval: 30
pwdGraceAuthNLimit: 5
pwdInHistory: 5
pwdLockout: TRUE
pwdLockoutDuration: 0
pwdMaxAge: 0
pwdMaxFailure: 5
pwdMinAge: 0
pwdMinLength: 5
pwdMustChange: TRUE
pwdSafeModify: TRUE
sn: dummy value

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

以及添加 ppolicy 模块后创建的用户。经过一番谷歌搜索后,我手动设置了 pwdReset:TRUE 以尝试强制密码过期。

MBP2:~ cwikj$ ldapsearch -h 10.242.25.158 -D "cn=ldapadmin,dc=my,dc=domain,dc=com" -x -W -b "dc=my,dc=domain,dc=com" -s sub "uid=cs_j0000000002" +
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <dc=my,dc=domain,dc=com> with scope subtree
# filter: uid=cs_j0000000002
# requesting: + 
#

# CS_J0000000002, identities, A63562018398.my.domain.com
dn: uid=CS_J0000000002,ou=identities,dc=A63562018398,dc=my,dc=domain,dc=com
structuralObjectClass: customIdentity
entryUUID: 2569c9a5-ba99-4275-85b4-50974e57c2ee
creatorsName: cn=ldapadmin,dc=my,dc=domain,dc=com
createTimestamp: 20121004201108Z
pwdChangedTime: 20121004201108Z
pwdReset: TRUE
entryCSN: 20121004211150.015110Z#000000#000#000000
modifiersName: cn=ldapadmin,dc=my,dc=domain,dc=com
modifyTimestamp: 20121004211150Z
entryDN: uid=CS_J0000000002,ou=identities,dc=A63562018398,dc=my,dc=domain,dc=com
subschemaSubentry: cn=Subschema
hasSubordinates: FALSE

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

完成所有这些后,我尝试绑定,但没有收到密码过期消息。

MBP2:~ me$ ldapwhoami -h 10.242.25.158 -v -x -W -D "uid=CS_J0000000002,ou=identities,dc=A63562018398,dc=my,dc=domain,dc=com"
ldap_initialize( ldap://10.242.25.158 )
Enter LDAP Password:
dn:uid=CS_J0000000002,ou=identities,dc=A63562018398,dc=my,dc=domain,dc=com
Result: Success (0)

我如何才能让密码过期?默认策略中是否有与 pwdReset: TRUE 相冲突的内容?

答案1

要查看其他信息ppolicy,您必须明确请求扩展。

对于ldapsearch(1)ldapwhoami(1)和朋友,您可以使用 来做到这一点-e ppolicy

$ ldapwhoami -x -D uid=me,ou=users,dc=example,dc=org -W -e ppolicy -v
ldap_initialize( <DEFAULT> )
Enter LDAP Password: 
ldap_bind: Success (0); Password must be changed
dn:uid=me,ou=users,dc=example,dc=org
Result: Success (0)

对于您的应用程序,这取决于您使用的特定库。例如,C api 的代码是这里. (我没有找到它的手册页,抱歉。)

相关内容