📅  最后修改于: 2020-11-28 13:30:47             🧑  作者: Mango
LDAP是轻型目录访问协议。 LDAP是一种全球目录服务,是一种行业标准协议,它基于客户端-服务器模型,并且在TCP / IP堆栈上方的一层上运行。 LDAP提供了一种连接,访问,修改和搜索Internet目录的功能。
LDAP服务器包含以目录树形式组织的信息。客户端要求服务器提供信息或对特定信息执行某些操作。服务器通过提供所需信息(如果有的话)来回答客户端,或者将客户端引向另一台服务器以对所需信息采取措施。然后,客户端从另一台服务器获取所需的信息。
目录的树结构在所有参与的服务器上都保持相同。这是LDAP目录服务的突出功能。因此,无论客户端引用哪个服务器,客户端始终以无错误的方式获取所需的信息。在这里,我们使用LDAP对IBM DB2进行身份验证,以替代操作系统身份验证。
LDAP有两种类型:
让我们看看如何配置透明LDAP。
要开始配置透明LDAP,您需要配置LDAP服务器。
创建一个SLAPD.conf文件,其中包含有关LDAP中用户和组对象的所有信息。安装LDAP服务器时,默认情况下会在计算机上使用基本LDAP目录树对其进行配置。
下表显示了修改后的文件配置。
代码框以黄色突出显示的文本含义如下:
DBA用户ID =“ db2my1”,组=“ db1my1adm”,密码=“ db2my1”管理员用户ID =“ my1adm”,组=“ dbmy1ctl”。
# base dn: example.com
dn: dc=example,dc=com
dc: example
o: example
objectClass: organization
objectClass: dcObject
# pc box db
dn: dc=db697,dc=example,dc=com
dc: db697
o: db697
objectClass: organization
objectClass: dcObject
#
# Group: dbadm
#
dn: cn=dbmy1adm,dc=db697,dc=example,dc=com
cn: dbmy1adm
objectClass: top
objectClass: posixGroup
gidNumber: 400
objectClass: groupOfNames
member: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com
memberUid: db2my1
#
# User: db2
#
dn: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com
cn: db2my1
sn: db2my1
uid: db2my1
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
uidNumber: 400
gidNumber: 400
loginShell: /bin/csh
homeDirectory: /db2/db2my1
#
# Group: dbctl
#
dn: cn=dbmy1ctl,dc=db697,dc=example,dc=com
cn: dbmy1ctl
objectClass: top
objectClass: posixGroup
gidNumber: 404
objectClass: groupOfNames
member: uid=my1adm,cn=dbmy1adm,dc=db697,dc=example,dc=com
memberUid: my1adm
#
# User: adm
#
dn: uid=my1adm,cn=dbmy1ctl,dc=db697,dc=example,dc=com
cn: my1adm
sn: my1adm
uid: my1adm
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
uidNumber: 404
gidNumber: 404
loginShell: /bin/csh
homeDirectory: /home/my1adm
使用名称“ /var/lib/slapd.conf”保存以上文件,然后通过以下命令执行此文件以将这些值添加到LDAP Server中。这是一个linux命令;不是db2命令。
ldapadd r- -D ‘cn=Manager,dc=example,dc=com” –W –f
/var/lib/slapd.conf
在LDAP服务器上注册DB2用户和DB2组之后,登录到您已安装实例和数据库的特定用户。您需要配置LDAP客户端以向服务器确认客户端是远程服务器还是本地服务器。
LDAP客户端配置保存在文件“ ldap.conf”中。有两个文件可用于配置参数,一个是通用文件,另一个是特定文件。您应该在“ /etc/ldap.conf”中找到第一个,而后者在“ /etc/openldap/ldap.conf”中。
通用LDAP客户端配置文件中提供以下数据
# File: /etc/ldap.conf
# The file contains lots of more entries and many of them
# are comments. You show only the interesting values for now
host localhost
base dc=example,dc=com
ldap_version 3
pam_password crypt
pam_filter objectclass=posixAccount
nss_map_attribute uniqueMember member
nss_base_passwd dc=example,dc=com
nss_base_shadow dc=example,dc=com
nss_base_group dc=example,dc=com
您需要根据DB2配置更改服务器和域信息的位置。如果我们在同一系统中使用服务器,则在“主机”和“基本”处将其称为“本地主机”,您可以配置LDAP服务器的“ SLAPD.conf”文件中提到的内容。
可插拔身份验证模型(PAM)是用于身份验证服务的API。这是使用加密密码和posixAccount类型的特殊LDAP对象进行LDAP身份验证的通用接口。此类型的所有LDAP对象都代表具有可移植操作系统接口(POSIX)属性的帐户的抽象。
网络安全服务(NSS)是一组库,用于支持启用安全性的客户端和服务器应用程序的跨平台开发。这包括SSL,TLS,PKCS S / MIME和其他安全标准之类的库。
您需要为此接口指定基本DN和两个其他映射属性。 OpenLDAP客户端配置文件包含以下给定的条目:
host localhost
base dc=example,dc=com
到此为止,您只需定义LDAP服务的主机和基本DN。
配置LDAP服务器和LDAP客户端后,请验证两者是否可以通信。
步骤1 :检查您的本地LDAP服务器正在运行。使用以下命令:
ps -ef | grep -i ldap
此命令应列出代表您的LDAP服务器的LDAP守护进程:
/usr/lib/openldap/slapd -h ldap:/// -u ldap -g ldap -o slp=on
这表明您的LDAP服务器正在运行,正在等待客户端的请求。如果以前的命令没有这样的过程,则可以使用“ rcldap”命令启动LDAP服务器。
rcldap start
服务器启动时,可以通过发出以下命令在文件’/ var / log / messages /中监视它。
tail –f /var/log/messages
ldapsearch命令打开与LDAP服务器的连接,绑定到该服务器并执行搜索查询,该查询可以通过使用特殊参数’-x’来指定,通过使用简单的身份验证机制,通过使用-x参数而不是-a连接到LDAP服务器。更简单的机制,例如简单身份验证和安全层(SASL)
ldapsearch –x
LDAP服务器应使用下面给出的响应进行答复,其中包含您所有的LDAP条目都采用LDAP数据交换格式(LDIF)。
# extended LDIF
#
# LDAPv3
# base <> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
# example.com
dn: dc=example,
dc=com dc: example
o: example
objectClass: organization
objectClass: dcObject
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
使用LDAP服务器和客户端后,您需要配置我们的DB2数据库以用于LDAP。让我们讨论一下,如何安装和配置数据库以将我们的LDAP环境用于DB2用户认证过程。
IBM提供了一个免费软件包,其中包含用于DB2的LDAP插件。 DB2软件包针对以下每个方面包括三个DB2安全性插件:
根据您的要求,您可以使用这三个插件中的任何一个或全部。此插件不支持在LDAP中定义某些用户而在操作系统中定义其他用户的环境。如果决定使用LDAP插件,则需要定义与LDAP服务器中的数据库关联的所有用户。相同的原则适用于组插件。
您必须确定哪些插件是我们系统必需的。在CONNECT或ATTACH语句中提供的用户ID和密码验证在客户端系统上发生的情况下使用的客户端身份验证插件。因此,需要将数据库管理器配置参数SRVCON_AUTH或AUTHENTICATION设置为值CLIENT。客户端身份验证很难保证安全,因此一般不建议这样做。通常建议使用服务器插件,因为如果客户端执行CONNECT或ATTACH语句并且这是安全的方法,则它将对用户ID和密码执行服务器端验证。服务器插件还提供了一种映射LDAP用户ID DB2授权ID的方法。
现在您可以开始安装和配置DB2安全性插件,您需要考虑DB2所需的目录信息树。 DB2使用间接授权,这意味着用户属于一个组,并且授予该组的权限更少。您需要在LDAP目录中定义所有DB2用户和DB2组。
LDIF文件openldap.ldif应该包含以下代码:
#
# LDAP root object
# example.com
#
dn: dc=example,
dc=com
dc: example
o: example
objectClass: organization
objectClass: dcObject
#
# db2 groups
#
dn: cn=dasadm1,dc=example,dc=com
cn: dasadm1
objectClass: top
objectClass: posixGroup
gidNumber: 300
objectClass: groupOfNames
member: uid=dasusr1,cn=dasadm1,dc=example,dc=com
memberUid: dasusr1
dn: cn=db2grp1,dc=example,dc=com
cn: db2grp1
objectClass: top
objectClass: posixGroup
gidNumber: 301
objectClass: groupOfNames
member: uid=db2inst2,cn=db2grp1,dc=example,dc=com memberUid: db2inst2
dn: cn=db2fgrp1,dc=example,dc=com
cn: db2fgrp1
objectClass: top
objectClass: posixGroup
gidNumber: 302
objectClass: groupOfNames
member: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com
memberUid: db2fenc1
#
# db2 users
#
dn: uid=dasusr1,
cn=dasadm1,
dc=example,dc=com
cn: dasusr1
sn: dasusr1
uid: dasusr1
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
uidNumber: 300
gidNumber: 300
loginShell: /bin/bash
homeDirectory: /home/dasusr1
dn: uid=db2inst2,cn=db2grp1,dc=example,dc=com
cn: db2inst2
sn: db2inst2
uid: db2inst2
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
uidNumber: 301
gidNumber: 301
loginShell: /bin/bash
homeDirectory: /home/db2inst2
dn: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com
cn: db2fenc1
sn: db2fenc1
uid: db2fenc1
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
uidNumber: 303
gidNumber: 303
loginShell: /bin/bash
homeDirectory: /home/db2fenc1
创建一个名为“ db2.ldif”的文件,并将上面的示例粘贴到其中。使用此文件,将定义的结构添加到LDAP目录中。
要将DB2用户和DB2组添加到LDAP目录中,您需要将“ rootdn”用户绑定到LDAP服务器,以便获得确切的特权。
执行以下语法,用LDIF文件’db2.ldif’中定义的所有对象填充LDAP信息目录。
ldapadd –x –D “cn=Manager, dc=example,dc=com” –W –f /db2.ldif
使用更多参数执行搜索结果
ldapsearch –x |more
为我们的LDAP用户db2inst2创建实例。该用户需要主目录,并且主目录中有两个空文件。在创建新实例之前,需要创建一个将成为实例所有者的用户。
创建实例用户之后,您必须在用户主目录中创建文件“ .profile”和“ .login”,这将由DB2修改。要在目录中创建此文件,请执行以下命令:
mkdir /home/db2inst2
mkdir /home/db2inst2/.login
mkdir /home/db2inst2/.profile
您已在LDAP目录中注册了与DB2相关的所有用户和组,现在您可以创建实例名称为db2inst2且实例所有者ID为db2inst2的实例,并使用受防护的用户ID db2fenc1,这是运行用户所需的定义的函数(UDF)或存储过程。
/opt/ibm/db2/V10.1/instance/db2icrt –u db2fenc1 db2inst2
DBI1070I Program db2icrt completed successfully.
现在检查实例主目录。您可以看到名为“ sqllib”的新子目录以及为DB2使用而定制的.profile和.login文件。
将所需的LDAP插件复制到适当的DB2目录:
cp ///v10/IBMLDAPauthserver.so
/home/db2inst2/sqllib/security/plugin/server/.
cp ///v10/IBMLDAPgroups.so
/home/db2inst2/sqllib/security/plugin/group/.
将插件复制到指定目录后,您可以调入登录DB2实例所有者,并更改数据库管理器配置以使用这些插件。
Su – db2inst2
db2inst2> db2 update dbm cfg using svrcon_pw_plugin
IBMLDAPauthserver
db2inst2> db2 update dbm cfg using group_plugin
IBMLDAPgroups
db2inst2> db2 update dbm cfg using authentication
SERVER_ENCRYPT
db2inst2> db2stop
db2inst2> db2start
启动DB2实例后,此修改生效。重新启动实例后,您需要安装和配置名为“ IBMLDAPSecurity.ini”的主DB2 LDAP配置文件,以使DB2插件与当前LDAP配置一起使用。
IBMLDAPSecurity.ini文件包含
;-----------------------------------------------------------
; SERVER RELATED VALUES
;-----------------------------------------------------------
; Name of your LDAP server(s).
; This is a space separated list of LDAP server addresses,
; with an optional port number for each one:
; host1[:port] [host2:[port2] ... ]
; The default port number is 389, or 636 if SSL is enabled.
LDAP_HOST = my.ldap.server
;-----------------------------------------------------------
; USER RELATED VALUES
;-----------------------------------------------------------
rs
; LDAP object class used for use USER_OBJECTCLASS = posixAccount
; LDAP user attribute that represents the "userid"
; This attribute is combined with the USER_OBJECTCLASS and
; USER_BASEDN (if specified) to construct an LDAP search
; filter when a user issues a DB2 CONNECT statement with an
; unqualified userid. For example, using the default values
; in this configuration file, (db2 connect to MYDB user bob
; using bobpass) results in the following search filter:
OrgPerson)(uid=bob)
; &(objectClass=inet USERID_ATTRIBUTE = uid
representing the DB2 authorization ID
; LDAP user attribute, AUTHID_ATTRIBUTE = uid
;-----------------------------------------------------------
; GROUP RELATED VALUES
;-----------------------------------------------------------
ps
; LDAP object class used for grou GROUP_OBJECTCLASS = groupOfNames
at represents the name of the group
; LDAP group attribute th GROUPNAME_ATTRIBUTE = cn
; Determines the method used to find the group memberships
; for a user. Possible values are:
; SEARCH_BY_DN - Search for groups that list the user as
; a member. Membership is indicated by the
; group attribute defined as
; GROUP_LOOKUP_ATTRIBUTE.
; USER_ATTRIBUTE - A user's groups are listed as attributes
; of the user object itself. Search for the
; user attribute defined as
TRIBUTE to get the groups.
; GROUP_LOOKUP_AT GROUP_LOOKUP_METHOD = SEARCH_BY_DN
; GROUP_LOOKUP_ATTRIBUTE
; Name of the attribute used to determine group membership,
; as described above.
llGroups
; GROUP_LOOKUP_ATTRIBUTE = ibm-a GROUP_LOOKUP_ATTRIBUTE = member
现在,在当前实例目录中找到文件IBMLDAPSecurity.ini文件。将以上示例内容复制到相同的位置。
Cp
//db2_ldap_pkg/IBMLDAPSecurity.ini
/home/db2inst2/sqllib/cfg/
现在,您需要使用以下给出的两种语法来重新启动DB2实例:
db2inst2> db2stop
Db2inst2> db2start
此时,如果尝试使用“ db2start”命令,将收到安全错误消息。因为,尚未为您的LDAP环境正确配置DB2安全配置。
保持LDAP_HOST名称方便,该名称在slapd.conf文件中配置。
现在编辑IMBLDAPSecurity.ini文件,然后输入LDAP_HOST名称。上述两个文件中的LDAP_HOST名称必须相同。
文件内容如下所示:
;-----------------------------------------------------------
; SERVER RELATED VALUES
;-----------------------------------------------------------
LDAP_HOST = localhost
;-----------------------------------------------------------
; USER RELATED VALUES
----------------------------
;-------------------------------
USER_OBJECTCLASS = posixAccount
USER_BASEDN = dc=example,dc=com
USERID_ATTRIBUTE = uid
AUTHID_ATTRIBUTE = uid
;-----------------------------------------------------------
; GROUP RELATED VALUES
;-----------------------------------------------------------
GROUP_OBJECTCLASS = groupOfNames
GROUP_BASEDN = dc=example,dc=com
GROUPNAME_ATTRIBUTE = cn
GROUP_LOOKUP_METHOD = SEARCH_BY_DN
GROUP_LOOKUP_ATTRIBUTE = member
更改这些值之后,LDAP立即生效,并且使用LDAP的DB2环境可以完美运行。
您可以注销并再次登录到’db2inst2’用户。
现在,您的实例正在使用LDAP目录。