首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Openldap策略覆盖不起作用。

Openldap策略覆盖不起作用。
EN

Stack Overflow用户
提问于 2016-02-04 11:12:22
回答 2查看 2.9K关注 0票数 4

我一直在尝试配置openldap来使用ppolicy覆盖,但是在线发现的过程中没有一个是有效的。我尝试了论坛上讨论的几十个问题,但都没有结果。因此,如果有人能检查我的配置并解决问题,我将非常感激。

我在debian上使用olc (cn=config)配置。Openldap版本为2.4.40

这里是-b cn=config的ldapsearch,排除了模式的内容(核心、余弦、inetorgperson和ppolicy)。

代码语言:javascript
复制
# 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

代码语言:javascript
复制
# 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上尝试过这些配置,但它们都没有工作。任何帮助都行!

!!编辑!!

在我向新创建的用户添加了pwdReset子项并将pwdReset发送给他们之后,用户被拒绝登录,以下是日志the中显示的内容。

代码语言:javascript
复制
[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

因此,它起了作用,但无法让用户自己更改密码。我想我离它越来越近了,我希望有人能帮我做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-10 12:06:43

不幸的是,没有直接的方法使密码策略覆盖满足我的要求,其中之一是强迫用户在第一次登录时更改他/她的密码。

但是,现在,我可以通过使用shadowLastChange属性将ppolicy覆盖和shadowAccount对象类组合起来,使其等于零(将shadowAccount对象类和shadowLastChange属性添加到用户帐户中)。ppolicy将处理其余部分。(我自己尝试过shadowAccount,但没有成功)。

这方面的工作,我可以说,只在Debian工作。即使是CentOS客户端系统也不遵守Debian上的LDAP服务器强制执行的LDAP策略。Debian和Ubuntu的客户都在工作。

pwdReset属性:该属性确实锁定帐户并要求更改密码,但只能通过命令ldappasswd而不能在登录时进行。此属性的值重写pwdMustChange.的设置。

票数 -1
EN

Stack Overflow用户

发布于 2016-02-04 11:25:46

这有几个可能的原因,但最明显的原因是,您可能已经被记录为OpenLDAP管理器帐户,它绕过了所有的覆盖。您需要在DIT中创建一个具有适当权限的管理或应用程序帐户,并以该用户的身份执行所有进一步的管理更新。您将需要删除和重新添加此测试用户的方式。

Manager帐户用于OpenLDAP本身,而不是应用程序或其他用户。别用它。

注意:您需要使用密码策略请求控件来告知重置、所需的密码更改、优雅登录、质量或历史故障等信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35199515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档