LDAPの仕組み
LDAP(Lightweight Directory Access Protocol)とは、ディレクトリサービスの提供者と利用者の間で情報をやり取りするためのプロトコルです。
ディレクトリサービスとは、キーとなる値から、ディレクトリの中の情報を検索することが出来るサービスです。
DITと識別名
DIT(Directory Information Tree)とは、LDAPで情報が格納される階層構造のことです。
識別名(DN)とは、ディレクトリツリー内のエントリを識別するためのものです。
LDIF
ディレクトリ内の情報はLDIF(LDAP Data Interchange Format)という形式で記述されたテキストファイルで表現できます。
スキーマ
LDAPでは、データを格納するためのオブジェクトクラスや属性のセットが用意されています。オブジェクトクラスや属性の定義はスキーマと呼ばれます。
スキーマが定義された/etc/openldap/schemaディレクトリ以下に格納されています。
以下は、主なスキーマファイルです。
| スキーマファイル | 説明 |
| core.schema | 基本的な属性を定義する必須のスキーマです。 |
| cosine.schema | X.500規格で定義された属性を定義するスキーマです。 |
| inetorgperson.schema | アドレス帳など個人情報を扱うためのスキーマです。 |
| nis.schema | NIS関連(ユーザーやグループ情報)のオブジェクトクラスや属性を定義するスキーマです。 |
オブジェクト識別子
オブジェクトクラスや属性にはオブジェクト識別子(OID)が割り当てられています。
OIDは全世界で重複しないようIANAによって管理されています。
あらかじめ用意されたオブジェクトクラスや属性を利用する分には申請などは必要ありませんが、新たなオブジェクトクラスを作成したりスキーマを拡張したりしてサービスを外部に提供する場合はIANAにOIDの割り当てを申請する必要があります。
ホワイトページ
ホワイトページとは個人別電話帳のことです。
ホワイトページを作成するには、inetorgperson.schemaで定義されているinetOrgPersonクラスを使うのが一般的です。
以下は、ホワイトページで利用できる主な属性です。
| 属性 | 説明 |
| cn | 一般名(common name) |
| sn | 苗字 |
| メールアドレス | |
| o | 組織名 |
| ou | 組織単位名 |
| telephoneNumber | 電話番号 |
LDAPサーバーの設定
LinuxでLDAPを利用するには、一般的にOpenLDAPが使われます。
OpenLDAPサーバーデーモンはslapdです。
OpenLDAPサーバーの設定ファイルは/etc/openldap/slapd.confです。
slapd.confは、大きく分けて全体の設定を行うグローバルセクションとデータベース毎の設定を行うデータベースセクションがあります。
以下、slapd.confのグローバルセクションで使用する主なディレクティブです。
| ディレクティブ | 説明 |
| argsfile ファイル名 | slapdデーモン起動時のコマンド引数を格納するファイルを指定します。 |
| pidfile ファイル名 | slapdのプロセスIDを格納するファイルを指定します。 |
| include ファイル名 | 読み込む設定ファイルを指定します。 |
| logfile ファイル名 | デバッグログの出力先ファイルを指定します。 |
| loglevel ファイル名 | ログレベルを指定します。 |
| idletimeout 秒数 | アイドル状態のクライアント接続を強制的に切断するまでの秒数を指定します。 |
| timelimit 秒数 | slapdが検索要求の応答に使う最大秒数を指定します。 |
以下、データベースセクションで使用する主なディレクティブです。
| ディレクティブ | 説明 |
| database 種類 | バックエンドデータベースの種類を指定します。 |
| suffix DN | ディレクトリのトップとなるDNを指定します。 |
| rootdn DN | データベース管理者のDNを指定します。 |
| rootpw パスワード | データベース管理者のパスワードを指定します。 |
| index 属性名 種類 | 属性に作成するインデックスの種類を指定します。 |
| directory ディレクトリ | データベースファイルを格納するディレクトリを指定します。 |
アクセス制御
OpenLDAPでは、エントリや属性に対してアクセス制御を設定できます。slapd.confファイル内でaccess to パラメータを使って使用します。以下、access toパラメータの書式です。
access to アクセス制御対象 by 接続元 アクセスレベル
アクセス制御対象、接続元、アクセスレベルについては以下で説明します。
アクセス制御対象
| アクセス制御対象 | 説明 |
| * | 全てのエントリ |
| attrs=属性 | 指定した属性のみ |
| dn=DN | 指定したDNのみ |
接続元
| 接続元 | 説明 |
| * | 全てのユーザー |
| annonymous | 認証前のユーザー |
| users | 認証されたユーザー |
| self | 接続中の認証済みユーザー自身 |
| dn=DN | 指定したDNのユーザー |
アクセスレベル
| アクセスレベル | 説明 |
| write | 属性値を変更できる |
| read | 検索結果を参照できる |
| search | 検索できる |
| compare | 比較できる |
| auth | 認証を受けることが出来る |
| none | アクセス出来ない |
LDAPサーバーの管理コマンド
slappasswd
slapd.confファイルのrootpwに設定する管理者パスワードを作成するコマンドです。
slapcat
LDAPデータベースの内容がLDIF形式で出力するコマンドです。
slapadd
LDIFデータをLDAPデータベースにリストアするコマンドです。
LDAPクライアントの利用
以下は、LDAPクライアントコマンドです。
| コマンド | 説明 |
| ldapadd | エントリを追加します。 |
| ldapsearch | エントリを検索します。 |
| ldapdelete | エントリを削除します。 |
| ldapmodify | エントリを変更します。 |
| ldappasswd | パスワードを変更します。 |
今回はネットワーククライアント管理のLDAPの仕組みと設定についてでした。
最後まで読んで頂き、ありがとうございました。
LPIC level2の他の分野へ移動できる全体ページへは以下リンクからお願いします。
