CentOS上にLDAPを構築しThunderbirdで共有しよう
アドレス帳の管理は面倒ですよね。特に、家のPCでwindows環境とlinux環境で利用するメーラーが違ったり、外出用のノートPCやスマホでもメールを利用することもあります。その場合、アドレス帳がバラバラになってしまい、これらの環境間で共有できずに不便な思いをします。また、会社等で部署間やグループ間で共有したいアドレスもあるのではないでしょうか。
会社の場合ではMicrosoftのExcange等を入れればアドレスの共有はできますが、これ自体がかなり高価でして、中々小規模の企業では導入が困難になります。その他、Scalix等に代表されるWEBメールもありますが、操作性や速度等が劣ってしまいます。いまの環境のままでアドレス帳を共有でき、なんとか便利にする方法はないのでしょうか?
LDAPが解決します
LDAPとは、Lightweight Directory Access Protpcolの略称で、ディレクトリーにアクセスするための仕組みです。ここでいうディレクトリーとは、例えば、会社の組織図やWindowsのフォルダー構成などのような状態を意味します。つまり、会社組織の場合には、まず「会社」があって、その下に「取締役会」があり、「社長」「役員」「部長」「課長」とつながっていきます。それぞれが枝葉に分かれていくわけです。
LDAPでは、このようなディレクトリー構造でユーザー情報やアドレス帳、プリンター情報や資源等あらゆる物を管理しようと1993年に規定され、現在は1997年規定されたLDAPv3を利用しています。
全体像イメージ
LDAPはLightweight(=軽量)と謳っていますが、かなり難解で完全に把握して使いこなすのはなかなか難しく、まずは概念から理解する必要があります。ここでは、LDAPができることの一つしてアドレス帳の連動を取り上げます。OSはCentOS5.6をApache2.2.3を利用します。
LDAPの属性とスキーマーについて
LDAPはディレクトリー構造で情報を管理することは先に述べました。では、具体的にはどのようになるのでしょうか。先の会社組織の例ですと、社長や部長などの登場人物がいました。これらをLDAPでは「エントリー」と呼びます。そして、このエントリーはDistinguishaedName(DN)と呼ばれる識別名で重複なく識別されます。また、エントリーには属性が含まれます。ここからが本題になるのですが、LDAPはこの属性の理解するのがとても重要になります。
属性自体は自分で定義することも可能なのですが、非常に多くの属性が予め定義されており、それぞれの用途の応じて利用されるようになっています。そして、この属性を定義したものをスキーマと呼びます。例えば、従業員名簿を例示するのであれば、会社名、部署名、ユーザーID、氏名、メールアドレス等を管理する必要があると思われます。LDAPでは以下のような言葉で表現します。
| 属性名 | LDAPでの属性名 |
|---|---|
| 会社名 | o(Organization) |
| 部署名 | ou(Organization Unit) |
| ユーザーID | uid(UserID) |
| 氏名 | cn(Common Name) |
| メールアドレス | mail(Mail Address) |
そして、これらを管理しているスキーマをinetOrgPersonと言い、主に住所録等の管理に利用されます。このようなスキーマの多くが標準化されており、LDAPを利用しているアプリケーションでは「cn=氏名」と認識して適切に利用するようになっています。
CentOS5へのLDAPのインストールと設定
CentOS5へのLDAPのインストールはyumで簡単にできます。
yum -y install openldap-servers openldap-clients
これで、LDAP関連のパッケージはインストール完了です。openldap-serversの実態はslapdというデーモンです。このデーモンがLDAPのサーバーになります。設定ファイルは/etc/openldap/slapd.confになります。以下が編集箇所になります。
suffix "dc=[server],dc=[com]" rootdn "cn=Manager,dc=[server],dc=[com]" rootpw [secret] ・・ファイルの最後に・・ access to attrs=userPassword by self write by dn="cn=Manager,dc=[server],dc=[com]" write by anonymous auth by * none access to * by dn="cn=Manager, dc=[server],dc=[com]" write by self write by * read
とします。赤色箇所はご自身の環境に合わせて変更願います。まず、suffixでこのサーバーのルートとなるディレクトリーを指定します。重複を避けることから通常はドメイン名になります。たとえば、dc=google,dc=comやdc=yahoo,dc=co,dc=jp等です。
次にrootdnを指定します。これは、このディレクトリーの管理者のことです。例えば、windowsの管理者はAdministratorになりますが、LDAPのこのサーバーの管理者はcn=Manager,dc=server,dc=comになります。少し長いですね。
rootpwはこの管理者がログインするときに利用するパスワードです。ここに平文で記載しても良いのですが、セキュリティー的に好ましくないので、ここではSSHA利用します。パスワードの生成にはslappasswdコマンドを利用します。
slappasswd -s [パスワード]
{SSHA}v6tYJVPSxUAw65tlWrV7CWZCwzVl7d9v
ここで作成されたパスワードの最初の「{」の部分から先ほどのrootpwの部分に記載します。
rootpw {SSHA}v6tYJVPSxUAw65tlWrV7CWZCwzVl7d9v
最後にこのディレクトリーのアクセス権を記載します。ここの詳細はこちらを参照ください。
これで、設定ファイルの編集は終わりです。次にデータベース用の設定ファイルをコピーします。基本的に編集する必要はありません。
cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
slapdのサービス起動と再起動時に自動的に起動する設定を行います。
/etc/rc.d/ldap start chkconfig ldap on
ベーススキーマーの設定
ここまででLDAPのインストールと最低限の設定は完了です。しかし、LDAPのデータベース内はまだ空の状態です。まずは、これから情報を格納している「箱」になる部分を定義していきます。例示で利用するドメインをexample.comとします。これをLDAP表記にすると、dc=example,dc=comとなります。これからアドレス帳の管理を行うわけで、直接この場所に格納することもできますが、折角のLDAPですので、今後のアカウント管理やプリンター管理等を考慮し、ここではさらにaddressディレクトリー以下に登録することにします。つまり、ou=address,dc=example,dc=comになります。それでは、以下のようなLDIFファイルを作成してLDAPに登録します。
dn: ou=address,dc=example,dc=com ou: address objectclass: organizationalUnit
これを、適当な名称で保存します。筆者はinitdb.ldifで保存しました。次にこのファイルをLDAPに登録します。
ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f initdb.ldif
これで、アドレス帳を登録する箱が完成しました。
Thunderbird用スキーマの入手
LDAPのインストール時からデフォルトで存在するinetOrgPersonスキーマーを利用しても対応は可能なのですが、Thunderbirdのすべての属性を表現するまでには至っていません。インストール時には自動的に導入されませんが、mozillaAbPersonAlphaというスキーマが存在します。これを導入することで、よりThunderbirdと親和性が高い形になります。
mozillaAbPersonAlphaからThunderbird用のスキーマを入手します。このファイルを/etc/openldap/schema以下に保存し、slapd.confにincludeします。
include /etc/openldap/schema/mozillaAbPersonAlpha.schema
そして、slapdを再起動します。
/etc/init.d/slapd restart
phpldapadminのインストールと設定
phpldapadminとは、WEBベースのLDAP管理ツールです。LDAPにはデフォルトでコマンドベースの管理ツールは利用可能ですが、直感的な操作はできません。日頃の更新を考えるとWEBベースのツールがある方が便利だと思います。
phpldapadminを利用するためには、ApacheとPHP環境が必須です。未インストールの場合には、事前にインストールを行って下さい。
phpldapadminは公式サイトからダウンロードできます。今回は1.2.0.5を利用します。
ダウンロードしたファイルは/usr/local/share以下に保存し、シンボリックリンクを作成します。
cd /usr/local/share tar xvzf phpldapadmin-1.2.0.5.tar.gz ln -s phpldapadmin-1.2.0.5 phpldapadmin
設定は、configディレクトリー内のconfig.phpで行います。設定箇所は以下の箇所になります。
$servers->setValue('server','name','LDAP');
$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','port','389');
$servers->setValue('server','base','dc=example,dc=com');
Apacheの設定
/etc/httpd/conf.d以下にphpldapadmin.confを作成します。内容は以下のようになります。
Alias /phpldapadmin /usr/local/share/phpldapadmin
この設定により、http://example.com/phpldapadminにアクセスした段階で、phpldapadminが利用されます。なお、必要があれば、LocationディレクティブでBasicまたはDigest認証を掛けるとより安全になると思います。
ThunderbirdへのLDAPの設定
長くなりましたが、ここまでの設定でLDAPのインストールと設定が完了し、phpldapadminのインストールとapacheとの連動が構築できました。最後にLDAPをThunderbirdに設定する方法です。
アドレス帳画面でアドレス帳のファイル→新規作成→LDAPディレクトリーを選択します。
名前欄は適当にいれます。ホスト名はサーバーのホスト名または、IPアドレスをいれます。ベース識別名にはou=address,dc=example,dc=comとトップになるDNを指定します。ポート番号は初期値で問題ないと思われます。最後にバインド識別名です。これは、最初のslapd.confで設定したものでOKです。つまり、cn=Manager,dc=example,dc=comになります。これでLDAPの読み込みは完了です。次に、補完リストにLDAPの内容が表示されるようにします。ツール→オプション→編集→アドレス入力にて自動補完の設定箇所でLDAPを選択すればOKです。



