《Linux/UNIX OpenLDAP实战指南》——1.3 OpenLDAP schema概念

简介: 默认安装OpenLDAP组件后,系统的配置定义一组常用的schema文件,这组文件一般存放在/etc/openldap/schema目录内,可通过include引用。当所定义的objectClass不存在时,该如何获取objectClass?下面就介绍如何获取schema来包含objectClass。

本节书摘来自异步社区《Linux/UNIX OpenLDAP实战指南》一书中的第1章,第1.3节,作者:郭大勇著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.3 OpenLDAP schema概念

1.3.1 schema介绍及用途
schema是OpenLDAP软件的重要组成部分,主要用于控制目录树中各种条目所拥有的对象类以及各种属性的定义,并通过自身内部规范机制限定目录树条目所遵循的逻辑结构以及定义规范,保证整个目录树没有非法条目数据,避免不合法的条目存在目录树中,从而保障整个目录树信息的完整性、唯一性。

在OpenLDAP目录树中,schema用来指定一个条目所包含的对象类(objectClass)以及每一个对象类所包含的属性值(attribute value)。其属性又分为必要属性和可选属性两种,一般必要属性是指添加条目时必须指定的属性,可选属性是可以选择或不选择的。schema定义对象类,对象类包含属性的定义,对象类和属性组合成条目。

目录树中条目可理解为是一个具体的对象,它们均是通过schema创建的,并符合schema的标准规范,如对你所添加的数据条目中所包含的对象类级属性进行检测,检测通过完成添加,否则打印错误信息。因此,schema是一个数据模型,数据模型可以理解为关系数据库的存储引擎,如MyISAM、InnoDB,主要用来决定数据按照什么方式进行存储,并定义存储在目录树不同条目中数据类型之间的关系。

schema是一个标准,定义了OpenLDAP目录树对象和属性存取方式,这也是OpenLDAP能够存储什么数据类型的取决因素。因此数据有什么属性等均根据schema来实现。OpenLDAP默认的schema文件一般存放在/etc/openldap/schema/目录下,此目录下每个文件定义了不同的对象类和属性。如果想引用额外的schema,只需要在配置文件中通过include包含所指定的schema即可。

以下代码可用于获取当前系统OpenLDAP所使用的schema规范,了解当前所使用的schema文件,这有助于添加目录树中的条目信息,如对象类以及包含哪些属性及值,减少添加条目提示的各种语法错误。

[root@mldap01 schema]# cat /etc/openldap/slapd.conf | grep '^incl*'
include         /etc/openldap/schema/corba.schema
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/duaconf.schema
include         /etc/openldap/schema/dyngroup.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/java.schema
include         /etc/openldap/schema/misc.schema
include         /etc/openldap/schema/nis.schema  #定义网络信息服务
include         /etc/openldap/schema/openldap.schema #OpenLDAP自身
include         /etc/openldap/schema/ppolicy.schema  #定义用户密码规则,例如密码长度及复杂度
include         /etc/openldap/schema/collective.schema

schema在OpenLDAP目录树中承接规范、对条目所包含的objectClass以及数据字节数、格式等来保证整个目录树的完整性。

1.3.2 获取schema的途径
默认安装OpenLDAP组件后,系统的配置定义一组常用的schema文件,这组文件一般存放在/etc/openldap/schema目录内,可通过include引用。当所定义的objectClass不存在时,该如何获取objectClass?下面就介绍如何获取schema来包含objectClass。

1.服务器自身产生的schema文件
通过服务器自身软件包的安装来生成schema文件,本节以sudo为例演示其过程。

查看软件包生成的文件列表,代码如下。

# rpm -ql sudo-1.8.6p3 | grep -i schema
/usr/share/doc/sudo-1.8.6p3/schema.ActiveDirectory
/usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP
/usr/share/doc/sudo-1.8.6p3/schema.iPlanet

通过配置文件引入schema,代码如下。

# cp -f /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP /etc/openldap/schema/sudo.schema
# echo "include /etc/openldap/schema/sudo.schema" > /etc/openldap/slapd.conf

通过schema产生ldif文件,代码如下。

# slapcat -f ~/sudo/sudoSchema.conf -F /tmp/ -n0 -s "cn={0}sudo,cn=schema,cn=config" > 
~/sudo/sudo.ldif
# sed -i "s/{0}sudo/{12}sudo/g" ~/sudo/sudo.ldif
# head -n-8 ~/sudo/sudo.ldif > ~/sudo/sudo-config.ldif

通过OpenLDAP指令导入目录树,代码如下。
ldapadd -Y EXTERNAL -H ldapi:/// -f ~/sudo/sudo-config.ldif
此时就可以通过sudo schema文件定义各种sudo规则从而实现用户权限的控制。

2.自定义schema文件
当所定义的objectClass不在规定范围内,就需要定义schema文件来包含objectClass。关于自定义schema在此不作过多的介绍。

关于自定义schema文件,需要注意以下几点。

保证属性名称唯一性;
通过OID标识符定义objectClass;
属性的描述;
必选属性以及可选属性集合定义。

相关文章
|
4天前
|
Linux 编译器 C语言
Linux(3)Device Tree概念1(上)
Linux(3)Device Tree概念1
25 0
|
1月前
|
存储 Shell Linux
【Shell 命令集合 网络通讯 】Linux 显示Unix-to-Unix Copy (UUCP) 系统的状态信息 uustat命令 使用指南
【Shell 命令集合 网络通讯 】Linux 显示Unix-to-Unix Copy (UUCP) 系统的状态信息 uustat命令 使用指南
26 0
|
1月前
|
缓存 Ubuntu 网络协议
Linux系统编程之文件I/O函数的使用:介绍文件I/O函数的基本概念、用法和实现方式
Linux系统编程之文件I/O函数的使用:介绍文件I/O函数的基本概念、用法和实现方式
21 1
|
3天前
|
NoSQL Linux 程序员
【linux进程信号(一)】信号的概念以及产生信号的方式
【linux进程信号(一)】信号的概念以及产生信号的方式
|
3天前
|
存储 Linux Shell
【linux进程(一)】深入理解进程概念--什么是进程?PCB的底层是什么?
【linux进程(一)】深入理解进程概念--什么是进程?PCB的底层是什么?
|
1月前
|
消息中间件 Linux
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
25 2
|
1月前
|
算法 Linux 调度
Linux 线程介绍:介绍Linux系统中线程的基本概念、创建和调度机制
Linux 线程介绍:介绍Linux系统中线程的基本概念、创建和调度机制
20 0
|
1月前
|
消息中间件 存储 安全
Linux 进程和线程介绍:介绍Linux系统中进程和线程的基本概念、执行方式和相互关系
Linux 进程和线程介绍:介绍Linux系统中进程和线程的基本概念、执行方式和相互关系
34 1
Linux 进程和线程介绍:介绍Linux系统中进程和线程的基本概念、执行方式和相互关系
|
1月前
|
存储 Linux
Linux系统编程之Linux 信号集编程:信号集的基本概念、用法和实现方式
Linux系统编程之Linux 信号集编程:信号集的基本概念、用法和实现方式
12 0
|
1月前
|
Linux Shell
Linux中认识路径的概念
Linux中认识路径的概念