2011年11月29日火曜日

Amazon Web Service を使った OpenLDAPサーバ の設定

今回は Amazon Web ServiceAWS)を使用した、OpenLDAP サーバの設定を記事にします。

LDAP認証を試してみたいが、身近に環境が無い場合どうするだろうか?。余っているPCでもあれば、OpenLDAP for Windowsを入れて動かすことも可能だ。でも適当なPCが無いし、何とかならないか・・・と思ったら AWS を試しても良いのではないか。2010年11月から AWS には無償のお試しプランができたようだ。

初年度だけだが、750時間分インスタンスを立ち上げることができる。つまり一ヶ月丸々使える訳だ。これは試した方が良いだろう・・・という訳でAWS上で OpenLDAP を動かしてみます。ただ私自身はこういう基盤系の仕事が苦手で、LDAPも初めて、Linuxもあまり触ったことがありませんので、初心者向けの記事になります。

AWSの利用(SSH接続まで)

AWSを利用するにはまず、クレジットカードが必要だ。クレジットカードを用意して、次のサイトからAWSアカウントを作成する。

Amazon Web Service

これ以降、

  1. AWSアカウント作成
  2. Amazon Elastic Compute CloudAmazon EC2)インスタンス設定及び起動
  3. 起動インスタンスに 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の設定項目の説明があります。