第 5 章 目录条目架构参考


5.1. 关于目录服务器架构

本章概述了目录模式的一些基本概念,并列出描述模式的文件。它描述了对象类、属性和对象标识符(OID),并简要讨论扩展服务器模式和模式检查。

5.1.1. 模式定义

目录架构是一组规则,用于定义数据如何存储在目录中。目录信息存储离散条目,每个条目都由一组属性及其值组成。条目中描述的身份类型在条目的对象类中定义。对象类指定条目通过对象类定义的一组属性描述的对象类型。

基本上,架构文件是可以创建的类型条目列表( 对象类)以及可以描述这些条目的方式( 属性)。架构 定义了 对象类和属性是什么。该架构还定义属性值包含(属性 的语法)的格式,以及是否只能是该属性的一个实例。

其他架构文件可以添加到目录服务器配置中并加载到服务器中,以便可以自定义模式,并根据需要进行扩展。

有关对象类、属性以及目录服务器如何使用模式的详细信息,请参阅 部署指南

警告

如果 schema 定义包含太多字符,目录服务器无法启动。在 LDAP 标准允许使用零个或多个空格的地方,请精确使用一个空格;例如,NAME 关键字和属性类型名称之间的位置。

5.1.1.1. 对象类

在 LDAP 中,对象类定义可用于定义条目的属性集合。LDAP 标准为许多常用条目提供对象类,如人员 (个人和 inetOrgPerson)、组(groupOfUniqueNames)、位置(locality)、机构和部门(机构和组织单元 )以及设备(device)。

在架构文件中,对象类由 objectclasses 行标识,然后是其 OID、name、description、其直接高级对象类(需要与对象类结合使用的对象类),以及使用此对象类共享其属性的列表(MUST)和允许(MAY)属性。

这在 例 5.1 “人员对象类架构条目” 中显示。

例 5.1. 人员对象类架构条目

objectClasses: ( 2.5.6.6 NAME 'person' DESC 'Standard LDAP objectclass' SUP top MUST ( sn $ cn ) MAY ( description $ seeAlso $ telephoneNumber $ userPassword ) X-ORIGIN 'RFC 2256' )
Copy to Clipboard Toggle word wrap
5.1.1.1.1. 必需和允许的属性

每个对象类定义多个必要属性和允许的属性。必要的属性必须存在于使用指定对象类的条目中,而允许的属性是允许的且可供使用的条目使用,但条目不需要有效。

例 5.1 “人员对象类架构条目” 中,person 对象类需要 cn,sn, 和 swig 属性,并允许 描述,seeAlso, 和 userPassword 属性。

注意

所有条目都需要 这个属性,它列出了分配给条目的对象类。

5.1.1.1.2. 对象类继承

一个条目可以有多个对象类。例如,个人条目由 person 对象类定义,但同一人也可能由 inetOrgPersonorganizationalPerson 对象类中的属性描述。

此外,对象类也可以是分层。除了自己的必要和允许的属性外,对象类也可以从另一个类继承属性。第二个对象类 是第一个 对象类。

服务器的对象类结构决定了特定条目所需的和允许的属性列表。例如,用户条目必须具有 inetOrgPerson 对象类。在这种情况下,该条目还必须包括 inetOrgPerson,organizationalPerson,以及 organizationalPerson 的 超级对象类,即 个人

objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
Copy to Clipboard Toggle word wrap

inetOrgPerson 对象类分配给条目时,该条目会自动继承高级对象类的必需属性和允许的属性。

5.1.1.2. 属性

目录条目由属性及其值组成。这些对称为 attribute-value assertions 或 AVAs。目录中的任何信息都与描述性属性关联。例如,cn 属性用于存储个人的全名,如 cn: John Smith

其他属性可以提供有关 John Smith 的更多信息:

givenname: John
surname: Smith
mail: jsmith@example.com
Copy to Clipboard Toggle word wrap

在 schema 文件中,属性由 attributetypes 行标识,然后是其 OID、name、description、syntax (其值允许的格式),可选属性是 single- 或 multi-valued,以及定义属性的位置。

这在 例 5.2 “描述属性架构条目” 中显示。

例 5.2. 描述属性架构条目

attributetypes: ( 2.5.4.13 NAME 'description' DESC 'Standard LDAP attribute type' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'RFC 2256' )
Copy to Clipboard Toggle word wrap

可以缩写一些属性。这些缩写列为属性定义的一部分:

attributetypes: ( 2.5.4.3 NAME ( 'cn' 'commonName' ) ...
Copy to Clipboard Toggle word wrap
5.1.1.2.1. 目录服务器属性语法

属性的语法定义属性允许的值的格式;与其他 schema 元素一样,使用模式文件条目中语法的 OID 为属性定义语法。在 Directory Server 控制台中,语法通过友好的名称来引用。

目录服务器使用属性的语法对条目执行排序和模式匹配。

有关 LDAP 属性语法的更多信息,请参阅 RFC 4517

Expand
表 5.1. 支持的 LDAP 属性语法
名称OID定义

二进制

1.3.6.1.4.1.1466.115.121.1.5

已弃用。改为使用 Octet 字符串。

位字符串

1.3.6.1.4.1.1466.115.121.1.6

对于位化的值,如 '0101111101'B

布尔值

1.3.6.1.4.1.1466.115.121.1.7

对于只有两个允许值的属性,TRUE 或 FALSE。

国家(国家)字符串

1.3.6.1.4.1.1466.115.121.1.11

对于限制为只有两个可打印的字符串字符的值;例如,美国美国美国。

DN

1.3.6.1.4.1.1466.115.121.1.12

对于可分辨名称(DN)的值。

交付方法

1.3.6.1.4.1.1466.115.121.1.14

对于包含提供信息或联系实体的首选方法的值。不同的值用美元符号($)分隔。例如:

[literal,subs="+ quotes,verbatim"] …​. telephone $ physical …​.

目录字符串

1.3.6.1.4.1.1466.115.121.1.15

对于有效 UTF-8 字符串的值。这些值不一定区分大小写。目录字符串和相关语法都提供了区分大小写的匹配规则和不区分大小写的匹配规则。

增强指南

1.3.6.1.4.1.1466.115.121.1.21

对于包含基于属性和过滤器的复杂搜索参数的值。

Facsimile

1.3.6.1.4.1.1466.115.121.1.22

包含 fax 号的值。

传真

1.3.6.1.4.1.1466.115.121.1.23

对于包含传输传真的镜像的值。

常规时间

1.3.6.1.4.1.1466.115.121.1.24

对于作为可打印字符串编码的值。必须指定时区。强烈建议您使用 GMT 时间。

指南

1.3.6.1.4.1.1466.115.121.1.25

过时.对于包含基于属性和过滤器的复杂搜索参数的值。

IA5 字符串

1.3.6.1.4.1.1466.115.121.1.26

对于有效字符串的值。这些值不一定区分大小写。IA5 字符串和相关语法都提供了区分大小写的匹配规则和不区分大小写的匹配规则。

整数

1.3.6.1.4.1.1466.115.121.1.27

表示整数的值。

JPEG

1.3.6.1.4.1.1466.115.121.1.28

包含镜像数据的值。

名称和可选 UID

1.3.6.1.4.1.1466.115.121.1.34

对于包含 DN 和(可选)唯一 ID 的组合值的值。

数字字符串

1.3.6.1.4.1.1466.115.121.1.36

对于包含数字和空格的字符串的值。

OctetString

1.3.6.1.4.1.1466.115.121.1.40

对于二进制值,这将替换二进制语法。

对象类描述

1.3.6.1.4.1.1466.115.121.1.37

包含对象类定义的值。

OID

1.3.6.1.4.1.1466.115.121.1.38

对于包含 OID 定义的值。

邮寄地址

1.3.6.1.4.1.1466.115.121.1.41

对于以 postal-address = dstring *("$" dstring) 格式编码的值。例如:

[literal,subs="+quotes,verbatim"] …​.1234 主 St.$Raleigh, NC 12345$USA …​.

每个 dstring 组件都编码为 DirectoryString 值。如果发生反斜杠和美元字符,则用引号括起来,因此不会为行分隔符出错。许多服务器将邮寄地址限制为最多 30 个字符的 6 行。

可打印的字符串

1.3.6.1.4.1.1466.115.121.1.44

对于包含可打印字符串的值。

空格不区分大小写的字符串

2.16.840.1.113730.3.7.1

对于包含空格不区分大小写的字符串的值。

telephoneNumber

1.3.6.1.4.1.1466.115.121.1.50

对于以电话号码形式的值。建议您以国际形式使用电话号码。

Teletex Terminal Identifier

1.3.6.1.4.1.1466.115.121.1.51

对于包含国际电话号码的值。

Telex Number

1.3.6.1.4.1.1466.115.121.1.52

对于包含电话数字、国家代码和电话代码的值。

URI

 

对于 URL 形式的值,以字符串形式引入,如 http://https://ftp://ldap://ldaps://。URI 的行为与 IA5 String 相同。有关此语法的更多信息,请参阅 RFC 4517

5.1.1.2.2. 单值和多值属性

默认情况下,大多数属性都是多值。这意味着条目可以多次包含相同属性,并具有不同值。例如:

dn: uid=jsmith,ou=marketing,ou=people,dc=example,dc=com
ou: marketing
ou: people
Copy to Clipboard Toggle word wrap

例如,cntelobjectclass 属性可以有多个值。单值的属性 - 也就是说,只能指定属性的一个实例 - 在 模式中指定,因为仅允许单个值。例如,uidNumber 只能有一个可能的值,因此其 schema 条目具有术语 SINGLE-VALUE。如果属性是多值,则没有值表达式。

5.1.2. 默认目录服务器架构文件

目录服务器的模板架构定义存储在 /etc/dirsrv/schema 目录中。这些默认架构文件用于为新目录服务器实例生成架构文件。每个服务器实例在 /etc/dirsrv/slapd-instance/schema 中都有自己的特定于实例的模式目录。实例目录中的架构文件仅由该实例使用。

要修改目录架构,请在实例特定架构目录中创建新属性和新对象类。由于默认架构用于创建新实例,并且每个实例都有自己的架构文件,因此每个实例可能有不同的架构,这与每个实例的使用匹配。

使用 Directory Server Console 或 LDAP 命令添加的任何自定义属性都存储在 99user.ldif 文件中;可以把其他自定义模式文件添加到每个实例的 /etc/dirsrv/slapd-instance/schema 目录中。不要对 Red Hat Directory Server 附带的标准文件进行任何修改。

有关目录服务器如何存储规划目录模式信息和建议的更多信息,请参阅 部署指南

Expand
表 5.2. 模式文件
模式文件用途

00core.ldif

X.500 和 LDAP 标准(RFC)推荐的核心模式。此架构由 Directory 服务器本身用于实例配置并启动服务器实例。

01core389.ldif

X.500 和 LDAP 标准(RFC)推荐的核心模式。此架构由 Directory 服务器本身用于实例配置并启动服务器实例。

02common.ldif

来自 RFC 2256、LDAPv3 的标准模式,以及用于配置条目的 Directory Server 定义的标准模式。

05rfc2927.ldif

RFC 2927 的 schema,"MIME Directory Profile for LDAP Schema."

05rfc4523.ldif

X.509 证书的 schema 定义。

05rfc4524.ldif

Cosine LDAP/X.500 模式。

06inetorgperson.ldif

来自 RFC 2798、RFC 2079 和 RFC 1274 的 inetOrgPerson 模式元素。

10rfc2307.ldif

RFC 2307 中的模式,"使用 LDAP 作为网络信息服务的方法"。

20subscriber.ldif

Directory Server-Nortel 订阅者互操作性的通用模式元素。

25java-object.ldif

RFC 2713 的 schema,"代表 LDAP 目录中 Java 对象的Schema"。

28pilot.ldif

pilot RFC (特别是 RFC 1274)中的 schema,这些 RFC 1274 不再建议在新部署中使用。

30ns-common.ldif

通用模式.

50ns-admin.ldif

管理服务器使用的 schema。

50ns-certificate.ldif

红帽认证系统使用的模式.

50ns-directory.ldif

传统目录服务器 4.x 服务器使用的 schema。

50ns-mail.ldif

邮件服务器的 schema。

50ns-value.ldif

Directory 服务器中值项的 schema。

50ns-web.ldif

Web 服务器的 schema。

60autofs.ldif

用于自动挂载配置的对象类;这是用于 NIS 服务器的多个架构文件之一。

60eduperson.ldif

教育相关人员和组织条目的模式元素。

60mozilla.ldif

Mozilla 相关用户配置文件的 schema 元素。

60nss-ldap.ldif

GSS-API 服务名称的 schema 元素。

60pam-plugin.ldif

将目录服务与 PAM 模块集成的 schema 元素。

60pureftpd.ldif

用于定义 FTP 用户帐户的 schema 元素。

60rfc2739.ldif

日历和 vCard 属性的 schema 元素。

60rfc3712.ldif

用于配置打印机的 schema 元素。

60sabayon.ldif

定义 sabayon 用户条目的 schema 元素。

60sudo.ldif

定义 sudo 用户和角色的 schema 元素。

60trust.ldif

用于定义 NSS 或 PAM 的信任关系的 schema 元素。

99user.ldif

通过 Directory Server Console 添加的自定义模式元素。

5.1.3. 对象标识符(OID)

所有架构元素都分配有对象标识符(OID),包括属性和对象类。OID 是整数序列,通常写为以点分隔的字符串。所有自定义属性和类都必须符合 X.500 和 LDAP 标准。

警告

如果没有为 schema 元素指定 OID,Directory 服务器会自动使用 ObjectClass_name-oidattribute_name-oid。但是,使用文本 OID 而不是数字 OID 可能会导致客户端、服务器互操作性和服务器行为出现问题,并强烈建议分配一个数字 OID。

OID 可以基于.base OID 是一个根号码,用于机构的每个 schema 元素,然后从那里递增 schema 元素。例如,基本 OID 可以是 1。然后,公司使用 1.1 作为属性,因此每个新属性的 OID 为 1.1.x。它对对象类使用 1.2,因此每个新对象类的 OID 为 1.2.x

对于 Directory Server 定义的 schema 元素,基本 OID 如下:

  • Netscape 基础 OID 是 2.16.840.1.113730
  • Directory Server 基础 OID 是 2.16.840.1.113730.3
  • 所有 Netscape 定义的属性都有基本 OID 2.16.840.1.113370.3.1
  • 所有 Netscape 定义的对象类都有基本 OID 2.16.840.1.113730.3.2

有关 OID 或请求前缀的更多信息,请转到 Internet 分配号授权机构(IANA)网站,地址为 http://www.iana.org/

5.1.4. 扩展架构

目录服务器模式包含数百个对象类和属性,可用于满足大多数目录要求。此架构可通过新的对象类和属性进行扩展,它们满足企业中目录服务的更改要求,方法是创建自定义架构文件。

在向架构添加新属性时,应创建一个新的对象类来包含它们。在现有对象类中添加新属性可能会破坏目录服务器与依赖标准 LDAP 模式的现有 LDAP 客户端兼容性,并可能会在升级服务器时造成困难。

有关扩展服务器模式的更多信息,请参阅 部署指南

5.1.5. Schema 检查

模式检查 意味着目录服务器在创建、修改或导入的数据库中会检查每个条目,以确保它符合 schema 文件中的架构定义。模式检查会验证三个操作:

  • 条目中使用的对象类和属性在目录架构中定义。
  • 对象类所需的属性包含在条目中。
  • 只有对象类允许的属性包含在条目中。

您应该运行打开了模式检查的目录服务器。有关启用架构检查的详情,请参考 管理指南

5.1.6. 语法验证

语法验证 意味着目录服务器检查属性的值是否与该属性所需的语法匹配。例如,语法验证将确认新的 telephoneNumber 属性实际具有值的有效电话号码。

使用其基本配置时,语法验证(如模式检查)将检查任何目录修改,以确保属性值与所需语法匹配,并拒绝违反语法的任何修改。(可选)可以将语法验证配置为记录有关语法违反情况的警告消息,并拒绝更改或允许修改过程成功。

所有语法都是根据 RFC 4514 验证的,但 DN 除外。默认情况下,DN 根据 RFC 1779RFC 2253 验证,它们比 RFC 4514 严格。必须明确配置 DN 的严格验证。

此功能检查 表 5.1 “支持的 LDAP 属性语法” 中列出的所有属性语法,但二进制语法(无法验证)和非标准语法除外,它们没有定义所需的格式。未验证的 语法如下:

  • 传真(二进制)
  • OctetString (binary)
  • JPEG (binary)
  • 二进制(非标准)
  • 空格(敏感的字符串)(非标准)
  • URI (非标准)

启用语法验证后,每当向条目中添加或修改属性时,都会检查 新的 属性值。(这不包括 复制 更改,因为供应商服务器上检查了语法。)也可以通过运行 syntax-validation.pl 脚本来 检查现有的 属性值是否有语法违反情况。

有关语法验证选项的详情,请查看 管理指南

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat