《Linux/UNIX OpenLDAP实战指南》——1.4 OpenLDAP目录条目概述

简介: OpenLDAP条目的属性能否添加取决于条目所继承的objectClass是否包含此属性。objectClass具有继承关系,也就是说,条目添加的属性最终取决于自身所继承的所有objectClass的集合。如果所添加的属性不在objectClass范围内,此时目录服务器不允许添加此属性。

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

1.4 OpenLDAP目录条目概述

1.4.1 objectClass分类
objectClass类通常分三类:结构型、辅助型、抽象型。

结构型(structural):如person和organizationUnit。
辅助型(auxiliary):如extensibleObject。
抽象型(abstract):如top,抽象型的objectClass不能直接使用。
1.4.2 OpenLDAP常见的objectClass
OpenLDAP常见的objectClass类如下所示。

  • alias
  • applicationEntity
  • dSA
  • applicationProcess
  • bootableDevice
  • certificationAuthority
  • certificationAuthority-V2
  • country
  • cRLDistributionPoint
  • dcObject
  • device
  • dmd
  • domain
  • domainNameForm
  • extensibleObject
  • groupOfNames
  • groupOfUniqueNames
  • ieee802Device
  • ipHost
  • ipNetwork
  • ipProtocol
  • ipService
  • locality
  • dcLocalityNameForm
  • nisMap
  • nisNetgroup
  • nisObject
  • oncRpc
  • organization
  • dcOrganizationNameForm
  • organizationalRole
  • organizationalUnit
  • dcOrganizationalUnitNameForm
  • person
  • organizationalPerson
  • inetOrgPerson
  • uidOrganizationalPersonNameForm
  • residentialPerson
  • posixAccount
  • posixGroup
  • shadowAccount
  • strongAuthenticationUser
  • uidObject
  • userSecurityInformation

如上对象类由OpenLDAP官方所提供,以满足大部分企业的需求,OpenLDAP还支持系统所提供的对象类,例如sudo、samba等。后续章节将对企业中常用的对象类进行阐述并通过案例演示其实现过程,让读者熟悉其原理及实现过程。

当OpenLDAP官方以及系统提供的对象类无法满足企业的特殊需求时,读者可根据OpenLDAP schema内部结构制定schema规范并生成对象类,来满足当前需求。

1.4.3 objectClass详解
在OpenLDAP目录树中,每个条目必须包含一个属于自身条件的对象类,然后再定义其条目属性及对应的值。

OpenLDAP条目的属性能否添加取决于条目所继承的objectClass是否包含此属性。objectClass具有继承关系,也就是说,条目添加的属性最终取决于自身所继承的所有objectClass的集合。如果所添加的属性不在objectClass范围内,此时目录服务器不允许添加此属性。如果要添加,就必须添加schema文件产生objectClass所对应的属性。objectClass和Attribute由schema文件来规定,存放在/etc/openldap/schema目录下,schema文件规范objectClass的构成以及属性和值在目录树中的对应关系。后面章节会介绍如何通过定义schema文件来产生objectClass,从而生成所需要的属性。

每一个属性和值将用作每个条目在目录树中存储信息的标准,例如能包含哪些属性信息。对于objectClass的理解,读者可以将objectClass的属性值理解为一种模板。模板定义哪些信息可以存取,哪些信息不可以存储在目录树中。

1.4.4 objectClass案例分析
下面给出两个对象类案例分析示例。

objectClass案例分析示例1
所有的objectClass定义都存放在/etc/openldap/schema/*.schema文件中。例如,person属性的定义就存放在core.schema文件中。

objectclass ( 2.5.6.6 NAME 'person'
        DESC 'RFC2256: a person'
        SUP top STRUCTURAL
        MUST ( sn $ cn )
        MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )

分析:

如果要定义person类型,需要定义顶级为top,并且必须定义sn和cn两个属性,还可以附加userPassword、telephoneNumber、seeAlso、description 4个属性值。邮件地址、国家等属性不可以定义,除非读者添加相关的objectClass条目,否则提示相关属性不允许添加。

objectClass案例分析示例2
objectClass: (2.5.6.0 NAME 'top'
ABSTRACT  
MUST (objectClass))   

objectClass: ( 2.5.6.6 NAME 'person'
SUP top STRUCTURAL
MUST (sn $ cn )
MAY (userPassword $ telephoneNumber $
seeAlso $ description ))

分析:

对于此案例,如果要定义top属性,必须定义一个objectClass属性。因为此案例中还定义了person属性,所以要必须定义sn和cn属性,以及可以附加的属性(userPassword、telephoneNumber、seeAlso、description)。此案例中必须要定义的有3个属性分别是objectClass、sn以及cn。通过此案例下一级的objectClass可以继承上一级objectClass的属性信息。

注:
根据定义,对于不同的objectClass,属性的相关信息也不同。希望通过上面两个案例的介绍,能让读者了解objectClass的含义以及属性的含义。

相关文章
|
13天前
|
安全 网络协议 Linux
Linux网络名称空间概述
Linux网络名称空间是操作系统级别的一种虚拟化技术🔄,它允许创建隔离的网络环境🌐,使得每个环境拥有自己独立的网络资源,如IP地址📍、路由表🗺️、防火墙规则🔥等。这种技术是Linux内核功能的一部分,为不同的用户空间进程提供了一种创建和使用独立网络协议栈的方式。本文旨在全方面、多维度解释Linux网络名称空间的概念、必要性和作用。
Linux网络名称空间概述
|
2月前
|
Shell Linux
Linux下的Shell基础——Shell概述和入门(一)
Linux下的Shell基础——Shell概述和入门(一)
38 0
Linux下的Shell基础——Shell概述和入门(一)
|
2月前
|
缓存 运维 Linux
Linux系统调优详解(一)——系统调优概述与Top命令详解
Linux系统调优详解(一)——系统调优概述与Top命令详解
51 4
|
1月前
|
存储 Shell Linux
【Shell 命令集合 网络通讯 】Linux 显示Unix-to-Unix Copy (UUCP) 系统的状态信息 uustat命令 使用指南
【Shell 命令集合 网络通讯 】Linux 显示Unix-to-Unix Copy (UUCP) 系统的状态信息 uustat命令 使用指南
26 0
|
3月前
|
数据采集 存储 Ubuntu
Linux操作系统概述
【1月更文挑战第1天】Linux操作系统概述。
36 1
|
1月前
|
域名解析 网络协议 Linux
|
1月前
|
消息中间件 存储 缓存
概述Linux进程间通信模式
【2月更文挑战第14天】
|
1月前
|
Oracle Ubuntu Unix
Unix与Linux区别
Unix: Unix是一个操作系统家族的名称,最早由贝尔实验室(Bell Labs)的肖像电机公司(AT&T)开发。最早的Unix版本是在1969年创建的。 Linux: Linux是由芬兰计算机科学家Linus Torvalds在1991年创建的。它是作为一个免费、开放源代码的Unix克隆而开始的。
19 1
|
2月前
|
Unix Shell Linux
在Unix/Linux Shell中,管道(`|`)和重定向
在Unix/Linux Shell中,管道(`|`)和重定向
23 1
|
2月前
|
Ubuntu Linux KVM
第一章Linux概述
第一章Linux概述
28 0