删除OpenLDAP中的inetorgperson schema失败,报错:Server is unwilling to perform (53)
删除OpenLDAP中的inetorgperson schema失败,报错:Server is unwilling to perform (53)
嗨,这个报错我太熟了!本质上就是inetorgperson schema还被其他对象依赖着,OpenLDAP不让你删正在被使用的东西。咱们一步步来解决:
先搞清楚为啥删不掉
- 已有条目在使用inetorgperson的对象类/属性:比如你目录里的用户条目大概率用了
inetOrgPerson这个对象类,或者它定义的mail、givenName这类属性,只要有条目在引用,就没法直接删schema。 - schema间的依赖锁死:inetorgperson继承了
cosine和coreschema,同时可能和你安装的nisschema有间接关联(比如用户条目同时用了posixAccount和inetOrgPerson)。 - 配置限制:默认情况下OpenLDAP可能禁止删除已启用的schema,得先开权限。
具体解决步骤
第一步:备份配置(重中之重!)
先把cn=config导出备份,万一操作炸了能恢复:
slapcat -b cn=config -l config_backup.ldif
第二步:检查并清理依赖条目
先找出所有用了inetOrgPerson对象类的条目,替换成你的实际base DN:
ldapsearch -Y external -H ldapi:/// -b "dc=yourdomain,dc=com" "(objectClass=inetOrgPerson)" dn
如果返回了一堆条目,你需要逐个修改这些条目,把inetOrgPerson从objectClass列表里移除(或者换成你后续要用到的rfc2307bis相关对象类,比如organizationalPerson+posixAccount)。
第三步:开启schema删除权限(如果需要)
默认OpenLDAP可能不让删schema,先修改配置放开权限:
ldapmodify -Y external -H ldapi:/// <<EOF dn: olcDatabase={0}config,cn=config changetype: modify replace: olcAllowDeleteSchema olcAllowDeleteSchema: yes EOF
第四步:尝试删除inetorgperson schema
现在再执行删除命令:
ldapdelete -v -Y external -H ldapi:/// cn={3}inetorgperson,cn=schema,cn=config
如果还是报错,回去检查是不是还有遗漏的依赖条目没清理干净。
额外提醒:你的rfc2307bis迁移方案可以优化下
其实你没必要删了inetorgperson再重新加——rfc2307bis和inetorgperson是兼容的,正确的迁移流程应该是:
- 先添加rfc2307bis schema(它是nis的超集,能兼容原有nis属性)
- 把所有用nis对象类的条目(比如
posixAccount、posixGroup)迁移到rfc2307bis对应的对象类 - 确认所有条目都切换完成后,再删除nis schema
- inetorgperson可以保留,它的属性在rfc2307bis场景下依然能用
备注:内容来源于stack exchange,提问作者loris
相关产品推荐
相关产品推荐

