Openldap:对于pwdAttribute,是否可以使用“userPassword”而不是“2.5.4.35”?

时间:2011-04-07 07:48:55

标签: ldap openldap

我在Fedora Core 13中使用Openldap 2.4.11。

我正在尝试创建密码策略:

dn: cn=default,ou=policies,dc=estream,dc=com,dc=my
objectClass: person
objectClass: pwdPolicy
objectClass: top
cn: default
pwdAttribute: 2.5.4.35
sn: test

如果我将pwdAttriute指定为“userPassword”,则会出现错误

LDAP: error code 21 - pwdAttribute: value #0 invalid per syntax

相反,我强制将OID用于pwdAttribute:

pwdAttribute: 2.5.4.35

pwdAttribute可以使用“userPassword”代替“2.5.4.35”吗?

我尝试将openldap配置为在cn = config中加载模块ppolicy.la,但在重启slapd服务几次后它似乎也没有工作:

dn: cn=module{0},cn=config
objectClass: olcConfig
objectClass: olcModuleList
objectClass: top
cn: module{0}
olcModuleLoad: {0}/usr/lib64/openldap/ppolicy.la

4 个答案:

答案 0 :(得分:6)

  

相反,我强制将OID用于pwdAttribute:

如果相关架构和ppolicy叠加层都已加载,您可以指定OID或属性名称。

为什么你有objectClass = person?密码策略不是一个人。习惯上使用objectClass = device作为密码策略的结构类。

答案 1 :(得分:6)

根据我的经验,EJP的回答是不正确的。

我收到了运行openldap 2.4.29的相同错误消息。密码策略覆盖允许使用pwdAttribute: userPassword,但仅限于启用了叠加层。否则,将使用上面的消息(pwdAttribute: value #0 invalid per syntax)拒绝该值。

如果您的OpenLDAP安装使用动态模块,请务必包含

moduleload      ppolicy.la

slapd.conf文件中(或cn=config数据库中的相应等效文件)。

然后加载适当数据库的叠加层:

database        bdb
suffix          "o=example.com"
rootdn          "cn=Directory Manager,o=example.com"
rootpw          password
directory       /opt/openldap-2.4.29/var/openldap-data/example.com
overlay         ppolicy

在加载叠加层之前,我只能提供pwdAttribute的OID。使用--enable-ppolicy重新构建并添加overlay条目后,我可以使用ldapmodify将pwdAttribute: 2.5.4.35替换为pwdAttribute: userPassword

我在加载叠加层后必须刷新pwdAttribute的值。

答案 2 :(得分:1)

我刚遇到这个问题,并且解决方法与上述不同。我在CentOS 6.4上设置了一个新的LDAP(在RHEL 6.4上进行最终部署),它默认为“(cn = config)”配置方案,所以上面提到的所有(无疑是优秀的)修改slapd.conf的指令不适用。

在“(cn = config)”方式(在某些网站上也称为“slapd.d”),有很多步骤可以使叠加层工作。我正在处理的默认CentOS 6.4 LDAP包括ppolicy架构,但它没有被激活。

要实现这一目标,有很多步骤:

首先,“ppolicy”模块是动态的,您必须确保它包含在运行时模块列表中。默认的CentOS安装没有,所以我首先必须打开模块,然后将ppolicy添加到列表中。这个LDIF做到了:

dn: cn=Module{0},cn=config
objectClass: olcModuleList
cn: Module{0}
olcModuleLoad: ppolicy

如果您以后想要添加更多模块,只需在此dn中附加额外的olcModuleLoad条目。

其次,您必须打开要应用它的数据库的叠加层。创建另一个dn,因此:

dn: olcOverlay=ppolicy,olcDatabase={2}bdb,cn=config
objectClass: olcPPolicyConfig
olcOverlay: ppolicy

前两个步骤在“cn = config”域中完成,即在数据库外部由机器的root用户完成。后续步骤在“dc = example,dc = com”范围内,因此可以由rootDN完成。

第三步是为密码策略创建容器。这可能是可选的,我不确定 - 我创建了一个像:

dn: ou=pwpolicies,dc=example,dc=com
objectClass: organizationalUnit
objectClass: top
ou: pwpolicies

第四,创建你的实际策略 - 遇到这个错误的人已经有了这个,这是带有“pwdAttribute”的dn,它会出现语法错误。通过正确完成上述覆盖和模块工作,您可以使用pwdAttribute:userPassword“而不会出现语法错误。当然,我的策略位于ou容器内,除了”pwdPolicy“之外,我使用了”device“的objectClass,正如其他地方所建议的那样。

最后,您当然可以实际使用该策略。

这整个过程让我更加困惑,因为有很多关于如何设置slapd.conf的文档。我将大部分内容拼凑在Zytrax“LDAP for Rocket Scientists”一书中,该书涵盖了模块和覆盖内容,但在密码策略部分中有一个错误或过时的示例(缺少结构对象类)。

答案 3 :(得分:0)

我在新服务器上将2.3转换为2.4,我在Red Hat 6.3上遇到了同样的错误。我使用了pwdAttribute:2.5.4.35而且它没有问题。