LDAP 简介

LDAP(Lightweight Directory Access Protocol)是轻量级目录访问协议,实现提供被称为目录服务的信息服务。目录服务是一种特殊的数据库系统,其专门针对读取、浏览和搜索操作进行了特定的优化。

LDAP 目录中的信息是按照树型结构组织,具体信息存储在条目(entry)的数据结构中。条目相当于关系数据库中表的记录;条目是具有区别名 DN (Distinguished Name)的属性(Attribute),DN 是用来引用条目的,DN 相当于关系数据库表中的关键字(Primary Key)。属性由类型(Type)和一个或多个值(Values)组成,相当于关系数据库中的字段(Field)由字段名和数据类型组成,只是为了方便检索的需要,LDAP 中的 Type 可以有多个 Value,而不是关系数据库中为降低数据的冗余性要求实现的各个域必须是不相关的。LDAP 中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。LDAP 把数据存放在文件中,为提高效率可以使用基于索引的文件数据库,而不是关系数据库。类型的一个例子就是 mail,其值将是一个电子邮件地址。

LDAP 简称对应

  • o– organization(组织-公司)
  • ou – organization unit(组织单元-部门)
  • c - countryName(国家)
  • dc - domainComponent(域名)
  • sn – suer name(真实名称)
  • cn - common name(常用名称)

目录设计

设计目录结构是 LDAP 最重要的方面之一。下面我们将通过一个简单的例子来说明如何设计合理的目录结构。该例子将通过 Netscape 地址薄来访问。假设有一个位于美国 US(c=US)而且跨越多个州的名为 Acme(o=Acme)的公司。Acme 希望为所有的雇员实现一个小型的地址薄服务器。

下面举个简单的例子,我们从一个简单的组织 DN 开始:

dn: o=Acme, c=US

Acme 所有的组织分类和属性将存储在该 DN 之下,这个 DN 存储在该服务器的目录是唯一的。Acme 希望将其雇员的信息分为两类:管理者(ou= Managers)和普通雇员(ou=Employees),这种分类产生的相对区别名(RDN(relative distinguished names)表示相对于顶点 DN)就是:

dn: ou=Managers, o=Acme, c=US

dn: ou=Employees, o=Acme, c=US

在下面我们将会看到分层结构的组成:顶点是 US 的 Acme,下面是管理者组织单元和雇员组织单元。因此包括 Managers 和 Employees 的 DN 组成为:

dn: cn=Jason H. Smith, ou=Managers, o=Acme, c=US

dn: cn=Ray D. Jones, ou=Employees, o=Acme, c=US

dn: cn=Eric S. Woods, ou=Employees, o=Acme, c=US

为了引用 Jason H. Smith 的通用名(common name )条目,LDAP 将采用 cn=Jason H. Smith 的 RDN。然后将前面的父条目结合在一起就形成如下的树型结构:

    cn=Jason H. Smith

        + ou=Managers

            + o=Acme

                + c=US

                    -> dn: cn=Jason H. Smith,ou=Managers,o=Acme,c=US

现在已经定义好了目录结构,下一步就需要导入目录信息数据。目录信息数据将被存放在 LDIF 文件中,其是导入目录信息数据的默认存放文件。用户可以方便的编写 Perl 脚本来从例如/etc/passwd、NIS 等系统文件中自动创建 LDIF 文件。

LDIF 是一种普遍使用的文件格式,用来描述目录信息或可对目录执行的修改操作。LDIF 完全独立于在所有特定目录中使用的储存格式,LDIF 通常用于从 LDAP 服务器导出目录信息或将数据导入 LDAP 服务器。

LDIF 一般很容易生成。因此,可以借助于一些工具(如 awk 或 perl)将专有格式的数据移入 LDAP 目录。也可以编写脚本来生成 LDIF 格式的测试数据。

配置 OpenLDAP

创建 LDIF 文件

在配置 OpenLDAP 之前,需要创建一个 LDIF 文件,下面以创建 openldapfortest.ldif 文件为例,内容如下:

dn: ou=People,dc=maxcrc,dc=com

objectClass: top

objectClass: organizationalUnit

ou: People

description: Container for user entries

structuralObjectClass: organizationalUnit

entryUUID: fea960bd-a082-457c-bbdc-f92d83f3c3d8

creatorsName: cn=manager,dc=maxcrc,dc=com

createTimestamp: 20140801020034Z

entryCSN: 20140801020034.844507Z#000000#000#000000

modifiersName: cn=manager,dc=maxcrc,dc=com

modifyTimestamp: 20140801020034Z

dn: ou=groups,dc=maxcrc,dc=com

objectClass: top

objectClass: organizationalUnit

ou: groups

structuralObjectClass: organizationalUnit

entryUUID: 10fbce96-7085-4f00-be47-a99c9d85e72f

creatorsName: cn=Manager,dc=maxcrc,dc=com

createTimestamp: 20140804023216Z

entryCSN: 20140804023216.519824Z#000000#000#000000

modifiersName: cn=Manager,dc=maxcrc,dc=com

modifyTimestamp: 20140804023216Z

 

dn: uid=bob,ou=People,dc=maxcrc,dc=com

objectClass: posixAccount

objectClass: top

objectClass: inetOrgPerson

gidNumber: 0

sn: test

uid: bob

uidNumber: 49223

homeDirectory: test

structuralObjectClass: inetOrgPerson

entryUUID: fd3a66e0-635a-414a-b2e8-70874c1c81dd

creatorsName: cn=Manager,dc=maxcrc,dc=com

createTimestamp: 20140804033305Z

cn: bob2

givenName: bob2

userPassword:: e1NIQX01ZW42RzZNZXpScm9UM1hLcWtkUE9tWS9CZlE9

entryCSN: 20140923021306.643518Z#000000#000#000000

modifiersName: cn=Manager,dc=maxcrc,dc=com

modifyTimestamp: 20140923021306Z

 

dn: uid=alice,ou=People,dc=maxcrc,dc=com

objectClass: posixAccount

objectClass: top

objectClass: inetOrgPerson

gidNumber: 0

givenName: alice

sn: test

displayName: alice

uid: alice

homeDirectory: test

cn: alice

uidNumber: 4193

structuralObjectClass: inetOrgPerson

entryUUID: c8122bdc-2db6-49c7-811a-04e2fa343fd3

creatorsName: cn=Manager,dc=maxcrc,dc=com

createTimestamp: 20140804033308Z

userPassword:: MTIzNDU2

entryCSN: 20140918064051.754045Z#000000#000#000000

modifiersName: cn=Manager,dc=maxcrc,dc=com

modifyTimestamp: 20140918064051Z

 

dn: uid=bill,ou=People,dc=maxcrc,dc=com

objectClass: posixAccount

objectClass: top

objectClass: inetOrgPerson

gidNumber: 0

givenName: bill

sn: test

uid: bill

homeDirectory: test

cn: bill

uidNumber: 4542

structuralObjectClass: inetOrgPerson

entryUUID: 29c3c904-0ccb-493b-b841-fe1452fac891

creatorsName: cn=Manager,dc=maxcrc,dc=com

createTimestamp: 20140804033312Z

userPassword:: MTIzNDU2

entryCSN: 20140804055604.649500Z#000000#000#000000

modifiersName: cn=Manager,dc=maxcrc,dc=com

modifyTimestamp: 20140804055604Z

 

dn: cn=ldapadmin,ou=groups,dc=maxcrc,dc=com

objectClass: posixGroup

objectClass: top

cn: ldapadmin

memberUid: bill

gidNumber: 19399

structuralObjectClass: posixGroup

entryUUID: d3a990b1-5227-44b5-9c9d-7328a821b56a

creatorsName: cn=Manager,dc=maxcrc,dc=com

createTimestamp: 20140918062008Z

entryCSN: 20141016061223.535652Z#000000#000#000000

modifiersName: cn=Manager,dc=maxcrc,dc=com

modifyTimestamp: 20141016061223Z

 

dn: cn=ldapuser,ou=groups,dc=maxcrc,dc=com

objectClass: posixGroup

objectClass: top

cn: ldapuser

memberUid: alice

gidNumber: 31590

structuralObjectClass: posixGroup

entryUUID: d63843a6-6e87-4fdf-830d-d7fc93286a83

creatorsName: cn=Manager,dc=maxcrc,dc=com

createTimestamp: 20140918062028Z

entryCSN: 20141016061238.615730Z#000000#000#000000

modifiersName: cn=Manager,dc=maxcrc,dc=com

modifyTimestamp: 20141016061238Z

 

dn: cn=ldappublisher,ou=groups,dc=maxcrc,dc=com

objectClass: posixGroup

objectClass: top

cn: ldappublisher

memberUid: bob

gidNumber: 51276

structuralObjectClass: posixGroup

entryUUID: a4305015-9098-4957-a703-a1aeebbcd77e

creatorsName: cn=Manager,dc=maxcrc,dc=com

createTimestamp: 20140918062410Z

entryCSN: 20141016061140.167443Z#000000#000#000000

modifiersName: cn=Manager,dc=maxcrc,dc=com

modifyTimestamp: 20141016061140Z

安装 OpenLDAP for windows

步骤1:双击 OpenLDAPforWindows.exe,出现如下安装界面:

步骤2:点击“Yes”按钮后,如下图所示:

步骤3:点击“Next”按钮后,如下图所示:

步骤4:勾选“I accept ……”,点击“Next”按钮后,如下图所示:

步骤5:点击“Install”按钮后,如下图所示:

步骤6:选择 OpenLDAP 的安装目录,点击“Next”按钮后,如下图所示:

步骤7:继续点击“Next”按钮后,如下图所示:

步骤8:点击“Next”,选择后端数据从“LDIF”中获取,也可以选择其他的文件类型,如下图所示:

步骤9:点击“Next”,默认初始密码为“secret”,如下图所示:

步骤10:继续点击“Next”,如下图所示:

步骤11:点击“Install”,如下图所示:

步骤12:安装完成,点击“Close”,如下图所示:

配置 LDAP 的目录数据

本示例中提供使用 LdapAdmin.exe 编辑器的方式,连接 LDAP 服务器,可视化地配置 LDAP 的目录数据。

打开安装包中的 LdapAdmin.exe 编辑器,如下图所示:

点击菜单栏中的“Start”按钮,选择“Connections”,弹出 Connections 对话框,双击“New connection”,按下图所示进行配置:

其中:

  • "Connection name":LDAP 服务器所在的计算机名和根条目位置
  • "Host":LDAP 服务器所在的计算机名,"Port"为端口号,默认使用 TLS 协议连接 LADP 服务器,端口号为389,如果您在下面勾选 SSL 连接协议,那端口号会自动匹配为636
  • "Base":根条目位置
  • "Account":连接 LDAP 服务器的账户,默认勾选的是”Anonymous connection“匿名连接,您可以勾选掉选框中的√,输入账号和密码进行连接,“Username”为在刚刚创建的 openldapfortest.Ldif 文件中的“creatorsName“,值为:cn=Manager,dc=maxcrc,dc=com,初始密码为:secret。

配置完成后,点击"Test connection"按钮,测试连接 LDAP 服务器是否成功,如下图所示:

点击"Yes",开始测试,显示如下图所示结果表示连接 LDAP 服务器成功:

双击运行安装目录(c:/OpenLDAP/run)下的 run.cmd 文件,即启动 LDAP 服务,显示如下图所示表示成功启动服务:

把刚刚创建好的 openldapfortest.Ldif 文件复制到安装目录(C:\OpenLDAP 目录)下,然后打开命令窗口,在命令行中输入 slapadd -v -l C:\OpenLDAP\openldapfortest.ldif 命令,把文件的目录数据导入到 LDAP 服务器中,如果导入数据时报错,提示组织单元 People 已经存在,那么可以进入安装目录(C:\OpenLDAP 目录)的子目录如:C:\OpenLDAP\ldifdata\dc=maxcrc,dc=com 目录下删除掉 ou=people 文件夹和 ou=people.ldif 文件,然后再次输入以上命令导入数据,如下图所示:

接下来,在 LdapAdmin 编辑器中可以查看已经导入到 LDAP 服务器中的目录数据,如下图所示:

图中显示的是在目录数据的 groups 组织中把 people 组织单元的 user 用户"alice"赋予 groups 组织中的 ldapuser 的角色,单击用户名"alice"可以查看该用户的详细信息。您可以对导入的目录数据进行编辑修改。

配置 iPortal 的 LDAP 登录设置

首先,以管理员身份登录 SuperMap iPortal,然后在首页依次点击“管理”>“安全”>“登录配置”>“LDAP”>“ LDAP 登录配置”选项卡,进入 LDAP 登录配置页面。详细的配置信息可参阅:配置使用 LDAP 目录

其中,关于“角色映射配置”可以通过两种方式进行配置:

第一种,可以在首次配置 LDAP 登录时,在 LDAP 登录配置页面添加角色映射;

第二种:如果您在首次配置 LDAP 登录时,没有添加角色映射,那么 LDAP 中的用户登录到 iPortal 中就只具有普通用户“PORTAL_USER”的角色,如果您想对已经登录到 iPortal 中的用户更改其用户角色,可以参阅:角色的管理,来编辑角色。

配置完成后,您可以直接使用 LDAP 账号直接在 iPortal 登录页面进行登录,也可以继续使用 iPortal 中已注册的账号登录门户。

导入 LDAP 用户

iPortal 支持通过上传带有 LDAP 用户信息的 CSV 文件将指定的 LDAP 用户导入至门户中,导入的用户会被添加至 iPortal 内置账号系统中,无需登录即可作为资源分享的对象。导入用户的操作如下:

  1. 点击“管理”>“安全”>“登录配置”>“LDAP”,选择“导入用户配置”选项卡;
  2. 下载文件模板。iPortal 提供了一个 CSV 文件模板,其中包含表头字段和一个用户示例,您可以基于模板进行用户的添加与编辑,点击“下载模板”即可下载。CSV 文件格式规范说明如下:
字段名 含义 说明

UserName

用户名 必须与 LDAP 用户的用户名保持一致

Type

用户类型 包括 CREATOR(创建者)和 VIEWER(查看者)两种类型
Role 用户角色 需为 iPortal 中已有的角色。支持为一个用户分配多个角色,之间用 "|" 分隔
  1. 上传文件并查看。编辑 CSV 文件并保存后,点击“选择文件”选择要上传的 CSV 文件,再点击“上传文件并查看”,即可查看将要导入的用户信息列表;
  1. 编辑用户信息。对于填写的信息不合规范的用户,iPortal 会加以标识,需要修改后方可继续导入用户。此外,您还可以再次编辑所有用户的信息,或删除其中某个用户;
  2. 导入用户。点击“导入用户”按钮,即可将 LDAP 用户导入至 iPortal中。

注意:未导入用户时,LDAP 系统中的所有用户均可登录门户;导入用户后,未导入的 LDAP 用户将无法登录 iPortal。若您希望追加可登录门户的用户,需继续进行导入用户操作。