我一直在尝试配置openldap以使用ppolicy overlay,但是没有在线找到的程序。我在论坛上讨论过几十个问题,但无济于事。如果有人能检查我的配置并解决问题,我将非常感激。
我在debian jessie上使用olc(cn = config)配置。 Openldap版本是2.4.40
这里是-b cn = config的ldapsearch排除了(core,cosine,inetorgperson和ppolicy)的模式内容
# extended LDIF
#
# LDAPv3
# base <cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# config
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/slapd/slapd.args
olcLogLevel: none
olcPidFile: /var/run/slapd/slapd.pid
olcToolThreads: 1
# module{0}, config
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_mdb
olcModuleLoad: {1}ppolicy.la
# {0}mdb, config
dn: olcBackend={0}mdb,cn=config
objectClass: olcBackendConfig
olcBackend: {0}mdb
# {-1}frontend, config
dn: olcDatabase={-1}frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: {-1}frontend
olcAccess: {0}to * by
dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth manage by * break
olcAccess: {1}to dn.exact="" by * read
olcAccess: {2}to dn.base="cn=Subschema" by * read olcSizeLimit: 500
# {0}config, config
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by
dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage
by * break
olcRootDN: cn=admin,cn=config
olcRootPW: {SHA}5en6G6MezRroT3XKqkdPOmY/BfQ=
# {1}mdb, config
dn: olcDatabase={1}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {1}mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=home,dc=me
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by
anonymous auth by * none
olcAccess: {1}to attrs=loginShell,gecos by dn="cn=admin,dc=home,dc=me"
write b y self write by * read
olcAccess: {2}to dn.sub="ou=people,dc=home,dc=me" by
dn="cn=boss,ou=people,dc=home,dc=me" write by self write by * read
olcAccess: {3}to dn.base="" by * read
olcAccess: {4}to * by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=home,dc=me
olcRootPW: {SSHA}mVopmqq0XwfC7WVwqlOnJgx5ouKNNAoQ
olcDbCheckpoint: 512 30
olcDbIndex: objectClass eq
olcDbIndex: cn,uid eq
olcDbIndex: uidNumber,gidNumber eq
olcDbIndex: member,memberUid eq
olcDbMaxSize: 1073741824
# {0}ppolicy, {1}mdb, config
dn: olcOverlay={0}ppolicy,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcPPolicyConfig
olcOverlay: {0}ppolicy
olcPPolicyDefault: cn=passwordDefault,ou=policies,dc=home,dc=me
olcPPolicyHashCleartext: TRUE
olcPPolicyUseLockout: FALSE
olcPPolicyForwardUpdates: FALSE
# search result
search: 2
result: 0 Success
# numResponses: 14
# numEntries: 13
这是-b dc = home,dc = me
的ldapsearch# extended LDIF
#
# LDAPv3
# base <dc=home,dc=me> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# home.me
dn: dc=home,dc=me
objectClass: top
objectClass: dcObject
objectClass: organization
o: home.me
dc: home
# admin, home.me
dn: cn=admin,dc=home,dc=me
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
# people, home.me
dn: ou=people,dc=home,dc=me
ou: people
objectClass: organizationalUnit
# boss, people, home.me
dn: cn=boss,ou=people,dc=home,dc=me
cn: boss
objectClass: simpleSecurityObject
objectClass: organizationalRole
# policies, home.me
dn: ou=policies,dc=home,dc=me
ou: policies
objectClass: organizationalUnit
# passwordDefault, policies, home.me
dn: cn=passwordDefault,ou=policies,dc=home,dc=me
objectClass: pwdPolicy
objectClass: person
objectClass: top
cn: passwordDefault
sn: passwordDefault
pwdAttribute: userPassword
pwdCheckQuality: 0
pwdMinAge: 0
pwdMaxAge: 0
pwdMinLength: 8
pwdInHistory: 5
pwdMaxFailure: 3
pwdFailureCountInterval: 0
pwdLockout: FALSE
pwdLockoutDuration: 0
pwdAllowUserChange: TRUE
pwdExpireWarning: 0
pwdGraceAuthNLimit: 0
pwdMustChange: TRUE
pwdSafeModify: FALSE
# test, people, home.me
dn: uid=test,ou=people,dc=home,dc=me
uid: test
objectClass: account
objectClass: posixAccount
cn: test
uidNumber: 1020
gidNumber: 1020
homeDirectory: /home/test
loginShell: /bin/bash
# search result
search: 2
result: 0 Success
# numResponses: 8
# numEntries: 7
创建用户测试时,没有附加任何默认密码策略属性。我没有被迫在第一次登录后更改密码,即使我将pwdReset添加到用户测试中,我也只是在登录时被拒绝。
我在Ubuntu,Debian和CentOS上尝试过这些配置,但没有一个能够正常工作。请帮忙!
!!编辑!!
在我向新创建的用户添加pwdpolicysubentry并向其发送pwdReset后,用户被拒绝登录,这是它在journalctl中的显示
[5e18f8] <authc="poor"> ldap_result() failed: Insufficient access: Operations are restricted
to bind/unbind/abandon/StartTLS/modify password
Feb 13 19:17:47 debian-jessie nslcd[614]: [5e18f8] <authc="poor">
uid=poor,ou=people,dc=home,dc=me: Insufficient access
Feb 13 19:17:47 debian-jessie nslcd[614]: [5e18f8] <authc="poor">
uid=poor,ou=people,dc=home,dc=me: Password must be changed
Feb 13 19:17:47 debian-jessie sshd[2496]: pam_ldap(sshd:auth):
Authentication failure; user=poor
所以,它工作但无法让用户自己更改密码。我想我已经接近让它正常工作,并希望有人能帮助我做到这一点。
答案 0 :(得分:0)
有几个可能的原因,但最明显的是您可能已被记录为OpenLDAP经理帐户,该帐户绕过所有叠加层。您需要在DIT中使用适当的权限创建管理员或应用程序帐户,并以该用户身份执行所有进一步的管理更新。您还需要以这种方式删除并重新添加此测试用户。
Manager帐户适用于OpenLDAP本身,不适用于应用程序或其他用户。不要使用它。
注意:您需要使用密码策略请求控件来告知重置,所需的密码更改,宽限登录,质量或历史记录失败等。
答案 1 :(得分:-1)
不幸的是,没有直接的方法可以使密码策略覆盖符合我的要求,其中一个是强制用户在首次登录时更改他/她的密码。
但是,现在,我可以通过使用 shadowLastChange将 ppolicy 叠加层与 shadowAccount 对象类相结合来实现这一目的。 属性并使其等于零( shadowAccount 对象类和 shadowLastChange 属性都添加到用户帐户)。 ppolicy 将处理剩下的事情。 (我自己尝试了 shadowAccount ,但它没有工作)。
如果可以的话,这个工作只适用于Debian。甚至CentOS客户端系统也不符合Debian上LDAP服务器强制的ppolicy。 Debian和Ubuntu的客户都在工作。
pwdReset属性:此属性会锁定帐户并确实需要更改密码,但只能通过 ldappasswd 命令完成,而不能在登录时完成。此属性的值将覆盖 pwdMustChange 的设置。