无法使用运行时configurationcn = config修改OpenLDAP中的模式

我在使用运行时configuration(cn = config)修改OpenLDAP安装模式时遇到问题。 我想要做的是修改现有的属性,并添加新的自定义架构。 我在尝试应用更改时遇到的错误是“没有这样的对象”或“没有这样的值”。 使用JXplorer浏览器时,错误是:

javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'cn={15}mySchema,cn=schema,cn=config' 

从命令行在ldif文件上使用ldapmodify会引发同样的错误:

 ldapmodify -h ldap://localhost/cn=config -x -p 389 -D cn=admin,cn=config -W -f modify.ldif modifying entry "cn={15}mySchema,cn=schema,cn=config" ldap_modify: No such object (32) 

但奇怪的是,即使发生此错误,也会为当前的slapd服务实例提交更改。 例如,如果我添加了新的属性并修改了一个对象以包含这些属性,那么这些属性在使用该对象的条目中可用。 我可以继续,如果变化的工作。 然而,如果slapd服务重新启动,则更改将被恢复。

如果我删除ldif文件中DN的前导{15},或者属性值的类似前缀,我会得到相同的错误(虽然可能是由于不同的原因):

 modifying entry "cn=mySchema,cn=schema,cn=config" ldap_modify: No such object (32) matched DN: cn=schema,cn=config 

更重要的是,我可以毫无问题地修改cn = config(例如,olcDatabase = { – 1} frontend,cn = config)的其他条目,而且更改在服务重新启动时保持不变。 只有当我尝试修改cn = schema,cn = config下的条目时发生错误。

服务器运行CentOS 6.2,64位,使用通过yum安装的OpenLDAP 2.4.23。 我已经尝试过多种浏览器(JXplorer,Softerra LDAP Administrator)以及命令行,所有这些都有相同的结果。 slapd.d目录的所有者/组为ldap / ldap,即使将模式文件的权限修改为777,也不会改变。通过端口636使用TLS(浏览器或命令行)也不起作用。

任何人都可以阐明这一点,并解释什么可以防止我通过cn = config修改架构?

编辑:这里是modify.ldif的内容:

 dn: cn={15}mySchema,cn=schema,cn=config changetype: modify add: olcAttributeTypes olcAttributeTypes: ( 1.3.6.1.4.00000.2.3.14 NAME 'myTest' DESC 'This is only a test' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} ) 

我们正在使用我们公司的笔代替00000,没有其他属性使用该OID。 我发现给属性值添加一个数字前缀没有什么区别,但是前缀对于DN是必需的; 没有它,错误意味着它说什么,目录没有修改。

如果条目中还有其他olcAttributeTypes ,则必须进行replace而不是add并列出已经在LDAP中的所有其他属性。

尝试使用ldapvi进行编辑,它会自动执行。

编辑:如果这不起作用,那么你需要停止slapd和手动编辑/etc/ldap/slap.d/文件。 这当然不是一个解决scheme,当变化相对经常…

cn=config编辑模式是一项新function,您可能发现了一个错误(可能已经在最新版本中修复)。 检查OpenLDAP ChangeLog并尝试使用最新版本。

我仍然在Ubuntu上看到OpenLDAP中的相同行为。 我一直在尝试replaceOpenLDAP实例上的SSL证书,发现Ubuntu维基站点的指示不起作用:

https://help.ubuntu.com/lts/serverguide/openldap-server.html#openldap-tls

具体来说,这些说明:

使用以下内容创build文件certinfo.ldif(相应地进行调整,我们的示例假设我们使用https://www.cacert.org创build证书):

 dn: cn=config changetype: modify replace: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem - replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/certs/ldap01_slapd_cert.pem - replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/private/ldap01_slapd_key.pem 

使用ldapmodify命令通过slapd-config数据库告诉slapd关于我们的TLS工作:

 sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/ssl/certinfo.ldif 

(请注意,我已经更改了原来的添加命令来replace,但原来的添加命令在全新安装上也不起作用)。

我在CentOS网站find了一个techNote:

https://www.centos.org/docs/5/html/CDS/cli/8.0/Configuration_Command_File_Reference-Core_Server_Configuration_Reference-Accessing_and_Modifying_Server_Configuration.html

2.2.2.2。 限制修改configuration项和属性

修改服务器条目和属性时适用某些限制:

 The cn=monitor entry and its child entries are read-only and cannot be modified, except to manage ACIs. If an attribute is added to cn=config, the server ignores it. If an invalid value is entered for an attribute, the server ignores it. Because ldapdelete is used for deleting an entire entry, use ldapmodify to remove an attribute from an entry. 

这个说明似乎是说你不能使用ldapmodify向cn = config添加属性。 我以为你修改cn = config的方式是用ldapmodify。

我看过其他post似乎表明了这种状况。 我已经在OpenLDAP邮件列表中提出了一个问题,并用我收到的任何答案更新我的文章。