关于OpenLDAP自定义olcAttributeTypes/olcObjectClasses删除及slapd重启后属性类消失问题的咨询
关于OpenLDAP自定义olcAttributeTypes/olcObjectClasses删除及slapd重启后属性类消失问题的解答
一、删除自定义olcAttributeTypes的方法
首先必须强调:绝对不能直接编辑slapd.d目录下的自动生成文件,文件顶部已经明确标注DO NOT EDIT,一定要用官方推荐的ldapmodify工具来操作。
你需要创建一个用于删除属性的LDIF文件,比如命名为delete-dateOfBirth.ldif,内容可以有两种写法:
- 完整匹配属性定义(和添加时的格式一致):
dn: cn=schema,cn=config changetype: modify delete: olcAttributeTypes olcAttributeTypes: ( 1.3.6.1.4.1.60136.2 NAME 'dateOfBirth' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
- 用唯一OID+索引快速匹配(从你的
cn=schema.ldif能看到该属性是{0}索引):
dn: cn=schema,cn=config changetype: modify delete: olcAttributeTypes olcAttributeTypes: {0}( 1.3.6.1.4.1.60136.2 )
创建好文件后,执行以下命令完成删除:
ldapmodify -Y EXTERNAL -H ldapi:/// -f delete-dateOfBirth.ldif
二、删除自定义olcObjectClasses的方法
逻辑和删除属性完全一致,只需要把LDIF中的操作对象换成olcObjectClasses即可。
举个例子,假设你的自定义对象类OID是1.3.6.1.4.1.60136.3,且在cn=schema.ldif中索引为{1},创建delete-custom-oc.ldif:
dn: cn=schema,cn=config changetype: modify delete: olcObjectClasses olcObjectClasses: {1}( 1.3.6.1.4.1.60136.3 NAME 'customUser' ... )
同样用ldapmodify命令执行删除:
ldapmodify -Y EXTERNAL -H ldapi:/// -f delete-custom-oc.ldif
三、slapd重启后自定义类/属性消失的原因及解决办法
这个问题大概率是以下两种情况导致的:
- 配置未正确持久化
虽然你用ldapmodify添加了属性,但如果操作过程中出现隐性错误(比如LDIF格式有细微问题),可能导致配置没有写入到slapd.d的持久化文件中。建议每次修改后用ldapsearch验证配置是否存在:
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config
如果能查到你添加的属性/对象类,说明配置已持久化;如果查不到,检查之前的ldapmodify命令输出是否有报错。
- slapd启动时加载schema失败
重启后查看slapd的日志(通常在/var/log/openldap/slapd.log,不同系统路径可能不同),里面会记录启动时加载schema的细节。常见的问题包括:自定义schema的格式不合法、权限不足导致无法读取配置文件、或者启动配置中遗漏了加载自定义schema的逻辑。
另外,每次修改完配置后,建议先执行slaptest -u检查配置合法性,避免因语法错误导致重启后配置失效。
备注:内容来源于stack exchange,提问作者IgorTheOverlord
相关产品推荐
相关产品推荐

