如何通过LDIF与ldapadd/ldapmodify为OpenLDAP用户添加属性?
解决OpenLDAP添加mail/middle_name/city属性的对象类违规问题
问题原因
你遇到的Object class violation (65)错误,是因为当前用户条目仅使用了person和top对象类——这两个类的属性集合里不包含mail,自然不允许添加该属性。同理,middle_name和city也不属于这两个类的允许属性范围。
解决方案
分两种场景处理,优先推荐使用LDAP标准属性与对象类,如需自定义属性名再选择扩展schema方案。
场景1:使用LDAP标准属性与对象类
LDAP有现成的对象类和属性对应你的需求:
mail属性属于inetOrgPerson对象类(该类继承自person,兼容原有属性)- 中间名可使用标准属性
initials(存储缩写)或givenName(存储完整中间名) - 城市对应标准属性
l(即localityName)
新用户条目LDIF示例
dn: cn=john,ou=People,dc=example,dc=com objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson cn: john sn: John mail: john@john.com initials: M # 例如John M. Doe的中间名缩写 givenName: John Michael # 如需完整中间名,可结合givenName使用 l: New York # 对应城市属性
执行添加命令(替换为你的管理员DN):
ldapadd -x -D cn=admin,dc=example,dc=com -W -f john.ldif
已有用户条目修改LDIF示例
如果用户条目已存在,需用ldapmodify添加对象类和属性:
dn: cn=john,ou=People,dc=example,dc=com changetype: modify add: objectClass objectClass: inetOrgPerson - add: mail mail: john@john.com - add: l l: New York
执行修改命令:
ldapmodify -x -D cn=admin,dc=example,dc=com -W -f modify_john.ldif
场景2:自定义属性名(如必须用middle_name/city)
如果一定要使用非标准的middle_name和city属性名,需先扩展OpenLDAP的schema:
- 创建自定义schema的LDIF文件(
custom_schema.ldif):
dn: cn=custom,cn=schema,cn=config objectClass: olcSchemaConfig cn: custom # 定义middle_name属性 olcAttributeTypes: ( 1.3.6.1.4.1.42.2.27.999.1.1 NAME 'middle_name' DESC 'Middle Name' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) # 定义city属性 olcAttributeTypes: ( 1.3.6.1.4.1.42.2.27.999.1.2 NAME 'city' DESC 'City' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) # 定义支持这些属性的自定义对象类 olcObjectClasses: ( 1.3.6.1.4.1.42.2.27.999.2.1 NAME 'customPerson' DESC 'Person with custom attributes' SUP person STRUCTURAL MUST cn MUST sn MAY ( middle_name $ city $ mail ) )
- 导入自定义schema(使用root权限通过ldapi连接):
ldapadd -Y EXTERNAL -H ldapi:/// -f custom_schema.ldif
- 创建或修改用户条目时使用自定义对象类:
dn: cn=john,ou=People,dc=example,dc=com objectClass: top objectClass: customPerson cn: john sn: John mail: john@john.com middle_name: Michael city: New York
执行添加/修改命令即可完成操作。
内容的提问来源于stack exchange,提问作者Udi
相关产品推荐
相关产品推荐

