OpenLDAP自定义Schema

本文详细介绍了如何创建和管理自定义的LDAP Schema,包括定义Objectclass、Attribute、Syntax和Matching Rules,以及如何在OpenLDAP中编译、导入和删除这些自定义Schema。通过示例展示了如何为LDAP目录添加新属性并关联到现有Schema,从而扩展LDAP的数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知识准备

Schema是LDAP的一个重要组成部分,类似于数据库的模式定义,LDAPSchema定义了LDAP目录所应遵循的结构和规则,比如一个 objectclass会有哪些属性,这些属性又是什么结构等等,schemaLDAP服务器提供了LDAP目录中类别,属性等信息的识别方式,让这些 可以被LDAP服务器识别。
LDAPschema中,有四个重要的元素:
 1. Objectclass
objectclass
定义了一个类别,这个类别会被不同的目录(在LDAP中就是一个Entry)用到,它说明了该目录应该有哪些属性,哪些属性是必须 的,哪些又是可选的。一个objectclass的定义包括名称(NAME),说明(DESC),类型(STRUCTURALAUXILARY ,表示是结构型的还是辅助型的),必须属性(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文件,进行包含编译

参考文章:

https://www.cnblogs.com/ForsakenCoder/p/12149910.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值