今回は Amazon Web Service (AWS)を使用した、OpenLDAP サーバの設定を記事にします。
LDAP認証を試してみたいが、身近に環境が無い場合どうするだろうか?。余っているPCでもあれば、OpenLDAP for Windowsを入れて動かすことも可能だ。でも適当なPCが無いし、何とかならないか・・・と思ったら AWS を試しても良いのではないか。2010年11月から AWS には無償のお試しプランができたようだ。
初年度だけだが、750時間分インスタンスを立ち上げることができる。つまり一ヶ月丸々使える訳だ。これは試した方が良いだろう・・・という訳でAWS上で OpenLDAP を動かしてみます。ただ私自身はこういう基盤系の仕事が苦手で、LDAPも初めて、Linuxもあまり触ったことがありませんので、初心者向けの記事になります。
AWSの利用(SSH接続まで)
AWSを利用するにはまず、クレジットカードが必要だ。クレジットカードを用意して、次のサイトからAWSアカウントを作成する。
これ以降、
- AWSアカウント作成
- Amazon Elastic Compute Cloud(Amazon EC2)インスタンス設定及び起動
- 起動インスタンスに SSHを使ってログイン
私は最初、以前読んだ記事連載(参考:CodeZine - AWSの概要と登録手順)を参考にして設定していたのだが、途中で試行錯誤に設定していくようになった。これは記事が書かれた3年前と比べてAWSの管理コンソールの機能が充実し、以前ならコマンドラインやツールを使ってしか出来なかったことが、管理コンソール上でできるようになったことが大きい。
今回の記事ではAWSの設定方法も書こうと思ったが、調べてみたら丁寧に説明しているサイトが幾つか存在しているようだ。このため、インスタンス起動・SSHでのログインまでは、次のサイトを参考にして欲しい。
参考
色聴者判定テスト - Amazon EC2の使い方 ・・・[Windows] SSHクライアント(Tera Term)を利用
Devugger - AWS Free Usage TierでAmazon EC2を利用する ・・・
[MAC] ターミナルを利用
EC2インスタンスは、無償分では Linuxマイクロインスタンス を使用した場合のみのため、「Amazon Linux」を選択する。
またSSHクライアントは最初に私は、PuTTY を使った。これは AWS のメッセージで、
Open the SSH client of your choice (e.g., PuTTY, terminal).と書いてあったので使用してみたのだ。しかし、PuTTYの場合 KeyPairファイルをそのままキーファイルとしては使えないようだ。PuTTYgen というプログラムでキーファイルを作り替える必要がある。
作り変えるには PuTTYgen で、ダウンロードしたKeyPairファイルを [Load] ボタンでロードし、PuTTY用のプライベートキーを [Save private key] ボタンで生成する。
この辺り、Tera Term の方が多少簡単に接続可能だ。
OpenLDAP のインストール
Linuxサーバが準備できたので、OpenLDAPの設定を行なっていく。ちなみに Amazon Linux AMI は、CentOS とバイナリ互換となっているようだ。このため、CentOSでの設定を説明している幾つかのサイトを参考にしながら作業を行なっていった。
SSH画面で、まずEC2インスタンでインストールされている OpenLDAP モジュールを確認してみる。
yum list installed 'openldap*' コマンドを利用する。
[ec2-user ~]$ yum list installed 'openldap*' Loaded plugins: fastestmirror, priorities, security, update-motd Determining fastest mirrors * amzn-main: packages.eu-west-1.amazonaws.com * amzn-updates: packages.us-west-2.amazonaws.com amzn-main | 2.1 kB 00:00 amzn-main/primary_db | 1.8 MB 00:01 amzn-updates | 2.3 kB 00:00 amzn-updates/primary_db | 204 kB 00:00 Installed Packages openldap.x86_64 2.4.23-15.13.amzn1 installed
OpenLDAPモジュールはインストールされているが、サーバ及びクライアントモジュールは無いようだ。これらのモジュールをインストールする。
現在 ec2-user を使用しているが権限が無いため、管理者権限に切り替える。
[ec2-user ~]$ sudo su
次にモジュールインストールを yum install 'openldap-servers' 'openldap-clients' コマンドで行う。
[root ec2-user]$ yum install 'openldap-servers' 'openldap-clients' :::::::::::::::::::::::::::::: 中略 :::::::::::::::::::::::::::::::::::::::: ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: openldap-clients x86_64 2.4.23-15.13.amzn1 amzn-main 292 k openldap-servers x86_64 2.4.23-15.13.amzn1 amzn-main 2.2 M Installing for dependencies: libtool-ltdl x86_64 2.2.10-1.8.amzn1 amzn-main 32 k make x86_64 1:3.81-19.6.amzn1 amzn-main 480 k Transaction Summary ================================================================================ Install 4 Package(s) :::::::::::::::::::::::::::::: 中略 :::::::::::::::::::::::::::::::::::::::: Complete!
これで必要なモジュールのインストールは完了した。
OpenLDAP の初期設定
OpenLDAPの初期設定だが、最初どうやって設定するのかわからなかった。OpenLDAPの設定を説明している大抵のサイトでは、初期設定用のファイル(/etc/openldap/slpad.conf)があるので修正するという説明になっている。しかしモジュールをインストールしても、そのようなファイルは存在しない。
これには理由があって、 OpenLDAP2.3 以降 slapd.conf ファイルを使用しなくなったそうだ。
参考: takutism - Ubuntu10.10にOpenLDAPをインストールしてPHPのLDAP関数を使うまで
slapd.conf を使用しないで設定するには幾つか方法がある。今回は簡単な slaptest コマンドを使って、LDAPデータベースを書き換える方法で設定する。
- 1. 管理者パスワードの暗号化
-
まず、管理者用の暗号化パスワードを生成する。slappasswd コマンドを使ってパスワード文字列を入力すれば、文字列を暗号化してくれる。
[root ec2-user]$ slappasswd New password: Re-enter new password: {SSHA}JX5jkC48f4T0zkp2ucWx4fnqTO0QXH1f
- 2. 設定ファイルの用意
-
初期設定用のファイルを作成し、必要最低限の設定だけを記述する。ここではファイルを /etc/openldap/test.conf とする。
[root ec2-user]$ vim /etc/openldap/test.conf
include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args database monitor database bdb suffix "dc=Paper,dc=com" rootdn "cn=Manager,dc=Paper,dc=com" rootpw {SSHA}JX5jkC48f4T0zkp2ucWx4fnqTO0QXH1f directory /var/lib/ldap # ACL access to dn.base="" by * read access to dn.base="cn=Subschema" by * read access to * by self write by * read by anonymous auth
rootpw には先ほど slappasswd コマンドで暗号化したパスワードをセットする。
- 3. LDAPデータの削除とデータベース・ディレクトリ再作成
-
/etc/openldap ディレクトリに移動後、LDAPデータ・ディレクトリの削除を行う。さらに削除した slapd.d ディレクトリを再作成する。
[root ec2-user]$ cd /etc/openldap [root openldap]$ rm -rf slapd.d [root openldap]$ mkdir slapd.d
ついでに必須ではないが、後でエラーメッセージが表示されてしまうので、データベース設定ファイルを次のように /var/lib/ldap/DB_CONFIG にコピーしておく。
[root openldap]$ cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
DB-CONFIG.example ファイルは少し前のリリースと比べて、ディレクトリ位置が変わったようである。 - 4. 設定ファイルからLDAPデータを生成
-
slaptest コマンドを利用してLDAPデータを生成する。さらに LDAPで利用するディレクトリの所有者を変更する。
[root openldap]$ slaptest -f test.conf -F slapd.d
slaptest コマンドを実行すると若干メッセージが表示されるが、これは特に問題が無いようだ。
/etc/openldap/slapd.d と、test.conf の directory パラメータで指定したディレクトリ(ここでは /var/lib/ldap )の所有者を ldap ユーザに変更する。
[root openldap]$ chown -R ldap:ldap slapd.d [root openldap]$ chown -R ldap:ldap /var/lib/ldap
- 5. OpenLDAPサーバの起動と確認
-
OpenLDAPサーバを起動してみる。service slapd start コマンドを使用する。
[root openldap]$ service slapd start Starting slapd: [ OK ]
上手く起動できたようだ。一応動作を確認してみる。まず、service slapd status で確認する。
[root openldap]$ service slapd status slapd (pid 1587) is running...
次に ldapsearch コマンドで確認してみる。
[root openldap]$ ldapsearch -x -h localhost # extended LDIF # # LDAPv3 # base <> (default) with scope subtree # filter: (objectclass=*) # requesting: ALL # # search result search: 2 result: 32 No such object # numResponses: 1
OpenLDAPサーバが稼動していることを確認できた。 - 6. Amazon EC2インスタンスのポート設定の変更
-
最後の設定になったが、EC2インスタンスのポート設定を行う必要がある。これはインスタンスを作成時はデフォルトで22(SSH)しか有効になっていないからである。
まず AWS Management Console を開いて、インスタンスの Security Groups をチェックする。
次に Security Groups の設定画面を開いて、インスタンスが使用している Security Groups に LDAP(389)を追加する。
後は LDAPクライアントソフトで動作を確認してみれば良い。LDAPクライアントソフトはいろいろあるようだが、今回私は LDAP Browser を使ってみた。
参考: LDAP Browser 「LDAP Browser」と書いてあるタブをクリックしてからダウンロードする。
その他の設定
- EC2インスタンスのIP固定
EC2インスタンスは起動する度にIPアドレスと Public DNS(サーバ名) が変更になる。これは LDAPサーバとしては何かと面倒だ。多少のお金を払えば、IPアドレス固定にすることも可能だ。それが Elastic IPs という機能だ。これはインスタンスが立ち上がっていない時間辺り、0.01 ドル課金される(参考)。インスタンスが起動している場合は課金されない。
- OpenLDAPサーバの自動起動
EC2インスタンスが起動時に、自動的でOpenLDAPサーバを起動させるには次の設定を行う。
[root openldap]$ chkconfig slapd on
- OpenLDAPのログ記録
OpenLDAPのログを残すには、/etc/rsyslog.conf ファイルに次の記述を追加する。
local4.* /var/log/ldap
そして、 service rsyslog restart コマンドを実行すると /var/log/ldap ファイルが生成されて、OpenLDAPに関するログが記録されるようになる。
- LDAPへのサンプル登録
LDAPデータベースへ登録するサンプルデータを次に示す。
dn: dc=paper,dc=com objectClass: dcObject objectClass: organization o: myorganization dc: paper dn: cn=Manager,dc=paper,dc=com objectClass: organizationalRole cn: Manager dn: ou=People,dc=paper,dc=com objectClass: organizationalUnit ou: People dn: ou=Group,dc=paper,dc=com objectClass: organizationalUnit ou: Group
dn: cn=member01,ou=group,dc=paper,dc=com objectClass: posixGroup objectClass: top cn: member01 gidNumber:3001
dn: uid=user01,ou=People,dc=paper,dc=com uid: user01 cn: testuser01 objectClass: account objectClass: posixAccount objectClass: top userPassword: {SSHA}BDDZZA4TItriCBwxZx85RrZ2GxbpQ3IP loginShell: /bin/bash uidNumber: 5001 gidNumber: 3001 homeDirectory: /home/user01
ldapadd コマンドを利用して各ファイルをインポートする(例は init.ldif)。
[root openldap]$ ldapadd -x -D "cn=Manager,dc=Paper,dc=com" -W -f init.ldif Enter LDAP Password: adding new entry "dc=paper,dc=com" adding new entry "cn=Manager,dc=paper,dc=com" adding new entry "ou=People,dc=paper,dc=com" adding new entry "ou=Group,dc=paper,dc=com"
以上で記事は終了です。今回初めての事が多かったので、設定でいろいろ躓く部分がありましたが、何とか動かすことまでできました。また AWSは思っていた以上に使いやすいと、少し感動しました。最後に今回設定で利用した参考サイトを紹介します。
参考
システム奮闘記:その90 - OpenLDAPの設定入門 ・・・詳しい説明で、わかりやすいです。
ALLAN FEID - Central login management with OpenLDAP ・・・今回のOpenLDAP設定手順の参考にしました。
Life with IT - slapd.confの設定項目 ・・・slapd.confの設定項目の説明があります。