文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>OpenLDAP 2.1 管理员指南(3)

OpenLDAP 2.1 管理员指南(3)

时间:2007-04-23  来源:yn0287

6、 运行SLAPD

slapd被设计为可以作为一个单独的服务器运行。这允许服务器充分的利用缓存,利用底层数据库的特性来管理并发,并且节省系统资源。从inetd(8)来运行slapd(8)不能作为选项。

6.1、 命令行选项

slapd(8)支持大量的命令行选项。它们在手册页中有详细的说明。本部分详细说明了几个常用的选项。

-f

该选项说明了可以为slapd使用的另外的配置文件。缺省选项是正常情况下的/usr/local/etc/openldap/slapd.conf。

-h

该选项说明了另外的侦听器配置。缺省的是ldap:///,它表示运行在TCP上的LDAP,在缺省的389端口侦听所有的网络界面。可以指明特殊的主机——端口对或者其他的协议模式(比如,ldaps://或者ldapi://)。例如:-h “ldaps:// ldap://127.0.0.1:666”将创建两个侦听器:一个在默认的LDAP/SSL的636端口,侦听所有网络界面上的通过SSL的LDAP请求,另一个在localhost(环回地址)界面上侦听666端口。主机可以使用IPV4的点分十进制格式,或者使用主机名称。端口必须是数字。

-n

该选项说明了用来进行日志记录或者其他用途的服务名称。默认的服务名称是slapd。

-l

该选项指明了用于syslog(8)应用的本地用户。可以是LOCAL0,LOCAL1,LOCAL2,……LOCAL7等数值。默认值是LOCAL4。该选项并不是在所有系统上都支持。

-u user -g group

该选项分别指明了用来运行的用户或者组的身份。User可以是用户名或者uid,group可以是组名或者gid。

-r directory

该选项指明了一个运行时的目录。slapd将在打开侦听器并且读取任何配置文件或者初始化任何后端数据库之前使用chroot(2)到该目录。

-d | ?

该选项设置slapd的调试级别为。当level是“?”的时候,无论传递给它任何选项,将打印不同的调试级别,然后slapd终止。当前的调试级别是:

Table 6.1: Debugging Levels

Level

Description

-1

enable all debugging

0

no debugging

1

trace function calls

2

debug packet handling

4

heavy trace debugging

8

connection management

16

print out packets sent and received

32

search filter processing

64

configuration file processing

128

access control list processing

256

stats log connections/operations/results

512

stats log entries sent

1024

print communication with shell backends

2048

print entry parsing debugging

可以在调试选项中指定多个调试级别。每次指定一个。或者,因为调试级别是可以相加的,可以指定它们的和。比如,如果需要跟踪函数调用,并且查看正在处理的配置文件,可以设置该选项为:-d 65。或者,可以设定为:-d 1 –d 64。参阅获取更详细的信息。

注意:为了使得除了两个统计级别之外的调试信息生效,slapd必须在编译时定义_DLDAP_DEBUG。

6.2、 启动SLAPD

通常情况下,slapd可以以如下方式运行:

/usr/local/etc/libexec/slapd []*

其中,/usr/local/etc/libexec是由configure脚本决定的,并且是上面描述的选项之一(或者是在slapd(8)中描述)。除非指明了一个调试级别(包括级别0),slapd将会自动fork一个进程,并且从控制它的终端脱离,在后台运行。

6.3、 停止SLAPD

为了安全的停止slapd,应该是用下面的命令:

kill -INT `cat /usr/local/var/slapd.pid`

其中,/usr/local/var由configure脚本决定。

使用其他的暴力方法停止slapd可能造成信息丢失或者数据库崩溃。

7、 数据库创建和维护工具

本部分告诉您如何从脚本中创建slapd数据库,以及如何在遇到问题的时候定位和解决问题。有两种方法创建数据库。首先,可以联机使用LDAP来创建数据库。通过这种方法,只需要简单的启动slapd,然后,使用LDAP客户端向其中增加条目。该方法对于创建小规模的数据库而言是比较适合的(几百条或者上千条条目)。该方法适合于支持更新的数据库。

第二种创建数据库的方法是使用slapd提供的特殊的应用程序脱机执行。如果您有大量的条目需要创建,使用LDAP的方法将消耗太多的时间,或者如果您想确保数据库在创建的时候没有被访问。注意,不是所有的数据库类型都支持这些应用程序。

7.1、 在LDAP上创建数据库

通过这种方法,您使用LDAP客户端(比如:ldapadd(1))来增加条目。您应该确认在启动slapd(8)之前在配置文件中设置了如下选项:

suffix

如“通用数据库指令”部分所描述的,该选项定义了该数据库中保存的条目。应该将它设置为将要创建的子树的root DN。例如:

suffix "dc=example,dc=com"

应该确保指定了索引文件应该被创建的目录:

directory

例如:

directory /usr/local/var/openldap-data

应该使得该目录具有正确的权限,使得slapd可以写入。

还应该配置slapd,以便您可以以具有增加条目权限的用户身份连接。可以配置目录来为该操作指定一个特定的超级管理员用户。这可以通过在数据库定义中使用下面的两个选项实现:

rootdn

rootpw

例如:

rootdn "cn=Manager,dc=example,dc=com"

rootpw secret

这些选项制定了一个DN和口令,该DN可以被作为超级用户的数据库条目进行认证(该条目允许执行任何操作)。这儿指定的DN和口令总是能够工作,无论该条目的名称实际上是否存在,或者无论其口令是什么。这样就解决了在没有任何条目的情况下如何认证的先有鸡还是先有蛋的问题。

最后,还应该确保数据库定义包含了需要的索引定义:

index { | default} [pres,eq,approx,sub,none]

例如,要索引cn,sn,uid和objectclass属性,可以使用下面的索引指令:

index cn,sn,uid

index objectClass pres,eq

注意,并不是所有的索引类型对于多有的属性类型都是可用的。参阅“SLAPD配置文件”部分查看该选项的更详细的信息。配置完毕之后,启动slapd,使用LDAP客户软件连接到LDAP,开始增加条目。比如,要使用ldapadd工具增加一个组织条目和一个组织角色条目,应该创建一个包含如下所示内容的entries.ldif文件:

# Organization for Example Corporation

dn: dc=example,dc=com

objectClass: dcObject

objectClass: organization

dc: example

o: Example Corporation

description: The Example Corporation

# Organizational Role for Directory Manager

dn: cn=Manager,dc=example,dc=com

objectClass: organizationalRole

cn: Manager

description: Directory Manager

然后,使用下面的命令创建条目:

ldapadd -f entries.ldif -x -D "cn=Manager,dc=example,dc=com" -w secret

上面的命令假设按照上面例子中的配置。

7.2、 脱机创建数据库

创建数据库的第二种方法是使用下面描述的slapd数据库工具脱机创建。如果有大量的条目需要创建,该方法是最好的。这些工具读取slapd的配置文件,和一个包含要增加的条目的文本描述的输入文件。对于支持这些工具的数据库类型而言,它们直接创建出数据库文件。(否则,您必须使用上面提到的方法)。首先,您必须在数据库定义的配置文件中设置几个非常重要的配置选项:

suffix

正如在“通用数据库指令”部分所描述的,该选项设置了该数据库保存哪些条目。你应该将该选项设置为您要创建的子树的root DN。例如:

suffix "dc=example,dc=com"

应该确保指定了索引文件应该被创建的目录:

directory

例如:

directory /usr/local/var/openldap-data

最后,还应该确保数据库定义包含了需要的索引定义。这可以通过一个或者几个index指令来实现:

index { | default} [pres,eq,approx,sub,none]

例如,要索引cn,sn,uid和objectclass属性,可以使用下面的索引指令:

index cn,sn,uid

index objectClass pres,eq

这为cn,sn,和uid创建了存在,相等和子串索引,为objectclass属性创建了相等索引。参与配置文件部分获得更多信息。

7.2.1、 slapadd程序

在配置好所有设置之后,您可以运行slapadd程序来创建主要的数据库及其索引。

slapadd -l -f

      [-d ] [-n |-b ]

其参数的含义如下:

-l

说明了包含要增加的条目的文本格式的LDIF输入文件(参阅后面的“LDIF文本条目格式”部分)。

-f

说明了slapd配置文件的格式。该配置文件说明了在何处创建索引,以及创建什么索引等等。

-d

打开调试。如所说明的。调试级别和slapd相同。参阅“运行SLAPD”中的“命令行选项”部分。

-n

一个说明修改那一个数据库的可选参数。第1个列在配置文件中的数据库是1,第2个是2……等等。默认情况下,使用配置文件中的第1个数据库。该选项不能和-b参数一起使用。

-b

一个说明修改那一个数据库的可选参数。指定的后缀和数据库suffix指令相匹配来获得数据库编号。不应该和-n一起使用。

7.2.2、 slapindex程序

有时重新安排索引是必须的(比如修改了slapd.conf(5)之后)。可以通过使用slapindex(8)程序来实现。slapindex运行方法如下:

slapindex -f

     [-d ] [-n |-b ]

其中,-f –d –n和-b选项和slapadd程序中的含义相同。Slapindex根据当前数据库的内容重新创建索引。

7.2.3、 slapcat程序

该程序将数据库转储到一个LDIF文件。当您创建一个您的数据库的可被人工读取的拷贝时,或者当您想脱机编辑您的数据库时,该程序是非常有用的。该程序这样运行:

slapcat -l -f

     [-d ] [-n |-b ]

其中-n和-b参数用来选择由-f参数指定的slapd.conf(5)文件中的配置数据库。相关的LDIF文件输出到标准输出或者输出到使用-l选项指明的文件。

7.3、 LDIF文本条目格式

LDAP数据交换格式,LDIF,被用来使用简单的格式来表示LDAP条目。本部分提供了一个LDIF条目格式的一个简要描述。可以作为ldif(5)和RFC2849的补充。

一个条目的基本格式是:

# comment

dn:

:

:

...

以#开头的行表示注释。一个属性描述可以是一个简单的属性类型,比如cn或者objectClass或者1.2.3(和一个属性类型相关联的OID)或者可以包含选项。比如。Cn;lang_en_us或者userCertificate;binary。

一行的积蓄可以以一个空格或者一个TAB键开始下一行。例如:

dn: cn=Barbara J Jensen,dc=example,dc=

 com

cn: Barbara J

 Jensen

和:

dn: cn=Barbara J Jensen,dc=example,dc=com

cn: Barbara J Jensen

是相同的。

多个属性值可以在不同的行中指定。比如:

cn: Barbara J Jensen

cn: Babs Jensen

如果一个包含不可打印的字符,或者以一个空格,一个冒号(“:”),或者一个小于号(“<”)开始,后面跟着两个冒号,和其值的BASE64编码。例如,值“ begins with a space”应该被如下编码:

cn:: IGJlZ2lucyB3aXRoIGEgc3BhY2U=

也可以指定一个包含属性值的URL。比如,下面说明了jpegPhoto属性值应该从文件file:///path/to/file.jpeg得到:

cn:< file:///path/to/file.jpeg

一个LDIF文件中的多个条目以空行分隔。下面是一个包含3个条目的LDIF文件的例子:

# Barbara's Entry

dn: cn=Barbara J Jensen,dc=example,dc=com

cn: Barbara J Jensen

cn: Babs Jensen

objectClass: person

sn: Jensen

# Bjorn's Entry

dn: cn=Bjorn J Jensen,dc=example,dc=com

cn: Bjorn J Jensen

cn: Bjorn Jensen

objectClass: person

sn: Jensen

# Base64 encoded JPEG photo

jpegPhoto:: /9j/4AAQSkZJRgABAAAAAQABAAD/2wBDABALD

 A4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQ

 ERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVG

# Jennifer's Entry

dn: cn=Jennifer J Jensen,dc=example,dc=com

cn: Jennifer J Jensen

cn: Jennifer Jensen

objectClass: person

sn: Jensen

# JPEG photo from file

jpegPhoto:< file:///path/to/file.jpeg

注意,Bjorn条目的jpegPhoto属性是BASE64编码的,Jeniffer条目的jpegPhoto属性则是从URL指定的文件中获取的。

注意:多余的空格在LDIF文件中没有从值中删除。多个中间的空格也没有被压缩。如果你不想让它们出现在数值中,不要将它们留在哪儿。

8、 模式说明

本章描述了如何扩展slapd(8)使用的用户模式。第1个部分,“已发布的模式文件”,详细说明了软件发布版本中提供的可选的模式定义,以及从何处获取其他的定义。第2个部分,“扩展模式”,说明了如何定义新的模式项目。

8.1、 已发布的模式文件

OpenLDAP岁软件发布了一组模式定义,您可以直接使用它们。每一组模式定义为可以被包含到您的slapd.conf(5)中的文件。(可以使用include指令)这些模式文件在正常情况下安装在/usr/local/etc/openldap/schema目录下。

Table 8.1: Provided Schema Specifications

File

Description

core.schema

OpenLDAP core (required)

cosine.schema

Cosine and Internet X.500 (useful)

inetorgperson.schema

InetOrgPerson (useful)

misc.schema

Assorted (experimental)

nis.schema

Network Information Services (FYI)

openldap.schema

OpenLDAP Project (experimental)

要使用其中的任何模式文件,只需要在您的slapd.conf(5)文件中的全局定义部分包含需要的文件。比如:

# include schema

include /usr/local/etc/openldap/schema/core.schema

include /usr/local/etc/openldap/schema/cosine.schema

include /usr/local/etc/openldap/schema/inetorgperson.schema

其他的文件也可以获得。请参考OpenLDAP FAQ(http://www.openldap.org/faq/)。

8.2、 扩展模式

slapd(8)中使用的模式可以被扩展为支持其他的语法,匹配规则,属性类型和对象类。本章详细说明了如何使用slapd已经支持的语法和匹配规则来增加用户应用属性类型和对象属性类型。slapd也可以被扩展为支持其他的语法,匹配规则和系统模式,但是,这需要某种程度的编程,因此,在此处不予讨论。

下面是定义一个新的模式的5个步骤:

¢     获得对象标识;

¢     选择一个名称前缀;

¢     创建本地模式文件;

¢     定义自定义属性类型;(如果必须)

¢     定义自定义对象类。

8.2.1、 对象标识

每一个模式元素由一个全局唯一对象标识符(OID)标识。OID同时被用来标识其他的对象。他们通常可以在ASN.1描述的协议中找到。特别是,它们在简单网络管理协议(SNMP)中被广泛使用。因为OID是层次的,您的组织可以获得一个OID,并且在需要的时候对其进行分支扩展。比如,如果您的组织被赋予一个OID1.1,您可以按照如下所示的方法扩展树:

Table 8.2: Example OID hierarchy

OID

Assignment

1.1

Organization's OID

1.1.1

SNMP Elements

1.1.2

LDAP Elements

1.1.2.1

AttributeTypes

1.1.2.1.1

myAttribute

1.1.2.2

ObjectClasses

1.1.2.2.1

myObjectClass

您当然可以在您的组织的OID下面自由的根据组织的需要设计您的层次结构。无论您选择了怎样的层次,您应该保持一份分配注册表。这可以是一个简单的平面文件或者是一个更加复杂的东西,比如,OpenLDAP OID Registry(http://www.openldap.org/faq/index.cgi?file=197)。

有关对象标识符(和一个服务列表)的更多信息,请参阅:

http://www.alvestrand.no/harald/objectid/。

任何情况下,您都不应该使用一个伪造的OID!

为了免费得到一个注册过的OID,在Internet Assigned Numbers Authority维护的Private Enterprise arch下申请一个OID。任何私人企业或者组织可以申请一个在此arch下的OID。只需要填写一个位于http://www.iana.org/cgi-bin/enterprise.pl的IANA表单就可以了。您的合法OID将在几天内发送给您。您的基ID将是类似于1.3.6.1.4.1.X,其中X是一个整数。

注意:不要让IANA页面上的“MIB/SNMP”声明混淆您的视线。从这个表单中申请的OID可以用于任何用途,包括标识LDAP模式元素。

8.2.2、 名称前缀

除了给每一个模式元素分配一个唯一的对象标识符,您应该给每一个模式元素提供一个文本名称。该名称应该是既有描述性,又不会和其他的模式名称冲突。特别的,任何您选择的名称都不应该和已经有的或者是将要使用的标准名称冲突。

为了减少(但不是消除)潜在的名称冲突,一个简便的方法是在非标准名称前增加几个字母的前缀,来将组织的改变本地化。组织名称越短,就应该提供越长的前缀。

在下面的示例中,我们选择了一个很短的前缀“my”来减少空间。在一个大型的,全球性的组织中,使用这样短的前缀是不合适的。对于一个小的,本地的公司,我们推荐象“deFirm”(德国公司)或者“comExample”(和example.com关联的组织的元素)。

8.2.3、 本地模式文件

配置文件指令中的objectClass和attibuteTypes可以被用来定义目录中的模式规则。习惯上创建一个文件来包含对于定制的模式元素的定义。我们推荐您在目录/usr/local/etc/openldap/schema/local.schema中创建一个local.schema文件,然后,在您的slapd.conf(5)文件中的其他模式包含指令之后包含该文件。

# include schema

include /usr/local/etc/openldap/schema/core.schema

include /usr/local/etc/openldap/schema/cosine.schema

include /usr/local/etc/openldap/schema/inetorgperson.schema

# include local schema

include /usr/local/etc/openldap/schema/local.schema

8.2.4、 属性类型说明

指令attributetype被用来定义一个新的属性类型。该指令和在子模式子树中的attributeTypes属性使用相同的属性类型描述(如RFC2252所定义)。比如:

attributetype <RFC2252 Attribute Type Description>

其中,Attribute Type Description按照如下BNF定义:

AttributeTypeDescription = "(" whsp

      numericoid whsp              ; AttributeType identifier

    [ "NAME" qdescrs ]             ; name used in AttributeType

    [ "DESC" qdstring ]            ; description

    [ "OBSOLETE" whsp ]

    [ "SUP" woid ]                 ; derived from this other

                                   ; AttributeType

    [ "EQUALITY" woid              ; Matching Rule name

    [ "ORDERING" woid              ; Matching Rule name

    [ "SUBSTR" woid ]              ; Matching Rule name

    [ "SYNTAX" whsp noidlen whsp ] ; Syntax OID

    [ "SINGLE-VALUE" whsp ]        ; default multi-valued

    [ "COLLECTIVE" whsp ]          ; default not collective

    [ "NO-USER-MODIFICATION" whsp ]; default user modifiable

    [ "USAGE" whsp AttributeUsage ]; default userApplications

    whsp ")"

AttributeUsage =

    "userApplications"     /

    "directoryOperation"   /

    "distributedOperation" / ; DSA-shared

    "dSAOperation"       ; DSA-specific, value depends on server

其中,whsp是一个空格,numericoid是一个全局唯一的点分十进制格式的OID(例如:1.1.0),qdescrs是一个或者多个名称,woid或者是OID的名称,或者是OID后面加上可选的长度说明(比如:{10})。

例如,属性类型name和cn在core.schema中如下定义:

attributeType ( 2.5.4.41 NAME 'name'

      DESC 'name(s) associated with the object'

      EQUALITY caseIgnoreMatch

      SUBSTR caseIgnoreSubstringsMatch

      SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )

attributeType ( 2.5.4.3 NAME ( 'cn' $ 'commonName' )

      DESC 'common name(s) assciated with the object'

      SUP name )

请注意,每一个都定义了属性的OID,给出了一个短的名称,以及一个简短的描述。每一个名称都是OID的一个别名。Slapd(8)在返回结果的时候,将返回第1个列出的名称。

第1个名称,name,保存了directoryString(UTF-8编码的Unicode)语法。该语法由OID说明。(1.3.6.1.4.1.1466.115.121.1.15标识了目录字符串语法)。还说明了一个推荐长度为32768的选项。服务器应该支持该长度的值,但是,也可以支持更长的值。该域没有指明长度限制,因此,在服务器上被忽略,并且服务器不会限制其大小。另外,相等和子串匹配使用不区分大小写的规则。下面是经常使用的语法和匹配规则(OpenLDAP支持这些,以及更多)

Table 8.3: Commonly Used Syntaxes

Name

OID

Description

boolean

1.3.6.1.4.1.1466.115.121.1.7

boolean value

distinguishedName

1.3.6.1.4.1.1466.115.121.1.12

DN

directoryString

1.3.6.1.4.1.1466.115.121.1.15

UTF-8 string

IA5String

1.3.6.1.4.1.1466.115.121.1.26

ASCII string

Integer

1.3.6.1.4.1.1466.115.121.1.27

integer

Name and Optional UID

1.3.6.1.4.1.1466.115.121.1.34

DN plus UID

Numeric String

1.3.6.1.4.1.1466.115.121.1.36

numeric string

OID

1.3.6.1.4.1.1466.115.121.1.38

object identifier

Octet String

1.3.6.1.4.1.1466.115.121.1.40

arbitary octets

Printable String

1.3.6.1.4.1.1466.115.121.1.44

printable string

Table 8.4: Commonly Used Matching Rules

Name

Type

Description

booleanMatch

equality

boolean

octetStringMatch

equality

octet string

objectIdentiferMatch

equality

OID

distinguishedNameMatch

equality

DN

uniqueMemberMatch

equality

Name with optional UID

numericStringMatch

equality

numerical

numericStringOrderingMatch

ordering

numerical

numericStringSubstringsMatch

substrings

numerical

caseIgnoreMatch

equality

case insensitive, space insensitive

caseIgnoreOrderingMatch

ordering

case insensitive, space insensitive

caseIgnoreSubstringsMatch

substrings

case insensitive, space insensitive

caseExactMatch

equality

case sensitive, space insensitive

caseExactOrderingMatch

ordering

case sensitive, space insensitive

caseExactSubstringsMatch

substrings

case sensitive, space insensitive

caseIgnoreIA5Match

equality

case insensitive, space insensitive

caseIgnoreIA5OrderingMatch

ordering

case insensitive, space insensitive

caseIgnoreIA5SubstringsMatch

substrings

case insensitive, space insensitive

caseExactIA5Match

equality

case sensitive, space insensitive

caseExactIA5OrderingMatch

ordering

case sensitive, space insensitive

caseExactIA5SubstringsMatch

substrings

case sensitive, space insensitive

第2个属性,cn,是name的一个子类型,因此,它继承了语法,匹配规则,并且使用name.commonName作为别名。

两个属性都没有限制到单一值。都可以被用户应用程序所使用,都不存在过期,都不是集合。

下面的部分给出了几个示例。

8.2.4.1、 myUniqueName

许多组织为每个用户维护了一个单一的唯一名称。虽然可以使用displayName(RFC2798),该属性实际上意味着让用户控制,而不是被组织控制。我们可以简单的从inetorgperson.schema中拷贝displayName的定义,然后替换掉OID,name,以及description。比如:

attributetype ( 1.1.2.1.1 NAME 'myUniqueName'

        DESC 'unique name with my organization'

        EQUALITY caseIgnoreMatch

        SUBSTR caseIgnoreSubstringsMatch

        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15

        SINGLE-VALUE )

但是,如果我们需要该名字被包含在name声明中[比如,(name=*Jane*)],该属性可以被定义为name的一个子类型。比如:

attributetype ( 1.1.2.1.1 NAME 'myUniqueName'

        DESC 'unique name with my organization'

        SUP name )

8.2.4.2、 myPhoto

许多组织包含了每一个用户的照片。可以定义一个myPhoto属性类型来保存照片。当然,可以使用jpegPhoto(RFC2798)或者其子类型来保存照片。但是,只有在照片是JPEG格式的情况下才能这样做。作为一种替代方法,可以定义一个使用Octet String语法的属性类型。比如:

attributetype ( 1.1.2.1.2 NAME 'myPhoto'

        DESC 'a photo (application defined format)'

        SYNTAX 1.3.6.1.4.1.1466.115.121.1.40

        SINGLE-VALUE )

这样,该语法没有指明照片的格式。它假设(可能不正确)所有访问该属性的应用统一处理该值。

如果需要支持多种图片格式,应该为每一种格式定义一个另外的属性类型,为照片提供类型信息,或者使用ASN.1描述值,并且使用;binary传输选项。

另外一个选择是让属性保存一个指向图片的URI。可以在labeledURI(RFC2079)之后定义该属性,或者只是简单的创建一个子类型。比如:

attributetype ( 1.1.2.1.3 NAME 'myPhotoURI'

        DESC 'URI and optional label referring to a photo'

        SUP labeledURI )

8.2.5、 对象类说明

objectclasses指令用来定义一个新的对象类。该指令和在子模式子树中的objectClasses属性使用相同的属性类型描述(如RFC2252所定义)。比如:

objectclass <RFC2252 Object Class Description>

其中,Object Class Description按照如下所示的BNF定义:

ObjectClassDescription = "(" whsp

        numericoid whsp      ; ObjectClass identifier

        [ "NAME" qdescrs ]

        [ "DESC" qdstring ]

        [ "OBSOLETE" whsp ]

        [ "SUP" oids ]       ; Superior ObjectClasses

        [ ( "ABSTRACT" / "STRUCTURAL" / "AUXILIARY" ) whsp ]

                ; default structural

        [ "MUST" oids ]      ; AttributeTypes

        [ "MAY" oids ]       ; AttributeTypes

        whsp ")"

其中,whsp是一个空格,numericoid是一个全局唯一的点分十进制格式的OID(例如:1.1.0),qdescrs是一个或者多个名称,oids是一个或者多个OID的名称。

8.2.5.1、 myPhotoObject

下面定义一个允许将myPhoto增加到任何已经存在的条目中的auxiliary对象类:

objectclass ( 1.1.2.2.1 NAME 'myPhotoObject'

        DESC 'mixin myPhoto'

        AUXILIARY

        MAY myPhoto )

8.2.5.2、 myPerson

如果您的组织需要一个私有的结构化对象类来表示用户,你可以子类化任何一个已经存在的person类,比如inetOrgPerson(RFC2798),然后增加需要的属性:

objectclass ( 1.1.2.2.2 NAME 'myPerson'

        DESC 'my person'

        SUP inetOrgPerson

        MUST ( 'myUniqueName' $ 'givenName' )

        MAY 'myPhoto' )

该对象类从inetOrgPerson中继承允许的或者必须的属性,但是,要求myUniqueName和givenName,允许myPhoto。

8.2.6、 OID

为了简化OID的管理和使用,slapd(8)支持对象描述宏。objectIdentifier用来将一个宏名连接到一个OID。OID可以是从一个先前已经定义的OID宏中派生的。slapd.conf(5)的语法是:

objectIdentifier { | [:] }

下面显示了定义一组OID宏,并且在定义模式元素中使用它们:

objectIdentifier myOID  1.1

objectIdentifier mySNMP myOrgOID:1

objectIdentifier myLDAP myOrgOID:2

objectIdentifier myAttributeType        myOrgLDAP:1

objectIdentifier myObjectClass  myOrgLDAP:2

attributetype ( myAttributeType:3 NAME 'myPhotoURI'

        DESC 'URI and optional label referring to a photo'

        SUP labeledURI )

objectclass ( myObjectClass:1 NAME 'myPhotoObject'

        DESC 'mixin myPhoto'

        AUXILIARY

        MAY myPhoto )

排行榜 更多 +
风雷

风雷

角色扮演 下载
蜘蛛战士模拟

蜘蛛战士模拟

动作格斗 下载
仙栎日语

仙栎日语

学习教育 下载