Db2-ldap
DB2-LDAP
前書き
LDAPはライトウェイトディレクトリアクセスプロトコルです。 LDAPは、クライアント/サーバーモデルに基づいており、TCP/IPスタックの上のレイヤーで実行される業界標準のプロトコルであるグローバルディレクトリサービスです。 LDAPは、インターネットディレクトリに接続、アクセス、変更、および検索する機能を提供します。
LDAPサーバーには、ディレクトリツリーの形式で編成された情報が含まれています。 クライアントはサーバーに情報を提供するか、特定の情報に対して何らかの操作を実行するように要求します。 サーバーは、必要な情報があればそれを提供することによってクライアントに応答します。または、必要な情報に対するアクションのためにクライアントを別のサーバーに参照します。 その後、クライアントは別のサーバーから必要な情報を取得します。
ディレクトリのツリー構造は、参加するすべてのサーバーで同じに維持されます。 これは、LDAPディレクトリサービスの顕著な機能です。 したがって、クライアントがどのサーバーを参照するかに関係なく、クライアントは常にエラーのない方法で必要な情報を取得します。 ここでは、LDAPを使用して、オペレーティングシステム認証の代わりとしてIBM DB2を認証します。
LDAPには2つのタイプがあります。
- トランスペアレント
- プラグイン
透過LDAPの構成方法を見てみましょう。
透過的LDAPの構成
透過的なLDAPの構成を開始するには、LDAPサーバーを構成する必要があります。
LDAPサーバーの構成
LDAP内のユーザーおよびグループオブジェクトに関するすべての情報を含むSLAPD.confファイルを作成します。 LDAPサーバーをインストールすると、デフォルトでマシン上の基本的なLDAPディレクトリツリーが設定されます。
以下の表は、変更後のファイル構成を示しています。
コードボックスが黄色で強調表示されているテキストは、次のことを意味します。
DBA user-id =“ db2my1”、group =“ db1my1adm”、password =“ db2my1” Admin 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: 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サーバーに追加します。 これはLinuxコマンドです。 db2コマンドではありません。
ldapadd r- -D ‘cn=Manager,dc=example,dc=com” –W –f
/var/lib/slapd.conf
LDAPサーバーでDB2ユーザーとDB2グループを登録した後、インスタンスとデータベースをインストールした特定のユーザーにログオンします。 サーバーが配置されているクライアントがリモートであろうとローカルであろうと、クライアントに確認するようにLDAPクライアントを構成する必要があります。
LDAPクライアントの構成
LDAPクライアントの構成は、ファイル「ldap.conf」に保存されます。 構成パラメーターに使用できるファイルは2つあり、1つは一般的で、もう1つは特定です。 最初のものは「/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構成に応じて、サーバーおよびドメイン情報の場所を変更する必要があります。 同じシステムでサーバーを使用している場合は、「host」で「localhost」と記述し、「base」でLDAPサーバーの「SLAPD.conf」ファイルに記述されている構成を構成できます。
Pluggable Authentication Model(PAM)は、認証サービス用のAPIです。 これは、暗号化されたパスワードとposixAccount型の特別なLDAPオブジェクトを使用したLDAP認証の一般的なインターフェイスです。 このタイプのすべてのLDAPオブジェクトは、ポータブルオペレーティングシステムインターフェイス(POSIX)属性を持つアカウントの抽象化を表します。
Network Security Services(NSS)は、セキュリティ対応のクライアントおよびサーバーアプリケーションのクロスプラットフォーム開発をサポートするライブラリのセットです。 これには、SSL、TLS、PKCS S/MIME、その他のセキュリティ標準などのライブラリが含まれます。
このインターフェイスのベースDNと2つの追加のマッピング属性を指定する必要があります。 OpenLDAPクライアント構成ファイルには、以下のエントリが含まれます。
host localhost
base dc=example,dc=com
これまでは、LDAPサーバーのホストとベースDNを定義するだけです。
OpenLDAP環境の検証
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サーバーへの接続のテスト
ldapsearchコマンドは、LDAPサーバーへの接続を開き、バインドし、特別なパラメーター「-x」を使用して指定できる検索クエリを実行します。 Simple Authentication and Security Layer(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サーバーとクライアントを使用した後、LDAPで使用するためにDB2データベースを構成する必要があります。 DB2ユーザー認証プロセスにLDAP環境を使用するようにデータベースをインストールおよび構成する方法について説明します。
DB2およびLDAP対話プラグインの構成
IBMは、DB2用のLDAPプラグインを含む無料パッケージを提供しています。 DB2パッケージには、次のそれぞれに対応する3つのDB2セキュリティプラグインが含まれています。
- サーバー側認証
- クライアント側認証
- グループ検索
要件に応じて、3つのプラグインのいずれかまたはすべてを使用できます。 このプラグインは、一部のユーザーが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サーバーにバインドして、正確な権限を取得する必要があります。
次の構文を実行して、LDAP情報ディレクトリに、LDIFファイル「db2.ldif」で定義されているすべてのオブジェクトを入力します。
ldapadd –x –D “cn=Manager, dc=example,dc=com” –W –f <path>/db2.ldif
より多くのパラメーターで検索結果を実行する
ldapsearch –x |more
DB2を使用するためのファイルシステムの準備
LDAPユーザーdb2inst2のインスタンスを作成します。 このユーザーには、ホームディレクトリ内に2つの空のファイルがあるホームディレクトリが必要です。 新しいインスタンスを作成する前に、インスタンスの所有者になるユーザーを作成する必要があります。
インスタンスユーザーを作成したら、ユーザーのホームディレクトリに「.profile」と「.login」というファイルを作成する必要があります。これらはDB2によって変更されます。 このファイルをディレクトリに作成するには、次のコマンドを実行します。
mkdir/home/db2inst2
mkdir/home/db2inst2/.login
mkdir/home/db2inst2/.profile
LDAPディレクトリーにDB2に関連するすべてのユーザーとグループを登録しました。これで、インスタンス所有者ID「db2inst2」で「db2inst2」という名前のインスタンスを作成し、実行ユーザーに必要なfencedユーザーID「db2fenc1」を使用できます定義済み関数(UDF)またはストアドプロシージャ。
/opt/ibm/db2/V10.1/instance/db2icrt –u db2fenc1 db2inst2
DBI1070I Program db2icrt completed successfully.
次に、インスタンスのホームディレクトリを確認します。 「sqllib」という新しいサブディレクトリと、DB2の使用に合わせてカスタマイズされた.profileおよび.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/
次に、以下に示す2つの構文を使用して、DB2インスタンスを再起動する必要があります。
db2inst2> db2stop
Db2inst2> db2start
この時点で、「db2start」コマンドを試行すると、セキュリティエラーメッセージが表示されます。 なぜなら、DB2セキュリティ構成は、LDAP環境に対してまだ正しく構成されていないからです。
両方の構成をカスタマイズする
slapd.confファイルで構成されているLDAP_HOST名を手元に置いてください。
次に、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ディレクトリを操作しています。