`
zl198751
  • 浏览: 273148 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

OpenLDAP配置以及ldap结构设计

    博客分类:
  • LDAP
阅读更多

openldap 相关书籍:

 

OpenLDAP2.4管理员指南
http://www.imxmpp.com/xmppfy/index_58E811B3.php#.E7.BC.96.E8.AF.91.E5.92.8C.E5.AE.89.E8.A3.85OpenLDAP.E8.BD.AF.E4.BB.B6

 

OpenLDAP安装

http://qingfeng825.iteye.com/blog/735471

 

OpenLDAP2.1 管理员指南(附件中)

OpenLDAP2Admin.zip

 


openldap client(JXplorer
):
http://blog.csdn.net/zhangjunfangkaixin/archive/2009/03/10/3976675.aspx

 

文章包括:

1。openLDAP数据库配置

2。openLDAP数据库实例

 


 

OpenLDAP

 

objectClass有着严格的等级之分,最顶层的类是top和alias。例 如,organizationalPerson这个objectClass隶属于Person,而Person又是top的子类。

    objectClass大致分为三类:结构型的(如:person和organizationUnit)、辅助型的 (如:extensibeObject)和抽象型的(这类不能直接使用

 

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

本节将告诉你如何从草稿创建slapd数据库,以及如何在遇到问题的时候解决问题。有两种方式创建数据库。首先,你可以使用LDAP在线创建数据库。如果 使用的是这种方式,你只需要简单的启动slapd并且用你的客户端添加条目就行了。这种方式对相对比较小的数据库是很合适的(根据你的需要,可能是几百或 者几千条)。这种方式仅仅工作在支持更新操作的数据库之下。

第二种创建数据库的方式是用slapd自带的特殊工具脱机创建。这种方式最适合于当你有好几千个条目要创建的情况,--如果你用前一种方式来创建所需要的 时间无法接受,或者是因为你想确保数据库在创建的时候不能被访问。注意不是所有的数据库都支持这种方式。

7.1 在LDAP上创建数据库

使用这种方式,你可以通过你喜欢的客户端(比如,ldapadd)来添加条目,这和你在数据库创建好之后添加条目的操作是一样的。你应当在启动slapd 之前确保下列选项已经在配置文件中做了设置。

        suffix <dn>;

如“通用数据库指令”一节中所述,这个选项定义了由这个数据库保存的条目。你应该把这个选项设置为你准备创建的目录子树的根DN。比如:

        suffix "dc=example,dc=com"

你应当确保指定了一个索引文件所在的目录。

        directory <directory>;

比如:

        directory /usr/local/var/openldap-data

你需要拥有足够的权限创建该目录以使slapd可以写入它。

你需要配置slapd以便你能够以一个有权限添加条目的目录用户连接到这个服务器上面。你可以把目录配置成支持超级用户或者根用户的形式。这是通过数据库 定义中的下面两个选项来实现的:

        rootdn <dn>;
        rootpw <passwd>;

比如:

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

这两个选项指定了一个DN和口令来验证超级用户条目(也就是说,这个条目可以做任何事)。无论条目和口令是否在数据库中实际存在,这里指定的条目和口令都 会起作用。这解决了“鸡和蛋的问题”--也就是如果条目还不存在的话如何验证有权添加条目的根用户条目。

最后,你要确保数据库定义当中包含了你想要的索引定义:

        index {<attrlist>; | default} [pres,eq,approx,sub,none]

比如,要为cn, sn, uid 和 objectclass属性建立索引,应当使用下面的index指令:

        index cn,sn,uid pres,eq,approx,sub
        index objectClass eq

这将为cn, sn, 和 uid属性创建presence, equality, approximate, 和 substring索引,为objectClass属性创建equality索引。注意到不是对任何属性类型都有全部的索引类型可用。参看“slapd配 置文件”一节可获得有关该选项的更多信息。

一旦你已经按照你的要求完成了配置,就启动slapd,同时用你的LDAP客户端连接到服务器上,开始添加条目。比如,要用ldapadd工具添加一个组 织的条目和其内一个成员的条目,你可以创建一个名为entries.ldif的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 <dn>;

如“通用数据库指令”一节中所述,这个选项定义了由这个数据库保存的条目。你应该把这个选项设置为你准备创建的目录子树的根DN。比如:

        suffix "dc=example,dc=com"

你应当确保指定了一个索引文件所在的目录。

        directory <directory>;

比如:

        directory /usr/local/var/openldap-data

最后,你要确保数据库定义当中包含了你想要的索引定义:

        index {<attrlist>; | default} [pres,eq,approx,sub,none]

比如,要为cn, sn, uid 和 objectclass属性建立索引,应当使用下面的index指令:

        index cn,sn,uid pres,eq,approx,sub
        index objectClass eq

这将为cn, sn, 和 uid属性创建presence, equality, approximate, 和 substring索引,为objectClass属性创建equality索引。注意到不是对任何属性类型都有全部的索引类型可用。参看“slapd配 置文件”一节可获得有关该选项的更多信息。

7.2.1. slapadd程序

一旦你已经按照你的要求完成了配置,你就应当运行slapadd程序创建主(primary)数据库和相应的索引:

        slapadd -l <inputfile>; -f <slapdconfigfile>;
                [-d <debuglevel>;] [-n <integer>;|-b <suffix>;]

各项参数的意义如下:

        -l <inputfile>;

指定了LDIF输入文件,这个文件包含了要以文本格式添加到数据库中的条目(在”LDIF文本条目格式“一节有详细描述)。

        -f <slapdconfigfile>;

指定了slapd的配置文件,该配置文件指明了在什么地方创建什么样的索引,等等。

        -d <debuglevel>;

打开调试开关,调试级别由<debuglevel>;指定。调试级别和slapd的调试级别是一样的。详情请参看“运行slapd”章节的 “命令行选项”小节。

        -n <databasenumber>;

一个可选的参数,用来指定修改哪一个数据库。在配置文件中最先出现的数据库编号为1,第二个为2,以此类推。默认情况下,会使用配置文件中的第一个数据 库。注意该选项不应该和-b选项同时使用。

        -b <suffix>;

一个可选的参数,用来指定修改哪一个数据库。通过把所给的后缀和数据库定义中的suffix指令匹配来决定数据库的序号。注意该选项不应该和-n选项同时 使用。

7.2.2. slapindex程序

有时候可能需要重新生成索引(比如在修改了slapd.conf之后)。这可以通过slapindex程序来完成。slapindex是这样用的:

        slapindex -f <slapdconfigfile>;
                [-d <debuglevel>;] [-n <databasenumber>;|-b <suffix>;]

这里的-f, -d, -n 和 -b选项和slapadd程序当中的是一样的。slapindex在当前数据库内容的基础上重建所有索引。

7.2.3. slapcat程序

slapcat程序是用来将数据库转储(dump)到LDIF文件中。当你想把数据库以直观可读的方式进行备份或者你想脱机编辑数据库的时候,这都会是很 有用的。这个是程序是像下面这样用的:

        slapcat -l <filename>; -f <slapdconfigfile>;
                [-d <debuglevel>;] [-n <databasenumber>;|-b <suffix>;]

这里的-n 或者 -b是用来选取slapd.conf中定义的数据库的。对应的LDIF输出到标准输出上或者输出到-l选项指定的文件中。

7.3 LDIF文本的条目格式

LDAP数据交换格式(LDIF)是用来简单的文本格式来表示LDAP条目的。本节将给出LDIF条目格式的一个简短描述,LDIF格式的详细情况在 ldif手册和RFC2849技术手册中有更详尽的补充说明。

条目的基本格式是这样的:

        # comment
        dn: <distinguished name>;
        <attrdesc>;: <attrvalue>;
        <attrdesc>;: <attrvalue>;

        ...

以'#'开头的行是注释。属性类型可以是像cn 或者 objectClass 或者 1.2.3(与属性类型相对应的OID)或者可以包含像cn;lang_en_US 或者 userCertificate;binary这样的选项。

一个以单个空格或者制表符开头的新行是接着上一行的。比如:

        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

如果属性值<attrvalue>;包含不可打印字符或者以空格,冒号(':'),,小于号('<')开头的话,那么属性描 述<attrdesc>;后跟的将是两个冒号与所给值的base64编码。比如,值" begins with a space"将会被编码成下面这样:

        cn:: IGJlZ2lucyB3aXRoIGEgc3BhY2U=

你也可以指定一个包含属性值的URL。比如,下面的示例指定jpegPhoto应该来源于/path/to/file.jpeg。

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

相同的LDIF文件中的多个条目是用空行分隔开的。这里有一个包含三个条目的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是base 64编码而Jennifer条目中的jpegPhoto是从URL指定的位置获取的。

-----------------------------------------------------------------------------------------------------------
注意:在LDIF文件中行末的空格是没有被截去的。行间的多个空格也不被压缩。如果你本意不是想让她们出现在那儿,那就不要把它们放进去。

 

简单LDAP设计实例:

dn: dc=ies,dc=com
objectClass: dcObject
objectClass: organization
dc: ies
o: ies

dn: ou=Users,dc=ies,dc=com
objectClass: organizationalUnit
objectClass: top
ou: Users

dn: cn=tina,ou=Users,dc=ies,dc=com
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: tina
description: Test Role
description: Test View
ou: Tina
sn: Wei
st: tinawei@ies.com
street: Tina Wei
userPassword:: e01ENX1YMDNNTzFxblpkWWRneWZldUlMUG1RPT0=


dn: ou=Roles,dc=ies,dc=com
objectClass: organizationalUnit
objectClass: top
ou: Roles

dn: cn=Test Role,ou=Roles,dc=ies,dc=com
objectClass: organizationalRole
objectClass: top
cn: Test Role
ou: ROLE1

dn: ou=Views,dc=ies,dc=com
objectClass: organizationalUnit
objectClass: top
ou: Views

dn: cn=Test View,ou=Views,dc=ies,dc=com
objectClass: organizationalRole
objectClass: top
cn: Test View
ou: TEST

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics