はじめに
業務にてLDAPを利用しているのですが、
LDAPの詳しいことまで学ぶ機会がなかったので、まとめてみました。
LDAPとは
ディレクトリサービスへとアクセスするためのプロトコルです。
詳しい仕様についてはRFC4511に記載されています。
クライアントはTCPポート番号389を使用してLDAPサーバに接続を行い
**属性(ユーザー名など)で構成する関連属性(ユーザー名に紐づく情報)**の検索、追加、削除の操作をします。
LDAPによりディレクトリサービスにアクセスする際に対象を指定する手段としてLDAP識別名を使用します。
ディレクトリサービス
LDAPについて話す前にディレクトリサービスとはについてを解決していきたいと思います。
ディレクトリサービスとは、ネットワークを利用するユーザ名やマシン名などの様々な情報を管理するためのサービスのことです。
ユーザ名などのキーとなる値から様々な情報を検索することができます。
ディレクトリサービスは閉鎖的(ローカル)な場合とグローバルな場合で利用されます。
グローバルな利用で有名なのは、分散型のディレクトリサービスのDNSです。
グローバルな場合には、分散型のディレクトリサービスが用いられることが多いです。
ディレクトリサービスの特徴
- 読み取りが高速
- 分散型の情報格納モデル
- 高度な検索機能を持つ
かなり読み取りに特化した特徴といえますが、これはかなり理にかなっています。
と言うのも、ディレクトリサービスとして利用されるものは、データベースのように読み取りと書き込みが同じ頻度で発生することはありません。
読み取りは頻繁に発生するが、書き込みはほとんど発生しないことがほとんどであり、こういった思想を元に最適化されているのです。
DNSを例に考えてみると非常にわかりやすいと思います。
LDAP識別名とは
LDAP識別名は、単に識別名(DN)とも呼ばれます。
LDAP識別名は、複数のLDAP相対識別名(RDN)をカンマで区切って並べたものになります。
cn=hoge, cn=fuga, dc=poe, dc=piyo
DNはDistinguished Name、RDNはRelative Distinguished Nameの略です。
LDAP相対識別名は「属性値=値」という構文で定義します。
Active Directoryでは以下の属性値が使えます。
LDAPの属性値 | 属性表示名 | オブジェクトタイプ |
---|---|---|
cn | Common-Name | ユーザー名、グループ名、コンピュータ名、コンテナ名 |
ou | Organizational-Unit-Name | 組織単位(OU) |
dc | Domain-Component | ドメイン |
LDAPによって解決できること
ここまでで、LDAPはディレクトリサービスにアクセスするプロトコルであることがわかりましたが、具体的に何を解決してくれるかについて記していきたいと思います。
LDAPでは主に"LDAP認証"や"LDAP連携"といった仕組みにより様々なことが実現できます。よく使われるものとして以下の機能があります。
Linuxのシステムアカウント情報の一元化
多数のLinuxクライアントがある場合、1台1台にIDパスワード情報を入れることなく、LDAPサーバ1台だけ登録すれば、どのLinuxクライアントからも同じIDパスワードでログインできるようになります。
Linuxサーバの各種アプリでのIDパスワード統一化
ログインが必要なWebアプリサーバのIDパスワード情報を統一化することができる
社員情報の共有
LDAPサーバに個人についての情報を格納し、別のLinuxサーバにグループウェアサーバをインストールし利用することで登録したユーザー情報を共有することができる
また、グループウェアサーバー側にアカウント設定を行うことなく、LDAPサーバーに登録するのみでアカウントの生成等も行うことができる
RDBとの違い
RDBでは頻繁に更新が行われ、1レコードを更新した際に、複数のテーブルが更新されることも多く、それらの一連の処理をトランザクションとして一貫性・整合性を管理しているため複雑なテーブル構造の更新処理に適しています。
しかしながら、負荷が大きいです。
一方、LDAPは簡単なツリー構造となっており、データベースのような複雑な構造は取れませんが、負荷が軽いため、システムアカウントの管理には適しています。