OpenLDAP自定义属性报错:未定义属性类型,添加ipPhone属性遇阻
搞定OpenLDAP自定义ipPhone属性的添加问题
嘿,我看你是因为默认telephoneNumber属性没法存带*号的分机号,才想着加个自定义的ipPhone属性对吧?刚好这事儿我之前折腾过,给你补全完整的配置步骤和正确的LDIF文件。
完整可用的LDIF配置
你之前的LDIF片段没写完,我给你补全正确的属性定义,还帮你关联到适合的objectClass(这样普通用户条目就能用上这个属性):
dn: cn=schema,cn=config changetype: modify add: olcAttributeTypes olcAttributeTypes: ( 2.25.128424792425578037463837247958458780603.1 NAME 'ipPhone' DESC 'Extension Number (supports special characters like *)' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) - add: olcObjectClasses olcObjectClasses: ( 2.25.128424792425578037463837247958458780603.2 NAME 'ipPhonePerson' DESC 'Person with ipPhone attribute' SUP inetOrgPerson STRUCTURAL MAY ( ipPhone ) )
关键细节解释
- OID的事儿:这里用了你给的OID前缀,得确认这个OID没被你LDAP服务器里的其他属性用了。要是拿不准,自己生成个2.25开头的私有OID就行(符合RFC 4520的私有分支规范)。
- 字符支持:语法选的
1.3.6.1.4.1.1466.115.121.1.15是Directory String类型,支持所有UTF-8字符,包括你需要的*号,完美适配需求。 - 安全扩展objectClass:我没直接改默认的
inetOrgPerson,而是建了个继承它的新结构类ipPhonePerson——这样既不破坏原有schema,又能让用户条目用上新属性,后续升级LDAP也不容易出问题。
实际操作步骤
- 把上面的内容存成
add-ipphone.ldif文件。 - 用
ldapmodify命令把配置加载到LDAP服务器:
ldapmodify -x -D cn=admin,cn=config -W -f add-ipphone.ldif
-x:用简单认证模式-D:填你的配置管理员DN-W:会提示你输密码-f:指定刚才存的LDIF文件路径
- 验证一下属性是不是加成功了:
ldapsearch -x -b cn=schema,cn=config "(olcAttributeTypes=*ipPhone*)"
可选方案:修改默认objectClass(不推荐)
要是你嫌建新类麻烦,也可以直接给inetOrgPerson加ipPhone作为可选属性,但我不建议这么干——改默认schema容易在后续升级时出冲突。实在要试的话,用这个LDIF:
dn: cn=schema,cn=config changetype: modify add: olcObjectClasses olcObjectClasses: ( 2.16.840.1.113730.3.2.2 NAME 'inetOrgPerson' DESC 'RFC2798: Internet Organizational Person' SUP organizationalPerson STRUCTURAL MUST ( sn $ cn ) MAY ( userPassword $ telephoneNumber $ seeAlso $ description $ givenName $ initials $ displayName $ employeeNumber $ employeeType $ title $ departmentNumber $ physicalDeliveryOfficeName $ l $ st $ postalCode $ postOfficeBox $ street $ c $ o $ manager $ secretary $ uid $ carLicense $ homePhone $ mobile $ pager $ jpegPhoto $ userCertificate $ mail $ facsimileTelephoneNumber $ ou $ roomNumber $ userSMIMECertificate $ userPKCS12 $ ipPhone ) )
内容的提问来源于stack exchange,提问作者Jemson
相关产品推荐
相关产品推荐

