知识准备
Schema是LDAP的一个重要组成部分,类似于数据库的模式定义,LDAP的Schema定义了LDAP目录所应遵循的结构和规则,比如一个 objectclass会有哪些属性,这些属性又是什么结构等等,schema给LDAP服务器提供了LDAP目录中类别,属性等信息的识别方式,让这些 可以被LDAP服务器识别。
在LDAP的schema中,有四个重要的元素:
1. Objectclass
objectclass定义了一个类别,这个类别会被不同的目录(在LDAP中就是一个Entry)用到,它说明了该目录应该有哪些属性,哪些属性是必须 的,哪些又是可选的。一个objectclass的定义包括名称(NAME),说明(DESC),类型(STRUCTURAL或AUXILARY ,表示是结构型的还是辅助型的),必须属性(MUST),可选属性(MAY)等信息。
2. Attribute
attribute就是一个上面objectclass中可能包含的属性,对其的定义包括名称,数据类型,单值还是多值以及匹配规则等。后面用具体的例子来说明。
3. Syntax
syntax是LDAP中的“语法”,其实就是LDAP中会用到的数据类型和数据约束,这个语法是遵从X.500中数据约束的定义的。其定义需要有一个ID(遵从X.500)以及说明(DESP)
4. Matching Rules
是用来指定某属性的匹配规则,实际上就是定义一个特殊的Syntax的别名,让LDAP服务器可以识别,并对定义的属性进行匹配
很多常用schema的定义都在了RFC2252中,LDAP服务器都应该支持这些基本的schema。下面进行定义自己的schema。
正文
1.创建新的schema文件
创建目录
mkdir testSchema
创建schema文件
cd testSchema
//新建schema文件
vim test.schema
编辑schema文件
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)
objectclass ( 1.3.6.1.4.1.42.2.27.4.2.133
NAME 'personExt'
DESC 'personExt'
SUP top
AUXILIARY
MAY ( cn $ idCard $ sex ))
根据我们添加的schema,
attributetype的第一项为oid,oid必须唯一
name表示属性名称
desc是说明
SYNTAX是表示字段的数据类型,1.3.6.1.4.1.1466.115.121.1.15表示字符类型,可在ldap admin上查看
SINGLE-value表示这个属性只有一个值,有些属性可以有多个值,比如联系地址等。默认的话,是多值的。
2.创建编译用的配置文件
vim test.conf
#内容
include /home/song/testSchema/test.schema
3.执行slaptest命令编译自定义的schema,生成.ldif等文件
slaptest -f test.conf -F /home/song/testSchema
slaptest命令是把test.conf的内容转成ldif格式
4.修改ldif文件
找到/ testSchema/cn=config/cn=schema/cn={0}test.ldif文件
修改文件名
mv cn=config/cn=schema/cn={0}test.ldif cn=config/cn=schema/personExt.ldif
修改文件内容
vim cn=config/cn=schema/personExt.ldif
修改dn和cn
5.执行slapadd命令,将该文件添加进OpenLDAP库
slapadd -l cn=config/cn=schema/personExt.ldif -n 0
如果提示报错,报错原因可能是oid冲突,需要按上面步骤重新编译
6.文件赋权并重启slapd服务
chmod -R 777 /etc/openldap/slapd.d/cn=config/cn=schema
systemctl restart slapd
至此,自定义的schema已生效
7.通过LDAP admin工具查看并添加
选择一个用户进行编辑
找到我们新增的personExt
右边进行编辑对应的属性
8.删除修改自定义的schema
目前没找到直接命令修改或删除相应的schema,暴力点的方式为直接删除对应的.ldif文件,如
rm -r /etc/openldap/slapd.d/cn\=config/cn=schema/cn={15}wtcertserial.ldif
重启slapd服务
systemctl restart slapd
删除后重新导入修改后的schema即可
9.自定义数据关联自带的schema
上面创建的schema格式算是独立的schema。我们也可以创建继承现有的objectclass或现有的attribute
如
objectclass ( 1.3.6.1.4.1.42.2.27.4.2.136
NAME 'wtCertSerial'
DESC 'certificate serialNumber'
SUP top
AUXILIARY
MAY ( serialNumber ))
这是自定义的一个objectclass,包含一个serialNumber,这个属性是在core.ldif中定义的,生成配置文件的时候我们需要包含core.schema,不然按照上面的步骤生成ldif文件会报错serialNumber未定义。
即上文第二步编辑配置文件中,在include自定义文件之前先include ./core.chema,就想c语言要调用某个库需要包含头文件一样,并把core.schema文件复制到当前目录,core.schema在/etc/openldap/schema,其他自带的schema也是在这个目录下
接下来的步骤和上面一样。
实际使用中,根据自己定义的schema用到的objectclass和attribute,找到对应的现有的schema文件,进行包含编译
参考文章: