前回はLDAPの実用性を分かっていただくため、各パラメータの意味などは一切省略してUNIXアカウントを統合するためのLDAPサーバを構築してみたわけですが、今回はそれぞれの設定パラメータについて解説していきたいと思います。サーバ設定のパラメータそれでは、まずはOpenLDAPサーバの設定から見ていきましょう。前回はリスト1の内容を用いていました。/var/lib/ldapこのリスト1は、あくまでも基本的な設定のみを列挙したものです。稲地さんのOpenLDAP情報などをご覧ください。各パラメータの意味は次の通りです。スキーマファイル名スキーマファイルを指定します。LDAPサーバはデータ格納用のサーバとなりますが、何でも好きなデータを格納できるわけではありません。自分が好きなデータを使用するには、あらかじめその内容をスキーマファイルという定義ファイルに定めておく必要があるのです。OpenLDAPをインストールすればさまざまなスキーマファイルがインストールされますので、住所や電話番号、メールアドレスなど標準的なスキーマは整っています。argsファイル名slapd起動時のコマンドラインオプションが保存されますdatabaseバックエンドデータベースの形式を定義します。DB形式)を用いるのが一般的ですが、ldbmなどその他の形式を用いることが可能です。suffix日本語訳では「接尾辞」となりますが、データツリーのベース部分とでも覚えておけば良いでしょう。今回の場合dc=example,dc=comという値を定義することで、以降のすべてのデータはこのツリーの下に保存されることになります。rootdn管理者DNを定義します。この言葉は聞き慣れないものだと思いますので、管理者IDと考えても差し支えないでしょう。rootpw上記管理者のパスワードを定義します。ここでは平文で定義していますが、SSHA形式などエンコードされた値を用いるのが一般的です。directoryデータの実体を保存するディレクトリです。LDAPとツリーツリーという言葉が出てきましたね。LDAPではデータをツリーで表現します。データは次のような場所に格納されます。uid=nakamitsu,ou=PreSales,o=F5NetworksnakamitsuというデータはF5Networks組織のPreSales部にあることがわかります。ここで用いられるuidやouなどの値は「属性」と呼ばれ、uidはユーザIDを示す、ouは組織単位を表す、などと決められています。日本全国民の個人データベースがあり、そこから筆者の情報を引き出すことを考えてみましょう。データが1冊の電話帳のような形式であった場合、1件1件順番に検索していたのでは、非常に効率が悪いことがわかります。筆者は東京在住ですので、東京都の電話帳のみから検索を行えば良いことがわかります。その東京都の電話帳が区別に記載されていれば新宿区のみから検索を行えばさらにターゲットを絞ることができます。この例をLDAP的に表現すると、次のような形となります。氏名=中満英生,町=高田馬場,区=新宿区,都道府県=東京都,国=日本このように、データがどのツリーの下に所属しているのかが判明していた場合、つまり私の住所が新宿区高田馬場にあるとあらかじめわかっていた場合には、全国のデータベースから検索を行う必要がなく、限られた高田馬場データベースから検索を行えば良いことになり、当然検索速度も全国からの検索に比べると圧倒的に速いことがわかります。Format)形式のファイルについて説明します。LDAPサーバ内の実データはBDB形式などのバイナリファイルで管理されている場合が多く、これらのデータベースを操作してデータの追加や削除を行うのは容易なことではありません。LDIF形式のファイルやエントリを編集することで、簡単にデータを操作することができます。Base64エンコードされた値という形で示します。注意点としては、日本語などのマルチバイト文字を含むデータはUTF-8で定義してください。前回用いたUNIXアカウントはリスト2のLDIFで定義されていました。/home/ldapuser1行目のdnからはじまる行は少し特殊で、このエントリが定義される位置を示します。dc=comというツリーの直下にあることを意味しています。ldapaddやldapdeleteLDIFで作成したデータをLDAPサーバに登録したり、また特定のデータを削除したりするにはLDAPクライアントコマンドを使用します。使用されるのは次のコマンドです。ldapaddldapdeleteldapmodifyこれらのコマンドに関しては以降の連載でも使用する機会が出てきますので、必要に応じて解説していきます。スキーマとは?さて、リスト2のLDIFを見ると、属性名としてuidやcnといった値が使用されています。見た目からuidはユーザIDを表す、uidNumberはUID番号、homeDirectoryはユーザのホームディレクトリを表すことが予想できますが、アカウントエントリを初めて追加する場合は、どのような属性を使用すれば良いかわからないはずです。ここで必要となるのがスキーマの概念です。冒頭で簡単に触れたように、データを操作するためには適切なスキーマの定義が必要になります。試しに/etc/openldap/schemaにあるcore.schemaとnis.schemaの中身を見てみましょう。)まず忘れてはならないのは、あるデータをLDAP内に格納するためには、適切なオブジェクトクラスを必ず定義する必要がある点です。UNIXアカウントを登録したい場合を考えてみましょう。「UNIXアカウントを登録したい。最初にオブジェクトクラスを定義しなければならないんだったな。どのオブジェクトクラスを選べばよいのだろう?」と考えるはずです。LDAPスキーマに精通している人であれば、「⁠UNIXアカウントであればposixAccountオブジェクトクラス」と一発でひらめくかも知れませんが、そうでない場合はGoogleなどで検索したり、すべてのスキーマファイルを参照し、パスワードやホームディレクトリなどが含まれているオブジェクトクラスを見つければ良いでしょう。posixAccountに定義されているようだ。posixAccountを用いる場合、cnやuid属性も必須らしいという感じの流れでしょうか。いずれにせよ、LDAPに触れていれば、自然と「○○のデータを登録する場合には□□というobjectClassを使用する」ということがわかってくるはずです。前回はauthconfigコマンドでLDAP参照・認証用の設定を行いましたが、このコマンドを用いることで、サーバには後述の変化が発生します。Authenticationオプション前者は文字通りユーザ情報をLDAP上から拾ってくるための設定であり、ネームサービススイッチ設定ファイルである/etc/nsswitch.confを更新します。従来、ユーザやグループの情報は/etc/passwdや/etc/groupファイルに蓄積されていますが、nsswitch.confの一部をリスト5のように更新することで、LDAP上のユーザ情報が参照されるようになります。ldapまた、これだけではLDAPサーバの場所がわかりませんので/etc/ldap.confに接続先の情報などを定義しておく必要がありますが、authconfigコマンドはそれを自動的に行ってくれます。nsswitch.confの設定を行うことで「ユーザ情報はLDAP上にある」という設定を実現することができるのですが、認証時の設定はまた別です。認証のために用いられる仕組み、そうPAMです。PAMの設定は/etc/pam.d以下のファイルを編集することで実現できますが、PAMは奥が深く、ページの都合上詳しく解説することができません。PAMに限らず、本連載ではさまざまな項目の解説が不十分であることは承知しています。それらの解説に分量を使ってしまうと、とくにお伝えしたいLDAPの機能が紹介できないのが実情です。(^^;ここではauthconfigの実行前後のdiffのみを紹介します(リスト6⁠)⁠。uid今回もかなり駆け足でしたが、OpenLDAPの基本的な部分をお伝えしたつもりです。本連載は「いろいろなソフトウェアとLDAPを連携させる」ということに主眼を置いています。次回以降はそういった部分に少しでも触れていければ幸いです。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します⁠。個別にライセンスが設定されている記事等はそのライセンスに従います。