DB2 LDAP
LDAP是輕量級目錄訪問協議。 LDAP是一個全球性的目錄服務,工業標準協議,該協議是基於客戶端 - 服務器模型,運行在一個層中TCP/IP棧的上方。LDAP提供了一個工具來連接,訪問,修改和搜索互聯網目錄。
在LDAP服務器包含該組織在一個目錄樹的形式信息。在客戶端請求的服務器,以提供信息或在一個特定的信息執行一些操作。服務器對客戶機提供所需的信息,如果它有一個,或者它是指客戶到另一台服務器上所需的信息操作。然後,客戶端獲取從另一個服務器所需的信息。
目錄樹結構保持在所有參與的服務器相同。這是LDAP目錄服務的一個突出特點。因此,無論哪個的服務器是由客戶端的簡稱,在客戶端總是得到在無差錯的方式所需的信息。在這裡,我們使用LDAP驗證IBM DB2作為替代操作係統認證。
有兩種類型的LDAP:
- 透明度
- 插件
讓我們來看看如何配置透明LDAP。
配置LDAP
要開始使用LDAP配置,需要配置LDAP服務器。
LDAP服務器配置
創建一個slapd.conf的文件,它包含所有有關LDAP用戶和組對象的信息。當安裝LDAP服務器,默認情況下它被配置在機器上的基本LDAP目錄樹。
下麵所示的表表示修改後的文件配置。
文本高亮度顯示黃代碼框表示為以下幾點:
DBA user-id = “db2my1”, group = “db1my1adm”, password= “db2my1” ;管理員 user-id = “my1adm”, group = “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: db ctl # 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服務器執行此文件。這是一個linux命令;不是DB2命令。
ldapadd r- -D ‘cn=Manager,dc=example,dc=com” –W –f /var/lib/slapd.conf
注冊DB2用戶和DB2組的LDAP服務器後,登錄到已安裝的實例和數據庫的特定用戶。需要配置LDAP客戶端,以確認客戶端在服務器的位置,無論是遠程或本地。
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配置改變服務器和域信息的位置。如果使用相同的係統服務器,提到它作為'localhost'為'host'和'基本',可以配置中提到“slapd.conf”文件LDAP服務器。
插入式驗證模式(PAM)是用於身份驗證服務的API。這是具有加密的密碼和類型的posixAccount特殊LDAP對象LDAP身份驗證的通用接口。這種類型的所有LDAP對象表示便攜式操作係統界麵(POSIX)帳戶的屬性。
網絡安全服務(NSS)是一組庫,以支持安全功能的客戶端和服務器應用程序的跨平台開發。這包括像SSL,TLS,PKCS S/MIME等安全標準庫。
需要指定基本DN這個接口和兩個附加屬性映射。 OpenLDAP客戶端配置文件中包含如下條目:
host localhost base dc=example,dc=com
直到這一點,剛才定義的主機LDAP的服務和基礎DN。
OpenLDAP驗證環境
當配置LDAP服務器和LDAP客戶端,通信同時驗證。
第一步:檢查本地LDAP服務器正在運行。使用下麵的命令:
ps -ef | grep -i ldap
該命令應列出LDAP守護進程,表示LDAP服務器:
/usr/lib/openldap/slapd -h ldap:/// -u ldap -g ldap -o slp=on
這表示LDAP服務器正在運行,正在等待來自客戶端的請求。如果冇有這樣的過程以前的命令就可以啟動LDAP服務器,使用的“rcldap”命令。
rcldap start
當服務器啟動時,可以將文件“‘/var/log/messages/發出以下命令。
tail –f /var/log/messages
測試連接到LDAP服務器ldapsearch
ldapsearch命令,打開到LDAP服務器的連接,結合它並執行它可以通過使用特殊的參數'-x'指定搜索查詢使用-x參數,而不是一個簡單的身份驗證機製連接到LDAP服務器喜歡簡單的身份驗證和安全層更複雜的機製(SASL)
ldapsearch –x
LDAP服務器應該具有下麵給出的回應答複,包含所有LDAP數據交換格式(LDIF)的LDAP條目。
# 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
配置DB2
使LDAP服務器和客戶機的工作後,需要配置DB2數據庫使用LDAP。讓我們來討論如何安裝和配置數據庫使用LDAP環境,為DB2用戶的認證過程。
配置DB2和LDAP互動插件
IBM提供了一個免費的包LDAP插件DB2。 DB2包包括三個DB2安全性插件為每個以下內容:
- 服務器端驗證
- 客戶端身份驗證
- 組查找
根據要求,可以使用任何三個插件或全部。這個插件不支持,其中一些用戶在LDAP和其他定義的操作係統環境。如果決定使用LDAP插件,需要定義與LDAP服務器中的數據庫相關聯的所有用戶。同樣的原則也適用於組插件。
必須決定哪些插件強製規定係統。在方案中使用的客戶端身份驗證插件,用戶ID和密碼驗證提供一個連接或語句出現在客戶端係統上。這樣的數據庫管理器配置參數SRVCON_AUTH或認證需要被設置為值客戶端。客戶端的認證是難以確保和通常不建議。服務器插件通常建議,因為它執行的用戶ID和密碼的服務器端驗證,如果客戶端執行CONNECT或附加聲明,這是安全的方式。服務器插件還提供了一種映射LDAP用戶ID DB2授權ID。
現在,可以開始安裝DB2安全性插件和配置,需要考慮DB2所需的目錄信息樹。DB2使用間接的授權,這意味著一個用戶屬於一個組,這個組被授予較少的部門。需要定義所有DB2用戶和DB2組的LDAP目錄。
圖片/鏡像
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服務器綁定,以得到確切的特權。
執行以下語法,以填補LDAP目錄中的信息與在LDIF文件'db2.ldif“中定義所有的對象
ldapadd –x –D “cn=Manager, dc=example,dc=com” –W –f <path>/db2.ldif
使用多個參數執行搜索結果
ldapsearch –x |more
編寫文件係統使用DB2
創建我們的LDAP用戶db2inst2實例。此用戶需要與主目錄內的兩個空文件的主目錄。在創建一個新的實例,需要創建一個用戶誰將會是實例的所有者。
創建實例用戶後,應該有創建文件“.profile”,並在用戶主目錄“.login',這將是DB2進行修改。在目錄中創建這個文件,執行以下命令:
mkdir /home/db2inst2 mkdir /home/db2inst2/.login mkdir /home/db2inst2/.profile
已經注冊了DB2的LDAP目錄相關所有用戶和組,現在可以使用名稱為“db2inst2”的實例所有者ID“db2inst2”創建一個實例,並使用受防護用戶ID“db2fenc1',這是需要用戶運行定義函數(UDF)或存儲過程。
/opt/ibm/db2/V10.1/instance/db2icrt –u db2fenc1 db2inst2 DBI1070I Program db2icrt completed successfully.
現在檢查的實例主目錄。可以看到新的子目錄所謂的“SQLLIB”和.profile文件和定製DB2使用.login文件。
配置認證公共插件在DB2 LDAP支持
所需的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“命令,會得到安全錯誤消息。因為DB2的安全配置還冇有正確配置LDAP環境。
定製兩種配置
保持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目錄。