2014年4月24日木曜日

OpenLDAPのインストールと起動


■Linux SSHログイン認証をOpenLDAPで一元管理

LDAPサーバに登録したユーザでのSSHログインおよびパスワード変更をアプリ系サーバで実現するための流れを、下記のパートに分けて記載していきます。



■本編の概要
openldap-servers、openldap-clients、nss-pam-ldapdのインストールおよびslapd.confの 設定と変更方法、slapdサービスの起動およびLDAPサーバへの接続確認方法についてまとめます。 特に、CentOS 6系からslapdの設定はslapd.dディレクトリ以下のファイルで定義される方式に変更と なっているので注意が必要です。今回はDB_CONFIGを使用し、旧来のslapd.confに設定した内容を slapd.dディレクトリに出力する手順をまとめます。
OS: CentOS 6.5 (64-bit)
openldap: 2.4.23
nss-pam-ldapd: 0.7.5
LDAPサーバホスト名: ty-ldap01
アプリ系サーバホスト名: ty-app01,ty-app02

■インストール済みOpenLDAP関連パッケージの確認
[root@ty-ldap01 ~]# yum list installed '*ldap*'
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
Installed Packages
apr-util-ldap.x86_64 1.3.9-3.el6_0.1    @anaconda-CentOS-201311272149.x86_64/6.5
openldap.x86_64      2.4.23-32.el6_4.1  @anaconda-CentOS-201311272149.x86_64/6.5
python-ldap.x86_64   2.3.10-1.el6       @anaconda-CentOS-201311272149.x86_64/6.5
[root@ty-ldap01 ~]#

■最低限必要なパッケージのインストール
openldap-servers、openldap-clients、nss-pam-ldapd を追加インストール
[root@ty-ldap01 ~]# yum install openldap-clients.x86_64 openldap-servers.x86_64 nss-pam-ldapd.x86_64
(中略)
===========================================================================
 Package                  Arch      Version             Repository    Size
===========================================================================
Installing:
 nss-pam-ldapd            x86_64    0.7.5-18.2.el6_4    base         152 k
 openldap-clients         x86_64    2.4.23-34.el6_5.1   updates      165 k
 openldap-servers         x86_64    2.4.23-34.el6_5.1   updates      2.0 M
Installing for dependencies:
 nscd                     x86_64    2.12-1.132.el6      base         219 k
 pam_ldap                 x86_64    185-11.el6          base          88 k
Updating for dependencies:
 openldap                 x86_64    2.4.23-34.el6_5.1   updates      265 k

Transaction Summary
===========================================================================
Install       5 Package(s)
Upgrade       1 Package(s)
(以下略)

■インストール済みOpenLDAP関連パッケージの再確認
[root@ty-ldap01 ~]# yum list installed '*ldap*'
(中略)
Installed Packages
apr-util-ldap.x86_64      1.3.9-3.el6_0.1     @anaconda-CentOS-201311272149.x86_64/6.5
nss-pam-ldapd.x86_64      0.7.5-18.2.el6_4    @base
openldap.x86_64           2.4.23-34.el6_5.1   @updates
openldap-clients.x86_64   2.4.23-34.el6_5.1   @updates
openldap-servers.x86_64   2.4.23-34.el6_5.1   @updates
pam_ldap.x86_64           185-11.el6          @base
python-ldap.x86_64        2.3.10-1.el6        @anaconda-CentOS-201311272149.x86_64/6.5
[root@ty-ldap01 ~]#

■DB_CONFIG準備
DB_CONFIGファイルは、OpenLDAPサーバが BerkeleyDB をドライブする際の環境定義を書いておくファイルであり、 slapd.confのdirectoryディレクティブで指定したディレクトリから探されます。
[root@ty-ldap01 ~]# cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

■slapd設定を変換
OpenLDAPサービスに必要となる設定がCentOS 6で変更になっています。 旧バージョンでは、slapdは /etc/openldap/slapd.conf から設定していました。 RedHatEnterpriseLinux 6のslapd設定は特殊なLDAPディレクトリ(/etc/openldap/slapd.d/) 内の事前定義済みのスキーマとDIT(ディレクトリ情報ツリー)と共に格納されるようになりました。 旧来の設定ファイルを新しいディレクトリで機能するように変換する方法を記述します。

## slapd.confの準備
[root@ty-ldap01 ~]# cp -p /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
## slapd.confのチェック
[root@ty-ldap01 ~]# slaptest -u -f /etc/openldap/slapd.conf
config file testing succeeded
[root@ty-ldap01 ~]#
## 新しいディレクトリの /etc/openldap/slapd.d/ の内容を削除
[root@ty-ldap01 ~]# rm -rf /etc/openldap/slapd.d/*
## slaptestを実行して設定ファイルの有効性をチェックし、新しい設定ディレクトリを指定
[root@ty-ldap01 ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
bdb_db_open: database "dc=my-domain,dc=com": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2).
backend_startup_one (type=bdb, suffix="dc=my-domain,dc=com"): bi_db_open failed! (2)
slap_startup failed (test would succeed using the -u switch)
[root@ty-ldap01 ~]#
## 新しいディレクトリ上でパーミッションを設定
[root@ty-ldap01 ~]# chmod -R 000 /etc/openldap/slapd.d
[root@ty-ldap01 ~]# chmod -R u+rwX /etc/openldap/slapd.d
[root@ty-ldap01 ~]# chown -R ldap: /etc/openldap/slapd.d
[root@ty-ldap01 ~]# chown -R ldap: /var/lib/ldap

■LDAPサーバの起動
[root@ty-ldap01 ~]# /etc/init.d/slapd start
slapd を起動中:                                            [  OK  ]
[root@ty-ldap01 ~]#
## 自動起動設定
[root@ty-ldap01 ~]# chkconfig slapd on; chkconfig --list slapd
slapd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@ty-ldap01 ~]#

■LDAPサーバへの接続確認
[root@ty-ldap01 ~]# ldapsearch -x -h localhost -b dc=my-domain,dc=com -LLL
No such object (32)
[root@ty-ldap01 ~]#
## オプション説明
"-x" 匿名ユーザーでの簡易認証
"-h" OpenLDAPサーバを指定
"-b" ディレクトリツリーの検索ベースを指定
"-LLL"最もシンプルなLDIFフォーマットへ出力を整形

## 結果補足
起動したばかりのOpenLDAPサーバからは、「検索条件に一致する結果はなし」との応答が返ります。
現時点ではまだエントリを登録していないため、これが正しい結果です。

■LDAPパスワードの作成
## 管理用
[root@ty-ldap01 ~]# slappasswd -s secret
{SSHA}XZY46aVGlCElS13dN4ryN0kwglZCVKqG
[root@ty-ldap01 ~]#
## 各ユーザ用(共通)
[root@ty-ldap01 ~]# slappasswd -s naisyo
{SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5
[root@ty-ldap01 ~]#

■slapd.confの設定とチェック
[root@ty-ldap01 ~]# cp -p /etc/openldap/slapd.conf /etc/openldap/slapd.conf.org
[root@ty-ldap01 ~]# vi /etc/openldap/slapd.conf
[root@ty-ldap01 ~]# egrep -n "^suffix|^rootdn|^rootpw" /etc/openldap/slapd.conf
115:suffix              "dc=open_ldap,dc=com"
117:rootdn              "cn=Manager,dc=open_ldap,dc=com"
123:rootpw              {SSHA}XZY46aVGlCElS13dN4ryN0kwglZCVKqG
[root@ty-ldap01 ~]# slaptest -u -f /etc/openldap/slapd.conf
config file testing succeeded
[root@ty-ldap01 ~]#
※rootpwには先ほど作成した管理者用のエンコードされたパスワード文字列を記述します。
※my-domain → open_ldap に変更してみました。

■slapd.confの設定変更反映
一連の作業をシェルスクリプト化しておきます。
[root@ty-ldap01 ~]# vi /usr/local/bin/change_slapd.sh
[root@ty-ldap01 ~]# cat /usr/local/bin/change_slapd.sh
#!/bin/sh
# /etc/openldap/slapd.conf の設定を反映するスクリプト

rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chmod -R 000 /etc/openldap/slapd.d
chmod -R u+rwX /etc/openldap/slapd.d
chown -R ldap: /etc/openldap/slapd.d
/etc/init.d/slapd restart

exit 0
[root@ty-ldap01 ~]# chmod 755 /usr/local/bin/change_slapd.sh
[root@ty-ldap01 ~]# change_slapd.sh
config file testing succeeded
slapd を停止中:                                            [  OK  ]
slapd を起動中:                                            [  OK  ]
[root@ty-ldap01 ~]#
slaptestコマンドでslapd.confの内容に基づきslapd.dディレクトリ以下にファイルを 出力したいが書き込み権限が無いため更新されません。よって事前に削除しておきます。

■管理者で接続確認
[root@ty-ldap01 ~]# ldapsearch -x -h localhost -D "cn=Manager,dc=open_ldap,dc=com" -w secret
# extended LDIF
#
# LDAPv3
# base <> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1
[root@ty-ldap01 ~]#
正しく接続できました。登録されたデータはまだないため上記のように表示されます。 OpenLDAPのインストールおよび起動、接続までの手順は以上となります。


Next >> (2) LDIFによるLDAPサーバへのデータ登録

0 件のコメント:

コメントを投稿