《LinuxUNIX OpenLDAP实战指南》——1.3 OpenLDAP schema概念

    xiaoxiao2024-05-08  8

    本节书摘来自异步社区《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;属性的描述;必选属性以及可选属性集合定义。

    相关资源:Linux OpenLDAP 实战指南 (高清)带目录PDF
    最新回复(0)