月曜日, 5月 16, 2005

Debian GNU/Linux でLDAPを使う

うちのサイトでもほんのちょっとだけパスワードかけたりしてるんですが、LDAPを使うように変更しました。
ちなみにLDAPはLightweight Directory Access Protocolの略です。名前の通り、軽量な、ディレクトリサービスにアクセスするためのプロトコルなんですね。

まず、いつものようにaptでslapd(これがLDAPサーバ)をインストールします。ついでにldap-utilsもインストールします。こっちはメンテナンスのために必要です。
Debianではインストール時に必要なことをインストーラーが聞いてきます。便利ですね。
最初にドメインを聞かれます。たとえばkumicho.netなんかにします。次に組織名を聞かれます。今回はWebのアクセス制御に使うのでWWW Usersなんかにします。このあたり、動作に問題はないのですが結構悩みます。このユーザーグループは組織(LDIFではoで表される)にすべきなのか組織単位(=ou)にするべきなのか。まあ、とりあえずあとでも変更できるので進めます。
最後に管理者用のパスワードを聞かれます。忘れなさそうな言葉を書いておきます。
これでインストールは終了。

次に情報を入力します。まず、こんなファイルを作ります。
-------- user.ldif --------
# user1, kumicho.net
dn: cn=user1,dc=kumicho,dc=net
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: user1
description: ここ説明です
userPassword: ****************
---------------------------
#で始まってる行はコメントです。
最初のdnっていうのは識別名。全データで一意である必要があります。
次の二つは、このデータオブジェクトのクラスを書きます。ここで選んだクラスによって使える属性が決まります。今回は認証に使うだけなので上の二つにしてあります。社員データベースを構築したい場合なんかだと、inetOrgPersonなんかを使うといいです。名前や住所、電話番号はもちろん、写真や認証鍵も管理できます。作るのが大変ですけどね。
次はcn(コモンネーム)、名前です。
次は説明なんですが、ここに書いてるように日本語も使えます。ただし、UTF-8じゃないといけません。
最後は見ての通り、パスワードです。隠してます。いやん。
もっと詳しく知りたいときは、/etc/ldap/schema以下のファイルを見ましょう。

で、こういうファイルを作ったら、
ldapadd -x -f user.ldif -D "cn=admin,dc=kumicho,dc=net" -W
こんな感じで入力します。パスワードを聞かれるので答えてくださいね。
ldapsearch -x -D "cn=admin,dc=kumicho,dc=net" -b "dc=kumicho,dc=net" -W
これでちゃんと入力されているか確認できます。
簡単に説明すると、-xは単純な認証を使う、-fは入力ファイル、-Dは操作を行う識別名、-bは検索のベース、-Wはパスワードの入力を促します。

うまくいったら、後はApacheを設定します。
認証をかけたいファイルやディレクトリの中で、
------------------------
AuthName "Private Area"
AuthType Basic
AuthLDAPURL ldap://ldap.kumicho.net/dc=kumicho,dc=net?cn
require valid-user
------------------------
こんな風に書きます。ファイルの指定の変わりにURLを指定するだけなので簡単ですね。?の前の部分は検索のベース、そのあとはIDに使う属性名です。デフォルトではuidという属性が使われますが、今回は登録していないのでcnを使います。

Apacheを再起動すればldapとの連携が使えるようになります。

あとは、ネットワークを超えて使用できるようにTLSの設定やIPアドレスによる制限をかけないといけないんですが、長くなるのでまた今度。
というか、今の使い方では必要ないからしないかも。普段ネットワークを越えて使わない→TLSいらない、WebはIPによる制限かけてない→総当り攻撃だったら制限かけてもWebを通してできる、ってことで。あ、でもWeb通して変更はできないし、slapdに脆弱性があること考えたらやっぱり必要か。。。

0 件のコメント: