1.创建新的schema文件
1.1 创建自己的目录
mkdir /etc/openldap/my
1.2 创建schema文件personExt.schema
cd /etc/openldap/my
vim personExt.schema
1.3 编辑personExt.schema文件
attributetype:类属性定义
必须确保每个项的oid全局唯一 如:2.16.840.1.113730.3.1.902
1.3.6.1.4.1.1466.115.121.1.15 为字符串类型的语法
#身份证
attributetype ( 2.16.840.1.113730.3.1.902
NAME 'idCard'
DESC 'the id of person'
EQUALITY caseExactMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE )
#性别
attributetype ( 2.16.840.1.113730.3.1.903
NAME 'sex'
DESC 'the sex of person'
EQUALITY caseExactMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE)
#personExt
objectclass ( 1.3.6.1.4.1.42.2.27.4.2.88
NAME 'personExt'
DESC 'personExt'
SUP top
AUXILIARY
MAY ( cn $ idCard $ sex ))
2:创建编译用的配置文件,例如ext.conf
[root@xxx my]# vim ext.conf
include /etc/openldap/my/personExt.schema
3. 执行slaptest命令编译自定义的schema,生成ldif等文件
slaptest -f ext.conf -F /etc/openldap/my
4. 修改ldif文件
进入etc/openldap/my目录下的cn=config/cn=schema目录下可以看到生成的一个ldif文件。此时重命名该文件personext.ldif,并修改其中的cn和dn。(ldif文件中对空格等元素有严格要求,请不要额外添加空格等其他不必要的元素)
cd /etc/openldap/my/cn\=config/cn\=schema
cat personext.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 82df3bb8
dn: cn=personext,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: personext
olcAttributeTypes: {0}( 2.16.840.1.113730.3.1.902 NAME 'idCard' DESC 'the id
of person' EQUALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SI
NGLE-VALUE )
olcAttributeTypes: {1}( 2.16.840.1.113730.3.1.903 NAME 'sex' DESC 'the sex o
f person' EQUALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SING
LE-VALUE )
olcObjectClasses: {0}( 1.3.6.1.4.1.42.2.27.4.2.88 NAME 'personExt' DESC 'per
sonExt' SUP top AUXILIARY MAY ( cn $ idCard $ sex ) )
structuralObjectClass: olcSchemaConfig
entryUUID: 1959ae8c-3443-103a-8a17-3f6499b48a02
creatorsName: cn=config
createTimestamp: 20200527085211Z
entryCSN: 20200527085211.695732Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20200527085211Z
5.执行slapadd命令,将该文件添加进OpenLdap库
slapadd -l personext.ldif -n 0
如下图所示即为成功,需要注意是否有提示属性重复或者oid重复,如果提示报错需要修改schema后再次编译。
较为常见的错误是提示你属性重复或者oid重复,此时最好重新修改schema文件然后再次编译。
6.以上步骤完成后可以在/etc/openldap/slapd.d/cn=config/cn=schema路径下看到自己新添加的objectclass对应的ldif文件了
7.文件赋权并重启ldap服务
直接重启服务会报错,需要给/etc/openldap/slapd.d/cn=config/cn=schema赋权或直接修改文件所有者为ldap,否则用户ldap无法读取
cd /etc/openldap/slapd.d/cn=config/cn=schema
chmod -R 777 cn=schema
systemctl restart slapd
至此,自定义的objectClass已经生效
8.删除自定义的objectClass
移除/etc/openldap/slapd.d/cn=config/cn=schema下personext.ldif文件,并重启opldap服务即可