はじめての DNS サーバ

会社や自宅内等の LAN でテストや検証をする場合に,IP アドレスでサーバへアクセスするよりも FQDN で指定でアクセスした方が便利な場合がよくあります.

必須ではないですが,例えば LDAP や証明書をあつかう場合等です.
また,オープンソースの Web アプリの場合でも IP アドレスではなくて FQDN を使用した例でチュートリアルが作成されている場合をよく見かけるので,とりあえず試したい場合でも,DNS サーバをあらかじめ立てておくと便利だと思います.

そこで,自宅内部のでのみ使用する DNS サーバを立ててみました.

環境

OS: CentOS 6.0

構成

  • DNS サーバに設定した FQDN の場合は問い合わせに対して,すぐに応答を返す.(権威 DNS サーバ)
  • DNS サーバに設定していない FQDN の問い合わせの場合は,DNS サーバを立てる前と同様に外へ問い合わせる.(キャッシュ DNS サーバ)
構成図(DNS サーバ導入後)

f:id:Hexa:20120304025100j:plain

インストール

下記の 2 つをインストールします.

# yum install bind bind-chroot
/etc/named.conf の編集
  # ACL を定義
  acl localnet {
          192.168.0.0/24;
          127.0.0.1;
  };
  
  # 共通設定
  options {
          # listen-on port 53 { 127.0.0.1; };
          # listen-on-v6 port 53 { ::1; };
          version         "unknown";
          # bind 設定用ディレクトリの指定
          directory       "/var/named";
          dump-file       "/var/named/data/cache_dump.db";
          statistics-file "/var/named/data/named_stats.txt";
          memstatistics-file "/var/named/data/named_mem_stats.txt";
          # 許可する問い合わせ元の IP Address または ACL 指定
          allow-query     { localnet; };
          # ACL で指定したネットワークからの問い合わせ時にキャッシュがあれば応答する
          allow-query-cache     { localnet; };
          # zone 転送
          allow-transfer { none; };
          # 再帰検索の受付可否
          recursion yes;
          # 内部ドメイン以外の名前解決先
          # ISP の DNS を指定してあるルータや ISP の DNS の IP Address の指定
          # これがないと直接、ルート DNS へ問い合わせに行ってしまう
          forwarders { 192.168.0.1; };
  };
  
  logging {
          channel default_debug {
                  file "data/named.run";
                  severity dynamic;
          };
  };
   
  view "internal" {
          # 問い合わせ元の IP アドレス またはネットワーク(下記では ACL のネットワークを指定)
          match-clients { localnet; };
          # 正引きゾーンの設定
          zone "hexa.diary" IN {
                  type master;
                  file "db.hexa.diary";
          };
          # 逆引きゾーンの設定
          zone "0.168.192.in-addr.arpa" IN {
                  type master;
                  file "db.192.168.0";
          };
          # 逆引きゾーンの設定
          zone "0.0.127.in-addr.arpa" IN {
                  type master;
                  file "db.127.0.0";
          };
          # ルートゾーンの設定
          zone "." IN {
                  type hint;
                  file "named.ca";
          };
  }; 
zone ファイル

/etc/named.conf で指定したファイルを /var/named/chroot/var/named/ 以下に作成します.

  • db.hexa.diary
  ; TTL の指定
  $TTL 1h
  @       IN      SOA     ns1.hexa.diary. hexa.diary.gmail.com. (
                                          1       ; シリアル番号
                                          3h      ; リフレッシュ時間
                                          1h      ; リトライ時間
                                          1w      ; 期限
                                          1h )    ; ネガティブキャッシュの TTL
  ; ネームサーバ
                  IN      NS      ns1.hexa.diary.
  
  ; アドレスとの対応の指定
  localhost.hexa.diary.   IN      A       127.0.0.1
  ns1.hexa.diary.         IN      A       192.168.0.5
  ns2.hexa.diary.         IN      A       192.168.0.4
  test.hexa.diary.        IN      A       192.168.0.3

  ; 別名から正規名の対応
  name1.hexa.diary.       IN      CNAME   ns1.hexa.diary.
  a.hexa.diary.           IN      CNAME   test.hexa.diary.
  • db.192.168.0
  $TTL 3h
  0.168.192.in-addr.arpa.         IN      SOA     ns1.hexa.diary. hexa.diary.gmail.com (
                                          1 
                                          3h
                                          1h
                                          1w
                                          1h )
   
  0.168.192.in-addr.arpa.         IN      NS      ns1.hexa.diary.
   
  5                             IN      PTR     ns1.hexa.diary.
  4                             IN      PTR     ns2.hexa.diary.
  3                             IN      PTR     test.hexa.diary.
  • db.127.0.0
  $TTL 3h
  0.0.127.in-addr.arpa.           IN      SOA     ns1.hexa.diary. hexa.diary.gmail.com. (
                                                  1
                                                  3h
                                                  1h
                                                  1w
                                                  1h )
  
  0.0.127.in-addr.arpa.           IN      NS      ns1.hexa.diary.
  
  1.0.0.127.in-addr.arpa.         IN      PTR     localhost.

/etc/resolv.conf の編集

/etc/resolv.conf を編集して,今構築している DNS サーバに問い合わせるように IP アドレスを変更します.

nameserver 192.168.0.5

確認

dig を使って確認してみます.

正引き

$ dig ns1.hexa.diary ns2.hexa.diary a IN

; <<>> DiG 9.6-ESV-R4-P3 <<>> ns1.hexa.diary ns2.hexa.diary a IN
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49924
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;ns1.hexa.diary.                        IN      A

;; ANSWER SECTION:
ns1.hexa.diary.         3600    IN      A       192.168.0.5

;; AUTHORITY SECTION:
hexa.diary.             3600    IN      NS      ns1.hexa.diary.

;; Query time: 11 msec
;; SERVER: 192.168.0.5#53(192.168.0.5)
;; WHEN: Thu Mar  1 01:20:23 2012
;; MSG SIZE  rcvd: 62

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39468
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;ns2.hexa.diary.                        IN      A

;; ANSWER SECTION:
ns2.hexa.diary.         3600    IN      A       192.168.0.4

;; AUTHORITY SECTION:
hexa.diary.             3600    IN      NS      ns1.hexa.diary.

;; ADDITIONAL SECTION:
ns1.hexa.diary.         3600    IN      A       192.168.0.5

;; Query time: 0 msec
;; SERVER: 192.168.0.5#53(192.168.0.5)
;; WHEN: Thu Mar  1 01:20:23 2012
;; MSG SIZE  rcvd: 82

逆引き

$ dig -x 192.168.0.4

; <<>> DiG 9.6-ESV-R4-P3 <<>> -x 192.168.0.4
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14957
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;4.0.168.192.in-addr.arpa.    IN      PTR

;; ANSWER SECTION:
4.0.168.192.in-addr.arpa. 10800 IN    PTR     ns2.hexa.diary.

;; AUTHORITY SECTION:
0.168.192.in-addr.arpa. 10800   IN      NS      ns1.hexa.diary.

;; ADDITIONAL SECTION:
ns1.hexa.diary.         3600    IN      A       192.168.0.5

;; Query time: 13 msec
;; SERVER: 192.168.0.5#53(192.168.0.5)
;; WHEN: Thu Mar  1 01:24:49 2012
;; MSG SIZE  rcvd: 106

CNAME

$ dig ns1.hexa.diary name1.hexa.diary a IN

; <<>> DiG 9.6-ESV-R4-P3 <<>> ns1.hexa.diary name1.hexa.diary a IN
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45116
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;ns1.hexa.diary.                        IN      A

;; ANSWER SECTION:
ns1.hexa.diary.         3600    IN      A       192.168.0.5

;; AUTHORITY SECTION:
hexa.diary.             3600    IN      NS      ns1.hexa.diary.

;; Query time: 11 msec
;; SERVER: 192.168.0.5#53(192.168.0.5)
;; WHEN: Sun Mar  4 03:02:57 2012
;; MSG SIZE  rcvd: 62

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27833
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;name1.hexa.diary.              IN      A

;; ANSWER SECTION:
name1.hexa.diary.       3600    IN      CNAME   ns1.hexa.diary.
ns1.hexa.diary.         3600    IN      A       192.168.0.5

;; AUTHORITY SECTION:
hexa.diary.             3600    IN      NS      ns1.hexa.diary.

;; Query time: 0 msec
;; SERVER: 192.168.0.5#53(192.168.0.5)
;; WHEN: Sun Mar  4 03:02:57 2012
;; MSG SIZE  rcvd: 82

設定できているようです.

スクリプトによるアラートの通知

Zabbix は,障害が起きた場合などに,メールや Jabber, SMS で通知することが可能です.
また,自分で作成したスクリプトを実行させて,他の通知方法を利用することも可能です.

個人的には,(見逃しても問題がないことが多いため)Growl で通知されると嬉しいので,試しに設定してみました.

手順

/etc/zabbix/alertscripts/ 以下にメッセージを送信するスクリプトを設置しておきます.
スクリプトには zabbix が実行できる権限を設定しておきます.

メディアタイプの作成
  1. [管理] - [メディアタイプ] で [メディアタイプの作成] をクリック
  2. [説明] を適当に入力
  3. [タイプ] に [スクリプト] を選択
  4. [スクリプト名] を入力
    • /etc/zabbix/alertscripts/ 以下に配置したスクリプトのファイル名を入力します
  5. [保存] をクリック

f:id:Hexa:20120205020256p:plain

ユーザへメディアタイプを設定
  1. [管理] - [ユーザ] からメディアタイプを設定する [メンバー] のリンクをクリック
  2. [メディア] の [追加] をクリックして,[新規メディア] を追加
    1. [タイプ] に メディアタイプの作成 で入力した [説明] を選択
    2. 送信先を適当に入力
    3. [追加] をクリック
  3. [保存] をクリック

f:id:Hexa:20120205020534p:plain

アクションの設定
  1. [設定] - [アクション] で [アクションの作成] をクリック
  2. [名前] を適当に入力
  3. アクションのコンディション
  4. [アクションのオペレーション] の [新規] をクリック
    1. [オペレーションのタイプ] は [メッセージの送信] を選択
    2. [メッセージの送信先] は [シングルユーザ] と,ユーザへメディアタイプを設定 で設定した [メンバー] を選択
    3. [次のメディアのみ使用] は [- 全て -] を選択
    4. [追加] をクリック
  5. [保存] をクリック

f:id:Hexa:20120205015826p:plain

監視対象のサーバで ifdown させたりして,障害を意図的に発生させて確認します.

f:id:Hexa:20120205015753p:plain

スクリーンを使用してグラフを複数枚表示させる

前回の [zabbix] グラフの設定 - Hexa's diary でふれなかった, 複数のグラフを 1 ページに表示させる方法 です.

手順

あらかじめ,前回と同様の手順で,複数の グラフ を作成しておきます.

スクリーンの作成
  1. [設定] - [スクリーン] で [スクリーンの作成] をクリック
  2. [名前] を適当に入力
  3. [列] と [行] を入力
    1. [列] は横に並べるグラフの枚数 (今回は 2 を指定)
    2. [行] は縦に並べるグラフの枚数 (今回は 1 を指定)
      • グラフ以外も並べることが可能です
    3. [保存] をクリック

f:id:Hexa:20120204123646p:plain

スクリーンの設定
  1. [設定] - [スクリーン] で上記で作成したスクリーンの 名前 のリンクをクリック
    • スクリーンの作成 の直後であれば,既に [設定] - [スクリーン] のページ遷移しているはずです
  2. [変更] のリンクが 2 つあるので,左の [変更] をクリック
    1. [リソース] に [グラフ] を選択
    2. [グラフ名] に作成済みのグラフを選択
    3. 他は適当に設定
    4. [保存をクリック]
    • 左側にグラフが表示されます
  3. もう一つの方の [変更] のリンクをクリックして,上記と同様の手順でグラフを設定
    • 上記とは別のグラフを設定します

f:id:Hexa:20120204124115p:plain

これで 2 枚のグラフが横並びに表示されます.

f:id:Hexa:20120204123601p:plain

設定したスクリーンのグラフは,[監視データ] - [スクリーン] で確認できます.

f:id:Hexa:20120204123539p:plain

グラフの設定

zabbix-server を用いると,[監視データ] - [最新データ] から,設定したアイテムのグラフを確認することが可能です.
しかし,ここで表示されるグラフは 1 アイテムにつき 1 つのグラフだけです.
例えば,比較したい項目が複数ある場合などには,同一のグラフ上に 2 つのデータをプロットしたり,複数のグラフを 1 ページに表示させて観察する方が便利です.

今回は,前者の同一のグラフ上に 2 つのデータをプロットする方法を書きます.

下記の 2 つのアイテムのグラフ表示の設定をおこないます.

  • 「Incoming traffic on interface eth0」
  • 「Incoming traffic on interface lo」

手順

  1. [設定] - [ホスト] で設定したいホストの [グラフ] のリンクをクリック
  2. [グラフの作成] をクリック
  3. [名前] を適当に入力
  4. [アイテム] をクリックして,グラフに追加するアイテムを設定
    1. [パラメータ] でアイテムを指定
    2. 他は適当に設定
    3. [追加] をクリック
  5. 同じグラフ上にプロットさせたい [アイテム] をクリックして,上記と同様の手順でグラフに追加するアイテムを設定
    1. 重なると見えにくいので [色] は変更しましょう
  6. [保存] をクリック

f:id:Hexa:20120204013500p:plain

グラフの表示

[監視データ] - [グラフ] で上記の手順で設定したグラフが表示されます.

  • Incoming traffic on interface eth0: 緑
  • Incoming traffic on interface lo: 青


f:id:Hexa:20120204013434p:plain
f:id:Hexa:20120204013516p:plain

証明書を格納してみる

LDAP サーバには証明書を格納できます.

格納の方法(LDIF ファイルの書き方)が少し特殊なので書いておきます.

core.shema

core.schema を眺めてみると,それらしい属性がいくつか見つかります.

  • userCertificate
  • cACertificate
  • authorityRevocationList
  • certificateRevocationList
  • crossCertificatePair

偶然,クライアント証明書が手元にあったので,この証明書を userCertificate に指定してみます.

格納するクライアント証明書

今回使用するクライアント証明書です.

-----BEGIN CERTIFICATE-----
MIIDXzCCAkegAwIBAgIFAJ+xmTcwDQYJKoZIhvcNAQEFBQAwGTEXMBUGA1UEAwwO
Y2EuZXhhbXBsZS5jb20wHhcNMTIwMTMwMTUwMDAwWhcNMTMwMTMwMTUwMDAwWjAh
MR8wHQYDVQQDDBZoZXhhLmRpYXJ5QGV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAqeo9n9jvwvZqdQiek7MwOg3YO2Ft28/vjTDD4UvD
JeGD2oOVg3C5Pg9EqHtC+HebxpYabJNRIcx3gcH/Ykooy/xaVvK2aQq+zwcZuvgU
RYRtdpmGx6otbA+LShVK0rolRYkH4MWEpN7SUrxNGUR41kYX+jbDUpp97Yp38z6h
o6thal+4hm0GvIc3a9NMBYog2aFpNuCDJCeQaLcqNRYOI9v7IXxbNolM5tmCMNTs
zIFwz8d1UZQREouSG6536joBrug/CbBhH/TthpWpVy6UrUk8MC6G/XbwMhIlafY/
uJ6Y8qkplugJiKLiaBp0NcdM2Mc+igGmDkr4b8VWlws3dwIDAQAfo4GlMIGiMAwG
A1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUW+hePyMFM8Hpn/SIi93Fs4NfPikwHQYD
VR0OBBYEFMdf5OBoGg9TxSrnfvObmjg3k8txMB0GA1UdJQQWMBQGCCsGAQUFBwMB
BggrBgEFBQcDAjAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vZXhhbXBsZS5jb20v
Y3JsL2V4YW1wbGUuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQAyWCvNP/k1UYuoZ49d
JwlURKm6g59+6bqeUdv7EkaSgjTol0mvY7UwwHzztZsnapmGin36bWURaNZs+xrZ
7Xn/OWHB3grmKxF/eXowlmtF0EzS0Xg5n6s48n0deMkPIy8GUxD/KpQqUV+GYt5V
XdSEKdH0ovLkzoiqtISN7C49VRRm6F9MIFoFnJQMQUU3XCN0djrEuNiPZ/op4zJ1
1/Ft5UdYDB7TIWXI1+sJy1yrRWg31dRj0ThiNxBTL9zR9rHCCMLDJAZODLl6jRhg
lSyVF995MJRNui7qlJksHpDOM85H67SthInq18Jc67lyrKyJPAXuQON20ftq86Y7
ygvo
-----END CERTIFICATE-----

テキストだとこんな感じです.

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 2679216439 (0x9fb19937)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: CN=ca.example.com
        Validity
            Not Before: Jan 30 15:00:00 2012 GMT
            Not After : Jan 30 15:00:00 2013 GMT
        Subject: CN=hexa.diary@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:a9:ea:3d:9f:d8:ef:c2:f6:6a:75:08:9e:93:b3:
                    30:3a:0d:d8:3b:61:6d:db:cf:ef:8d:30:c3:e1:4b:
                    c3:25:e1:83:da:83:95:83:70:b9:3e:0f:44:a8:7b:
                    42:f8:77:9b:c6:96:1a:6c:93:51:21:cc:77:81:c1:
                    ff:62:4a:28:cb:fc:5a:56:f2:b6:69:0a:be:cf:07:
                    19:ba:f8:14:45:84:6d:76:99:86:c7:aa:2d:6c:0f:
                    8b:4a:15:4a:d2:ba:25:45:89:07:e0:c5:84:a4:de:
                    d2:52:bc:4d:19:44:78:d6:46:17:fa:36:c3:52:9a:
                    7d:ed:8a:77:f3:3e:a1:a3:ab:61:6a:5f:b8:86:6d:
                    06:bc:87:37:6b:d3:4c:05:8a:20:d9:a1:69:36:e0:
                    83:24:27:90:68:b7:2a:35:16:0e:23:db:fb:21:7c:
                    5b:36:89:4c:e6:d9:82:30:d4:ec:cc:81:70:cf:c7:
                    75:51:94:11:12:8b:92:1b:ae:77:ea:3a:01:ae:e8:
                    3f:09:b0:61:1f:f4:ed:86:95:a9:57:2e:94:ad:49:
                    3c:30:2e:86:fd:76:f0:32:12:25:69:f6:3f:b8:9e:
                    98:f2:a9:29:96:e8:09:88:a2:e2:68:1a:74:35:c7:
                    4c:d8:c7:3e:8a:01:a6:0e:4a:f8:6f:c5:56:97:0b:
                    37:77
                Exponent: 65567 (0x1001f)
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Authority Key Identifier: 
                keyid:5B:E8:5E:3F:23:05:33:C1:E9:9F:F4:88:8B:DD:C5:B3:83:5F:3E:29

            X509v3 Subject Key Identifier: 
                C7:5F:E4:E0:68:1A:0F:53:C5:2A:E7:7E:F3:9B:9A:38:37:93:CB:71
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 CRL Distribution Points: 

                Full Name:
                  URI:http://example.com/crl/example.crl

    Signature Algorithm: sha1WithRSAEncryption
        32:58:2b:cd:3f:f9:35:51:8b:a8:67:8f:5d:27:09:54:44:a9:
        ba:83:9f:7e:e9:ba:9e:51:db:fb:12:46:92:82:34:e8:97:49:
        af:63:b5:30:c0:7c:f3:b5:9b:27:6a:99:86:8a:7d:fa:6d:65:
        11:68:d6:6c:fb:1a:d9:ed:79:ff:39:61:c1:de:0a:e6:2b:11:
        7f:79:7a:30:96:6b:45:d0:4c:d2:d1:78:39:9f:ab:38:f2:7d:
        1d:78:c9:0f:23:2f:06:53:10:ff:2a:94:2a:51:5f:86:62:de:
        55:5d:d4:84:29:d1:f4:a2:f2:e4:ce:88:aa:b4:84:8d:ec:2e:
        3d:55:14:66:e8:5f:4c:20:5a:05:9c:94:0c:41:45:37:5c:23:
        74:76:3a:c4:b8:d8:8f:67:fa:29:e3:32:75:d7:f1:6d:e5:47:
        58:0c:1e:d3:21:65:c8:d7:eb:09:cb:5c:ab:45:68:37:d5:d4:
        63:d1:38:62:37:10:53:2f:dc:d1:f6:b1:c2:08:c2:c3:24:06:
        4e:0c:b9:7a:8d:18:60:95:2c:95:17:df:79:30:94:4d:ba:2e:
        ea:94:99:2c:1e:90:ce:33:ce:47:eb:b4:ad:84:89:ea:d7:c2:
        5c:eb:b9:72:ac:ac:89:3c:05:ee:40:e3:76:d1:fb:6a:f3:a6:
        3b:ca:0b:e8


証明書は PEM 形式から,DER 形式に変換しておきます.

OpenSSL を使用する場合は,下記のようにして変換します.

# openssl x509 -inform PEM -outform DER -in client.pem -out client.der

LDIF ファイル

inetOrgPerson オブジェクトクラスを使用します.
必須の属性は cn と sn です.
必須属性が必要なのは,基底オブジェクトクラス(の基底オブジェクトクラス)が Person オブジェクトクラスだからです.

LDIF ファイルには,userCertificate にクライアント証明書のファイルを指定します.また,userCertificate: ではなく,userCertificate;binary: と記載します.

dn: cn=hexa.diary@example.com,dc=ldap,dc=example,dc=com
objectclass: inetOrgPerson
cn: hexa.diary@example.com
sn: sn
userCertificate;binary:< file:///root/client.der

cn, sn は適当に指定してます.

追加と確認

ldapadd

エントリを追加します.

# ldapadd -x -H ldaps://ldap.example.com -D 'cn=Manager,dc=ldap,dc=example,dc=com' -W -f hexa.diary.ldif 
Enter LDAP Password: 
adding new entry "cn=hexa.diary@example.com,dc=ldap,dc=example,dc=com"
ldapsearch

ldapsearch で確認してみます.

# ldapsearch -x -H ldaps://ldap.example.com -D 'cn=Manager,dc=ldap,dc=example,dc=com' -W -b 'dc=ldap,dc=example,dc=com' '(cn=hexa.diary@example.com)'
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <dc=ldap,dc=example,dc=com> with scope subtree
# filter: (cn=hexa.diary@example.com)
# requesting: ALL
#

# hexa.diary@example.com, ldap.example.com
dn: cn=hexa.diary@example.com,dc=ldap,dc=example,dc=com
objectClass: inetOrgPerson
cn: hexa.diary@example.com
sn: sn
userCertificate;binary:: MIIDXzCCAkegAwIBAgIFAJ+xmTcwDQYJKoZIhvcNAQEFBQAwGTEXM
 BUGA1UEAwwOY2EuZXhhbXBsZS5jb20wHhcNMTIwMTMwMTUwMDAwWhcNMTMwMTMwMTUwMDAwWjAhMR
 8wHQYDVQQDDBZoZXhhLmRpYXJ5QGV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMII
 BCgKCAQEAqeo9n9jvwvZqdQiek7MwOg3YO2Ft28/vjTDD4UvDJeGD2oOVg3C5Pg9EqHtC+HebxpYa
 bJNRIcx3gcH/Ykooy/xaVvK2aQq+zwcZuvgURYRtdpmGx6otbA+LShVK0rolRYkH4MWEpN7SUrxNG
 UR41kYX+jbDUpp97Yp38z6ho6thal+4hm0GvIc3a9NMBYog2aFpNuCDJCeQaLcqNRYOI9v7IXxbNo
 lM5tmCMNTszIFwz8d1UZQREouSG6536joBrug/CbBhH/TthpWpVy6UrUk8MC6G/XbwMhIlafY/uJ6
 Y8qkplugJiKLiaBp0NcdM2Mc+igGmDkr4b8VWlws3dwIDAQAfo4GlMIGiMAwGA1UdEwEB/wQCMAAw
 HwYDVR0jBBgwFoAUW+hePyMFM8Hpn/SIi93Fs4NfPikwHQYDVR0OBBYEFMdf5OBoGg9TxSrnfvObm
 jg3k8txMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAzBgNVHR8ELDAqMCigJqAkhiJodH
 RwOi8vZXhhbXBsZS5jb20vY3JsL2V4YW1wbGUuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQAyWCvNP/k
 1UYuoZ49dJwlURKm6g59+6bqeUdv7EkaSgjTol0mvY7UwwHzztZsnapmGin36bWURaNZs+xrZ7Xn/
 OWHB3grmKxF/eXowlmtF0EzS0Xg5n6s48n0deMkPIy8GUxD/KpQqUV+GYt5VXdSEKdH0ovLkzoiqt
 ISN7C49VRRm6F9MIFoFnJQMQUU3XCN0djrEuNiPZ/op4zJ11/Ft5UdYDB7TIWXI1+sJy1yrRWg31d
 Rj0ThiNxBTL9zR9rHCCMLDJAZODLl6jRhglSyVF995MJRNui7qlJksHpDOM85H67SthInq18Jc67l
 yrKyJPAXuQON20ftq86Y7ygvo

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

無事に追加されているようです.

userCertificate の確認

ついでなので,userCertificate;binary:: の内容を確認してみます.

userCertificate;binary:: の内容を client.crt ファイルに保存して,下記を実行して確認します.

$ ruby -r openssl -r base64 -e "puts OpenSSL::X509::Certificate.new(Base64::decode64(File.read('client.crt'))).to_text"
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 2679216439 (0x9fb19937)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: CN=ca.example.com
        Validity
            Not Before: Jan 30 15:00:00 2012 GMT
            Not After : Jan 30 15:00:00 2013 GMT
        Subject: CN=hexa.diary@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:a9:ea:3d:9f:d8:ef:c2:f6:6a:75:08:9e:93:b3:
                    30:3a:0d:d8:3b:61:6d:db:cf:ef:8d:30:c3:e1:4b:
                    c3:25:e1:83:da:83:95:83:70:b9:3e:0f:44:a8:7b:
                    42:f8:77:9b:c6:96:1a:6c:93:51:21:cc:77:81:c1:
                    ff:62:4a:28:cb:fc:5a:56:f2:b6:69:0a:be:cf:07:
                    19:ba:f8:14:45:84:6d:76:99:86:c7:aa:2d:6c:0f:
                    8b:4a:15:4a:d2:ba:25:45:89:07:e0:c5:84:a4:de:
                    d2:52:bc:4d:19:44:78:d6:46:17:fa:36:c3:52:9a:
                    7d:ed:8a:77:f3:3e:a1:a3:ab:61:6a:5f:b8:86:6d:
                    06:bc:87:37:6b:d3:4c:05:8a:20:d9:a1:69:36:e0:
                    83:24:27:90:68:b7:2a:35:16:0e:23:db:fb:21:7c:
                    5b:36:89:4c:e6:d9:82:30:d4:ec:cc:81:70:cf:c7:
                    75:51:94:11:12:8b:92:1b:ae:77:ea:3a:01:ae:e8:
                    3f:09:b0:61:1f:f4:ed:86:95:a9:57:2e:94:ad:49:
                    3c:30:2e:86:fd:76:f0:32:12:25:69:f6:3f:b8:9e:
                    98:f2:a9:29:96:e8:09:88:a2:e2:68:1a:74:35:c7:
                    4c:d8:c7:3e:8a:01:a6:0e:4a:f8:6f:c5:56:97:0b:
                    37:77
                Exponent: 65567 (0x1001f)
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Authority Key Identifier: 
                keyid:5B:E8:5E:3F:23:05:33:C1:E9:9F:F4:88:8B:DD:C5:B3:83:5F:3E:29

            X509v3 Subject Key Identifier: 
                C7:5F:E4:E0:68:1A:0F:53:C5:2A:E7:7E:F3:9B:9A:38:37:93:CB:71
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 CRL Distribution Points: 

                Full Name:
                  URI:http://example.com/crl/example.crl

    Signature Algorithm: sha1WithRSAEncryption
        32:58:2b:cd:3f:f9:35:51:8b:a8:67:8f:5d:27:09:54:44:a9:
        ba:83:9f:7e:e9:ba:9e:51:db:fb:12:46:92:82:34:e8:97:49:
        af:63:b5:30:c0:7c:f3:b5:9b:27:6a:99:86:8a:7d:fa:6d:65:
        11:68:d6:6c:fb:1a:d9:ed:79:ff:39:61:c1:de:0a:e6:2b:11:
        7f:79:7a:30:96:6b:45:d0:4c:d2:d1:78:39:9f:ab:38:f2:7d:
        1d:78:c9:0f:23:2f:06:53:10:ff:2a:94:2a:51:5f:86:62:de:
        55:5d:d4:84:29:d1:f4:a2:f2:e4:ce:88:aa:b4:84:8d:ec:2e:
        3d:55:14:66:e8:5f:4c:20:5a:05:9c:94:0c:41:45:37:5c:23:
        74:76:3a:c4:b8:d8:8f:67:fa:29:e3:32:75:d7:f1:6d:e5:47:
        58:0c:1e:d3:21:65:c8:d7:eb:09:cb:5c:ab:45:68:37:d5:d4:
        63:d1:38:62:37:10:53:2f:dc:d1:f6:b1:c2:08:c2:c3:24:06:
        4e:0c:b9:7a:8d:18:60:95:2c:95:17:df:79:30:94:4d:ba:2e:
        ea:94:99:2c:1e:90:ce:33:ce:47:eb:b4:ad:84:89:ea:d7:c2:
        5c:eb:b9:72:ac:ac:89:3c:05:ee:40:e3:76:d1:fb:6a:f3:a6:
        3b:ca:0b:e8

確かに,LDIF ファイルで指定したクライアント証明書であることが確認できました.

TLS の設定

設定自体は簡単ですが,すぐに忘れるので書いておきます.

TLS 用の証明書の作成

CA 証明書とサーバ証明書を適当に作ります.

$ ./publish_certiticate.rb
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: CN=ca.example.com
        Validity
            Not Before: Jan 30 15:00:00 2012 GMT
            Not After : Jan 30 15:00:00 2014 GMT
        Subject: CN=ca.example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:b6:de:f7:87:72:36:95:49:28:30:52:a3:9f:e4:
                    1f:36:1d:96:a7:70:62:a6:72:43:6a:05:43:1c:dd:
                    bb:93:83:6e:6e:29:a8:c0:f4:8f:fa:ad:4b:89:e7:
                    f0:80:c6:fc:6c:b8:b1:a1:03:93:8b:03:a6:d6:2b:
                    e4:16:e3:c4:29:db:8c:dc:d2:ed:e4:17:08:22:36:
                    26:39:75:06:36:1e:d1:7e:c5:db:de:7b:b0:82:9e:
                    88:38:ca:d3:18:1e:91:2a:47:4c:31:6e:43:08:78:
                    6a:27:36:67:d8:9b:cc:0f:7c:93:05:d3:8c:a2:0d:
                    e6:20:04:20:ef:0b:4d:58:22:00:12:81:97:da:22:
                    12:d2:d2:fa:64:75:7e:51:67:df:fb:40:59:76:75:
                    15:05:e1:73:1c:59:ef:02:f9:00:bf:d8:5d:92:b4:
                    f9:a5:34:1e:82:cf:d7:a0:51:4f:f8:71:90:af:e3:
                    9c:0f:53:bd:68:5d:db:dd:c5:6b:15:a4:36:f4:a1:
                    8f:38:1c:42:1d:77:b5:aa:f3:fb:db:64:e8:18:d3:
                    35:6d:2f:ad:3a:9a:d3:17:4d:e1:00:6a:bf:f6:c0:
                    34:d3:0b:d0:01:83:72:f7:84:6d:45:06:13:eb:85:
                    fc:a4:7b:52:0a:c6:07:22:99:34:0d:65:f8:a2:86:
                    1d:2b
                Exponent: 65567 (0x1001f)
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Key Usage: 
                Certificate Sign, CRL Sign
    Signature Algorithm: sha1WithRSAEncryption
        11:fa:48:22:1a:13:64:a9:0b:a4:10:82:2e:e8:e3:f0:a4:37:
        ba:14:bd:ba:4a:6c:e3:16:ed:12:94:c0:37:f1:57:eb:1a:fe:
        ea:8f:6a:ec:ed:5c:0d:30:6f:8c:e8:85:8b:d4:be:81:70:bf:
        e2:87:b9:e8:e2:2c:59:ef:d3:87:e8:dd:77:c6:38:a9:cb:dd:
        1d:e4:cf:08:1b:df:1c:0f:a9:4a:e0:0a:fc:c9:0d:b2:a3:f8:
        46:c1:cd:7e:bc:1b:da:67:09:9a:30:7c:fa:c5:08:39:23:49:
        e6:78:b3:75:12:9f:94:ab:82:a0:2f:66:6d:d8:0f:77:f5:b8:
        6d:5f:3f:4a:f0:f8:0c:cb:dc:f5:2d:da:d5:19:80:82:7b:42:
        66:c5:01:4a:0f:41:06:3d:6b:24:79:c1:c1:66:09:89:c8:eb:
        46:e2:a1:f0:2e:4e:99:cd:17:e4:70:fe:69:eb:bc:77:be:e7:
        d0:8e:53:93:ca:04:11:63:c7:6f:55:4f:60:75:5c:e1:72:53:
        fd:24:46:0f:af:bb:5d:68:dd:fb:13:69:91:32:41:c9:f1:71:
        c9:82:48:1d:9d:dd:5b:16:7f:4a:39:f0:a2:db:0a:dd:8f:01:
        c6:ae:89:c7:b4:c9:28:5f:48:5f:b1:f4:cc:d9:0d:97:2d:3f:
        92:27:7e:6e
Certificate Request:
    Data:
        Version: 1 (0x1)
        Subject: CN=ldap.example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:9f:16:fc:a5:82:82:9f:5f:92:f7:66:f8:60:16:
                    d6:a2:11:ae:02:8a:27:b7:0c:58:9a:4a:1d:fb:7e:
                    8b:21:20:88:55:7a:33:57:da:24:ef:88:10:36:f8:
                    12:46:0d:26:85:be:e1:5f:ff:39:28:b7:91:24:4b:
                    f4:bf:51:ff:82:f0:5a:49:5a:3c:d1:ec:bc:ef:82:
                    00:1b:48:8a:41:93:d6:6e:00:ed:f9:c5:4d:8f:1c:
                    fe:2c:09:a7:d4:8b:8c:f6:b9:61:6d:1e:64:69:5b:
                    0c:f0:00:69:02:30:19:09:62:78:cc:62:aa:0d:ba:
                    d5:15:0f:62:01:f7:1e:12:3a:78:aa:a7:96:3a:9b:
                    3f:cc:8a:f0:49:d5:08:d7:04:ce:49:81:6d:f9:c1:
                    96:9a:0f:25:40:b2:f8:b6:61:59:a5:f1:6e:3f:6a:
                    26:82:b8:fd:e3:e0:1e:ba:3a:ab:bd:a7:56:e5:af:
                    f5:f7:ad:6b:30:aa:9c:40:b4:7a:56:b6:99:2a:0e:
                    48:b0:c5:da:42:fc:d1:e6:6d:28:a8:63:02:81:1e:
                    f3:0e:07:88:fc:6d:d6:fd:2a:14:ea:2a:3e:52:6a:
                    7a:19:e4:29:71:02:d9:12:dc:0f:d6:60:ef:00:be:
                    a1:9a:8b:3e:f7:7b:1a:eb:a8:d9:d8:81:99:ac:86:
                    bb:2b
                Exponent: 65567 (0x1001f)
        Attributes:
            a0:00
    Signature Algorithm: sha1WithRSAEncryption
        91:82:3a:8e:12:c0:b4:51:6c:85:f3:cc:73:a1:40:8b:e4:27:
        96:8b:e4:9d:73:e0:a8:e1:a8:85:25:72:90:37:43:67:13:62:
        94:ca:99:4d:ee:9e:f0:18:0e:34:b9:32:a2:93:10:15:50:62:
        3e:3a:92:52:c2:be:30:c4:50:88:2a:32:38:67:f2:90:d2:d2:
        73:fa:4c:95:16:e7:38:47:7d:ee:40:99:84:a3:df:a6:b1:8f:
        ac:5a:c7:ad:81:c3:c5:0b:86:e7:47:d5:eb:fa:cf:8b:b0:2f:
        58:fa:44:7f:e3:38:1b:7f:01:e7:f6:e2:7c:28:01:d3:50:d2:
        4a:00:4e:39:f6:7f:2f:e6:c2:e9:9c:de:87:30:b5:97:ca:80:
        b9:a3:c2:89:05:77:5e:77:1f:47:05:d3:26:90:9a:e7:df:f4:
        46:1b:78:1f:ee:d5:da:07:ce:d3:0d:0b:33:f4:70:45:9d:34:
        b8:bc:e1:95:c8:c6:19:46:eb:5f:6d:85:f6:59:fb:ef:51:ba:
        a8:ed:f6:5d:b6:94:ad:11:71:ff:ff:1e:f8:60:44:71:9b:a3:
        63:9d:e7:86:30:07:6e:10:e5:ab:0d:50:70:d1:4a:82:0e:54:
        b3:f0:4b:b4:49:2b:32:2c:ac:39:c2:8b:b1:3d:02:0f:43:be:
        d1:c6:61:f5
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            05:e2:e6:a4:cd:09:ea:54:d6:65:b0:75:fe:22:a2:56
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: CN=ca.example.com
        Validity
            Not Before: Jan 30 15:00:00 2012 GMT
            Not After : Jan 30 15:00:00 2013 GMT
        Subject: CN=ldap.example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:9f:16:fc:a5:82:82:9f:5f:92:f7:66:f8:60:16:
                    d6:a2:11:ae:02:8a:27:b7:0c:58:9a:4a:1d:fb:7e:
                    8b:21:20:88:55:7a:33:57:da:24:ef:88:10:36:f8:
                    12:46:0d:26:85:be:e1:5f:ff:39:28:b7:91:24:4b:
                    f4:bf:51:ff:82:f0:5a:49:5a:3c:d1:ec:bc:ef:82:
                    00:1b:48:8a:41:93:d6:6e:00:ed:f9:c5:4d:8f:1c:
                    fe:2c:09:a7:d4:8b:8c:f6:b9:61:6d:1e:64:69:5b:
                    0c:f0:00:69:02:30:19:09:62:78:cc:62:aa:0d:ba:
                    d5:15:0f:62:01:f7:1e:12:3a:78:aa:a7:96:3a:9b:
                    3f:cc:8a:f0:49:d5:08:d7:04:ce:49:81:6d:f9:c1:
                    96:9a:0f:25:40:b2:f8:b6:61:59:a5:f1:6e:3f:6a:
                    26:82:b8:fd:e3:e0:1e:ba:3a:ab:bd:a7:56:e5:af:
                    f5:f7:ad:6b:30:aa:9c:40:b4:7a:56:b6:99:2a:0e:
                    48:b0:c5:da:42:fc:d1:e6:6d:28:a8:63:02:81:1e:
                    f3:0e:07:88:fc:6d:d6:fd:2a:14:ea:2a:3e:52:6a:
                    7a:19:e4:29:71:02:d9:12:dc:0f:d6:60:ef:00:be:
                    a1:9a:8b:3e:f7:7b:1a:eb:a8:d9:d8:81:99:ac:86:
                    bb:2b
                Exponent: 65567 (0x1001f)
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Authority Key Identifier: 
                keyid:5B:E8:5E:3F:23:05:33:C1:E9:9F:F4:88:8B:DD:C5:B3:83:5F:3E:29

            X509v3 Subject Key Identifier: 
                B2:96:4C:07:DE:EC:12:63:2B:46:E4:69:2D:70:B2:83:DE:C5:DB:F2
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 CRL Distribution Points: 

                Full Name:
                  URI:http://ca.example.com/crl/example.crl

    Signature Algorithm: sha1WithRSAEncryption
        30:64:a7:72:14:e8:57:db:5b:b6:77:04:03:71:cf:85:af:75:
        15:65:49:5c:6c:e8:c0:e4:1f:02:f2:3b:c4:d6:6e:de:f2:be:
        71:5e:e1:b7:12:31:21:a3:54:b2:17:f6:37:ff:1b:7b:f1:d5:
        19:e7:ff:e2:a7:61:b6:79:d9:2a:fd:29:21:45:16:d3:6e:49:
        41:17:e0:86:65:23:f0:bc:6d:22:02:58:ed:39:51:92:c1:61:
        d5:06:98:04:bf:28:a7:2a:9f:fe:e0:82:bf:73:a6:c4:50:4d:
        eb:8d:53:3c:6b:d4:a5:b5:4f:32:c2:51:38:bd:4f:ef:60:01:
        99:2a:52:85:f6:bb:0e:4c:b2:21:2d:56:cc:9b:50:56:c7:41:
        3f:db:b9:b6:54:3e:3c:8a:d1:48:42:2e:fd:8c:74:7a:c9:4c:
        6c:37:98:db:29:3f:81:3a:66:44:83:e5:8e:81:ce:b8:70:fb:
        fd:f0:3d:99:e5:3d:ec:ff:28:fa:53:ac:eb:66:80:60:b2:dd:
        4e:e9:62:bd:8c:0f:68:30:8f:65:8d:63:f5:9e:97:0a:03:b1:
        6b:f6:3a:1b:6b:34:96:3b:9d:d8:57:73:01:8d:04:fd:6f:74:
        e0:34:31:87:5b:15:46:ea:37:2f:f2:b2:fa:01:b8:2c:36:c9:
        b9:27:18:cd

確認していないですが,TLS Web Server Authentication は必要だと思います.

サーバ側の設定

suffix や rootdn 等は前回のと同じ設定にします.

sldap.conf

下記を設定します.

TLSCACertificateFile /etc/openldap/certs/ca.pem
TLSCertificateFile /etc/openldap/certs/server.pem
TLSCertificateKeyFile /etc/openldap/certs/key.pem

TLSCACertificateFile は何に使用しているか分からないです …

/etc/sysconfig/ldap

SLAPD_LDAPS が no になっているので yes に変更します.

SLAPD_LDAPS=yes
起動

slapd をたちあげます.

# service slapd start

クライアント側の設定

/etc/openldap/ldap.conf

TLS_CACERT を追記します.
TLS_CACERT サーバ証明書を検証する CA 証明書を指定します.
(たぶんサーバ証明書の verify 用かな)

TLS_CACERT /etc/openldap/certs/ca.pem

実行

上記までで,設定は完了です.

netstat で LISTEN を確認してみます.

# netstat -a | grep ldaps
tcp        0      0 *:ldaps                     *:*                         LISTEN      
tcp        0      0 *:ldaps                     *:*                         LISTEN     

(ldaps のポート番号は 636 です)


動いているようなので,試しに ldapsearch を実行してみます.

ldapsearch

ldap:// のときとの違いは,コマンドに指定する URI のスキームを ldap から ldaps に変更することだけです.

# ldapsearch -x -H ldaps://ldap.example.com -D 'cn=Manager,dc=ldap,dc=example,dc=com' -W -b 'dc=ldap,dc=example,dc=com' '(objectClass=*)'
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <dc=ldap,dc=example,dc=com> with scope subtree
# filter: (objectClass=*)
# requesting: ALL
#

# ldap.example.com
dn: dc=ldap,dc=example,dc=com
objectClass: dcObject
objectClass: organization
o: organization
dc: ldap

# person, ldap.example.com
dn: ou=person,dc=ldap,dc=example,dc=com
objectClass: organizationalUnit
ou: person

# hexa, person, ldap.example.com
dn: cn=hexa,ou=person,dc=ldap,dc=example,dc=com
objectClass: person
cn: hexa
sn: blog
userPassword:: e1NTSEF9Tm9rQnBiYXc2MXpwRTRBUVRuQXo1cmxRM0lIT2hvbXE=

# search result
search: 2
result: 0 Success

# numResponses: 4
# numEntries: 3

CentOS 6.2 に OpenLDAP をインストールしてみた

CentOS 6 では,CentOS 5 までは存在していた OpenLDAP の設定ファイルの slapd.conf が無くなり,その代わりに,/etc/openldap/slapd.d/ 以下に設定ファイル(とディレクトリ)が格納されるようになっています,

/etc/openldap/slapd.d/ 以下のファイル

# ls -R  /etc/openldap/slapd.d/
/etc/openldap/slapd.d/:
cn=config  cn=config.ldif

/etc/openldap/slapd.d/cn=config:
cn=schema       olcDatabase={0}config.ldif     olcDatabase={1}monitor.ldif
cn=schema.ldif  olcDatabase={-1}frontend.ldif  olcDatabase={2}bdb.ldif

/etc/openldap/slapd.d/cn=config/cn=schema:
cn={0}corba.ldif        cn={2}cosine.ldif         cn={6}java.ldif
cn={10}ppolicy.ldif     cn={3}duaconf.ldif        cn={7}misc.ldif
cn={11}collective.ldif  cn={4}dyngroup.ldif       cn={8}nis.ldif
cn={1}core.ldif         cn={5}inetorgperson.ldif  cn={9}openldap.ldif

これらのファイルを編集していけばいいような気がしますが,Red Hat のドキュメントを読んでみると,/etc/openldap/slapd.d/ 以下の直接の編集は推奨されていません.

このままではどうしようもないので,一度,slapd.conf を作成して,作成した slapd.conf から /etc/openldap/slapd.d/ の移行を試みます.

slapd.conf は下記のディレクトリにあります.

/usr/share/openldap-servers/slapd.conf.obsolete

移行

slaptest を使用して移行します.

# cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/
# vim /etc/openldap/slapd.conf.obsolete

## 変更点 ###
# 116c116
# < suffix                "dc=my-domain,dc=com"
# ---
# > suffix                "dc=ldap,dc=example,dc=com"
# 118c118
# < rootdn                "cn=Manager,dc=my-domain,dc=com"
# ---
# > rootdn                "cn=Manager,dc=ldap,dc=example,dc=com"
# 123c123
# < # rootpw              {crypt}ijFYNcSNctBYg
# ---
# > rootpw                {SSHA}QeqmMk3atYqjqXGaURtgB0mXSxHnhcFL
##########

# rm -rf /etc/openldap/slapd.d/*
# slaptest -f /etc/openldap/slapd.conf.obsolete -F /etc/openldap/slapd.d
# chown -R ldap:ldap /etc/openldap/slapd.d/
# chown -R ldap:ldap /var/lib/ldap
# service slapd start
# service slapd status
slapd (pid  2462) is running...

無事動きました.

確認

適当にエントリの追加と検索をおこなって,変更した設定が反映されていることを確認します.

# ldapadd -x -D 'cn=Manager,dc=ldap,dc=example,dc=com' -W -f person.ldif 
Enter LDAP Password: 
adding new entry "dc=ldap,dc=example,dc=com"

adding new entry "ou=person,dc=ldap,dc=example,dc=com"

adding new entry "cn=hexa,ou=person,dc=ldap,dc=example,dc=com"

# ldapsearch -x -D 'cn=Manager,dc=ldap,dc=example,dc=com' -W -b 'dc=ldap,dc=example,dc=com' '(cn=hexa)'
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <dc=ldap,dc=example,dc=com> with scope subtree
# filter: (cn=hexa)
# requesting: ALL
#

# hexa, person, ldap.example.com
dn: cn=hexa,ou=person,dc=ldap,dc=example,dc=com
objectClass: person
cn: hexa
sn: blog
userPassword:: e1NTSEF9Tm9rQnBiYXc2MXpwRTRBUVRuQXo1cmxRM0lIT2hvbXE=

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

ldapadd で追加して,ldapsearch でその内容が確認できたので,設定は反映されているようです.

参考にしたページ