默认安装OpenLDAP 组件后,系统的配置定义一组常用的schema 文件,这组文件一般存放在/etc/openldap/schema 目录内,可通过include 引用。当所定义的objectClass 不存在时,该如何获取objectClass?下面就介绍如何获取schema 来包含objectClass。
通过服务器自身软件包的安装来生成schema 文件,本节以sudo 为例演示其过程。
查看软件包生成的文件列表
1 2 3 4
[root@test ~]# rpm -ql sudo|grep 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
1 2
cp /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 文件
1 2 3
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 指令导入目录树
1
ldapadd -Y EXTERNAL -H ldapi:/// -f ~/sudo/sudo-config.ldif
此时就可以通过sudo schema 文件定义各种sudo 规则从而实现用户权限的控制。
八、objectClass 详解
在OpenLDAP 目录树中,每个条目必须包含一个属于自身条件的对象类,然后再定义其条目属性及对应的值。
OpenLDAP 条目的属性能否添加取决于条目所继承的objectClass 是否包含此属性。objectClass具有继承关系,也就是说,条目添加的属性最终取决于自身所继承的所有objectClass 的集合。如果所添加的属性不在objectClass 范围内,此时目录服务器不允许添加此属性。如果要添加,就必须添加schema 文件产生objectClass 所对应的属性。objectClass 和Attribute 由schema 文件来规定,存放在/etc/openldap/schema 目录下,schema 文件规范objectClass 的构成以及属性和值在目录树中的对应关系。后面章节会介绍如何通过定义schema 文件来产生objectClass,从而生成所需要的属性。
每一个属性和值将用作每个条目在目录树中存储信息的标准,例如能包含哪些属性信息。对于objectClass 的理解,读者可以将objectClass 的属性值理解为一种模板。模板定义哪些信息可以存取,哪些信息不可以存储在目录树中。
1、objectClass 案例分析
下面给出两个对象类案例分析示例。
objectClass 案例分析示例1
所有的objectClass 定义都存放在/etc/openldap/schema/*.schema 文件中。例如,person 属性的定义就存放在core.schema 文件中。
1 2 3 4 5
objectclass ( 2.5.6.6 NAME 'person' DESC 'RFC2256: a person' SUP top STRUCTURAL MUST ( sn $ cn ) M AY ( userPassword $ telephoneNumber $ seeAlso $ description ) )
分析: