OpenLDAPで認証サーバを建てる その1

とある業務で導入検討をして、およそ一カ月程度えらく苦戦したので
メモ書き程度にまとめてみる。

なお、1台のPCでサーバ兼クライアントを実現する必要最低限の設定を記載する。
今回サーバとして機能させるLinuxのディストリビューションは、openSUSEである。

Ubuntuなどどは違いかなり情報は少ない。
よって、初心者向けではないことは確かだろう。
このカメレオンの名はGeeko(ギーコ)である。




正直、なぜこれを使わなければならないかは、ちっとも分かっていない。
もしかして、その方面ではスタンダードなのか!?

とりあえず、現時点の最新版12.3をゲットする。
http://software.opensuse.org/123/ja

余分なハードは持ち合わせていないので、VMwareから起動することにした。

完了までかなり不安になるぐらい時間がかかるが、無事に立ち上がった。
なお、一度リポジトリにアクセスしてアップデートしておくといいかもしれない。

これから必要なソフトウェアを追加する。

1. セキュアな通信には欠かせないOpenSSL
公式サイトから、現時点の一番新しいヤツ(1.0.1e)をいただく。
http://www.openssl.org/source/openssl-1.0.1e.tar.gz

解凍およびインストールを行う。 (オプションはお好みで)
# tar zxvf openssl-1.0.1e.tar.gz
# cd openssl-1.0.1e
# ./Configure --prefix=/usr/local shared
# make
# make install

珍しく特にハマるようなことがなかったので次のステップへ

2. OpenLDAP導入には必須となるBerkeley DB
公式サイトから、現時点の一番新しいヤツをいただくと、あとで失敗する。
実はOpenLDAPのREADMEにはこっそりと、但し書きがある。

... require Oracle Berkeley DB 4.4 - 4.8, or 5.0 - 5.1.

どうもバージョンを気にするようなので、いくつか試してみたところ
4.8 だと、後のOpenLDAPの設定もうまくいった。
http://www.oracle.com/technetwork/jp/database/berkeleydb/downloads/index-090620-ja.html

解凍およびインストール。
configureコマンド実行がちょっと変わっている点を除いては、特に問題ない。
# tar zxvf db-4.8.30.tar.gz
# cd db-4.8.30/build_unix
# ../dist/configure --prefix=/usr/local
# make
# make install

次はいよいよOpenLDAP^^

3. OpenLDAP本体
公式サイトから、現時点の一番新しいヤツ(2.4.36)をいただく。
ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.36.tgz

解凍およびインストール。
configure時のBerkeleyのバージョン問題はクリア、後で使うTLSも有効になっており問題なし。
そして言われたとおりに、make dependを行う。
# tar zxvf openldap-2.4.36.tgz
# cd openldap-2.4.36
# ./configure --prefix=/usr/local
# make depend
# make
# make install

では、設定の方に取り掛かる。

4. DB設定ファイルの準備
Berkeley DBを使うことになっているので、基本設定ファイルを配置しておく。
修正する必要はないが、存在しないとslapdがうまく起動しなかったような...
# cp /usr/local/etc/openldap/DB_CONFIG.example /usr/local/var/openldap-data/DB_CONFIG

5. 起動スクリプト設定
とりあえず、簡単なのがあるのでこの辺りからいただく。
必要に応じて修正する。今回の流れではslapdのパスが違った...
http://unixservermemo.web.fc2.com/sv/opldap-startscript.htm

/etc/init.d/slapd として保存する。また、自動起動設定を行っておく。
# chkconfig -add slapd
# chkconfig slapd on

6. slapd.conf設定
/usr/local/etc/openldap/slapd.conf にユーザ認証用スキーマを2つ追加
include        /usr/local/etc/openldap/schema/cosine.schema
include        /usr/local/etc/openldap/schema/nis.schema

7. ldap.conf設定
/usr/local/etc/openldap/lapd.conf にldapコマンドを実行するための設定を記載
BASE        dc=my-domain,dc=com
URI            ldap://127.0.0.1

8. ログファイルの設定
/etc/rsyslog.conf に slapd.log を出力するよう修正
local4.*        -/var/log/slapd.log

設定が終わったら、再起動する service rsyslog restart

9. slapdを起動し、ログ出力を確認
# /etc/init.d/slapd start

/var/log/slapd.logには例えばこのような出力があるはずだ
2013-10-22T00:02:17.577623-4:00 linux-9rc6 slapd[6068]  slapd starting

10. エントリ登録
このユーザは後で、ログインのテストの時も使用する。
以下の内容のファイルを用意し、ldaptest.ldif として保存。
先のslapd.confでもそうだったが、パスワードが平文である。
もちろん実運用ではきちんと暗号化する必要がある。

dn: dc=my-domain,dc=com
objectClass: dcObject
objectClass: organization
dc: my-domain
o: my-domain

dn: ou=People,dc=my-domain,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=my-domain,dc=com
objectClass: organizationalUnit
ou: Group

dn: uid=test3,ou=People,dc=my-domain,dc=com
objectClass: account
objectClass: posixAccount
uid: test3
cn: test3
userPassword: test123
loginShell: /bin/bash
uidNumber: 2013
gidNumber: 2013
homeDirectory: /home/test3
ldapaddコマンドで一気に登録する。
# ldapadd -x -w secret -D "cn=Manager,dc=my-domain,dc=com" -f ldaptest.ldif

ちなみに削除したいときはこのような感じになる。
ldapdelete -w secret -D "cn=Manager,dc=my-domain,dc=com" "ou=Group,dc=my-domain,dc=com"

削除順には気をつける。今回の場合はtest3, Group, People, my-domainの順で削除可。
一気に全削除とか、いきなりdc=my-domain,dc=comは消すといったことはできない。

11. 登録したエントリはldapsearchで確認できる
# ldapsearch -x

どんどん長くなってきたので、ここらで分けるか...