2.OpenLDAPサーバの構築② -管理者パスワードの設定が終わったら、次は管理者DNとベースDNの設定。
■ldapのディレクトリ構成とベースDN
ldapにはベースDNという概念がある。
DNとは識別名(Distinguished Name)で、ベースDNとは今後LDAPユーザを追加/修正/削除する際に、そのユーザがどの場所にいるか、検索する位置を指定するもの。ldapではベースDNを
dc=abc,dc=def,dc=com
というような記述をするが、後述のouやその配下のディレクトリを入れて検索位置を絞る場合もある。ここでは一旦dcのみでベースDNを考えていく。(abc、defは任意の文字列)dcはドメイン要素(Domain Component)。ホスト名やドメイン名(abc.def.comみたいな)に類似した考え方で、うしろに指定するdcほど広域(.jpや.comのような国、地域)を指す。
図にすると
というイメージ。
この図でのベースDNを「dc=abc,dc=def,dc=com」とする。図の例ではdcが3つあるが、一般的には2~3つのdcを使用することが多い。
このベースDNに管理者を置く場合、「cn=Manager,dc=abc,dc=def,dc=com」といった管理者を設定する。(管理者DNという)
管理者はuidではなくcnで指定する。また一般的なrootユーザのように「su – Manager」等でユーザ切り替えはできない。teraterm等のターミナル上で何か作業するための管理者ではないが、別のアプリケーションと連携する際に、ベースDNと管理者DNは随所に出てくるので、このような設定があることは覚えておいた方がよい。cnは共通名(common name)で、cn=******は任意の文字列でよいが、ここではManagerとする。
ldapはこのベースDNの配下に組織(ou:organizational unit)を置いて、さらにouの配下に(cn)やユーザ(uid)を置くという構成をとる。
ou配下のcnと管理者を示すcnは、呼び方はcommon nameで同じだが居る位置が違うので、混乱しないようにしたい。またouにつける名前は「ou=Group」や「ou=People」がデフォルトだが、任意でよい。
ディレクトリ階層をイメージした構成になっていることから、LDAP(ライトウェイト ディレクトリ アクセス プロトコル)と呼んでいる(はず!)
これを踏まえた上で、管理者DNとベースDNを設定する。
■ベースDNと管理者DNの設定
設定用のldifファイルを以下の内容で作成する。
[root@ldapserver ~]# vi /root/ldif/change-domain.ldif -> ファイル名は任意 dn: olcDatabase={1}monitor,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=abc,dc=def,dc=com" read by * none dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=abc,dc=def,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=Manager,dc=abc,dc=def,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}G+ZkXh6X/sf0K7roTRVj1zZzyFqSuAa6 -> 2.OpenLDAPサーバの構築② -管理者パスワードの設定で設定した管理者パスワード
このファイルをldapmodifyコマンドでldapサーバに投入する。
[root@ldapserver ~]# ldapmodify -x -D cn=config -w manager -f /root/ldif/change-domain.ldif modifying entry "olcDatabase={1}monitor,cn=config" modifying entry "olcDatabase={2}hdb,cn=config" modifying entry "olcDatabase={2}hdb,cn=config" modifying entry "olcDatabase={2}hdb,cn=config"
ldapmodifyコマンドのオプションは以下の通り。
「-x」 : 簡易認証。(-Y EXTERNALでSASL認証をしないやり方。)
「-D」 : どのDNに結び付けるかを指定する。/etc/openldap/slapd.d/cn=config配下のデータを変更するため、「cn=config」とする。
「-w」 : 管理者パスワードを設定する。ここでは2.OpenLDAPサーバの構築② -管理者パスワードの設定で「manager」と設定したので、managerと指定する。対話式(コマンド実行後パスワードを聞かれるようにする)の場合は「-W」を使い、コマンド上ではパスワードを設定しない。
「-f」 : 実行するldifファイルを指定する。
コマンド実行結果でmodifying entry ~ 以外にエラーが出なければ投入OK。
■設定が反映されたか確認
ldapmodifyコマンドで変更実施した内容がちゃんと反映されているか、ldapsearchコマンドで確認してみる。
[root@ldapserver ~]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'olcDatabase={1}monitor,cn=config' SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 dn: olcDatabase={1}monitor,cn=config objectClass: olcDatabaseConfig olcDatabase: {1}monitor olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external ,cn=auth" read by dn.base="cn=Manager,dc=abc,dc=def,dc=com" read by * none [root@ldapserver ~]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'olcDatabase={2}hdb,cn=config' SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 dn: olcDatabase={2}hdb,cn=config objectClass: olcDatabaseConfig objectClass: olcHdbConfig olcDatabase: {2}hdb olcDbDirectory: /var/lib/ldap olcDbIndex: objectClass eq,pres olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub olcSuffix: dc=abc,dc=def,dc=com olcRootDN: cn=Manager,dc=abc,dc=def,dc=com olcRootPW: {SSHA}G+ZkXh6X/sf0K7roTRVj1zZzyFqSuAa6
ldapsearchコマンドのオプションは以下の通り。
「-LLL」 : 検索結果の内容の指定。-Lの場合はコメント行が付加され、-LLの場合はLDIFバージョンが付加される。その両方を省略するのが-LLL。
「-Y EXTERNAL」 : SASL認証を使用。
「-H」 : ldapサーバの指定。「ldapi:///」はローカルとなる。
「-b」 : 検索対象とするDNやolcDatabaseを指定する。後述のobjectClassや属性も指定できる。bはbindのb。
ldapsearchコマンドの結果で、ベースDNや管理者DNの箇所がldifファイルで記述した内容と同じになっていることが分かる。
これで管理者DNとベースDNの設定は完了!
コマンドオプションまで解説してあり、大変参考になりました。ありがとうございます。