連載
» 2002年07月27日 00時00分 公開

Linux管理者への道(2):LDAPによるパスワードの一元管理 (2/3)

[浅野史彦, 小川典嗣,アイティーブースト]

LDAPサーバの構築

 今回は、Red Hat Linux 7.3をベースに、必要なソフトウェアをインストールします。ソースファイルはすべて/usr/local/srcにダウンロードし、展開するときもこのディレクトリで作業することを前提としています。

 まず、認証を統合するLDAPサーバを構築します。今回は、以下のソフトウェアで検証しました。

OpenLDAPのインストールとサーバの設定

 入手したソースアーカイブを展開してインストールします。LDAPサーバ用ファイル群がすべて/usr/local/ldapディレクトリ以下に格納されるように、configureスクリプト実行時に「--prefix=/usr/local/ldap」オプションを指定しています。

$ tar zxvf openldap-stable-20020618.tgz
$ cd ../openldap-2.0.25/
$ ./configure --prefix=/usr/local/ldap
$ make depend
$ make
$ make test
# make install

 また、Samba用のLDAPスキーマを設定します。スキーマファイルを以下のURLから入手し、/etc/openldap/schema/samba.schemaとして保存します。

Samba用LDAPスキーマ:ftp://ftp.samba.gr.jp/pub/samba-jp/samba-ldap/samba.schema

# cp samba.schema /usr/local/ldap/etc/openldap/schema

 例に挙げたとおりにインストールすると、OpenLDAPサーバの設定ファイルは/usr/local/ldap/etc/openldap/slapd.confに配置する必要があります。/usr/local/ldap/etc/openldap/slapd.conf.defaultというファイルが生成されるので、これを/usr/local/ldap/etc/openldap/slapd.confとしてコピーし、編集するとよいでしょう。

 さまざまな設定項目がありますが、以下のように設定を変更します。

################################################################
# Posixアカウント情報を含むnis.schemaと
# Sambaアカウント用スキーマをインクルードする

include /usr/local/ldap/etc/openldap/schema/core.schema
include /usr/local/ldap/etc/openldap/schema/nis.schema
include /usr/local/ldap/etc/openldap/schema/samba.schema

pidfile         /usr/local/ldap/var/slapd.pid
argsfile        /usr/local/ldap/var/slapd.args
################################################################
# パスワード変更に関する最低限のアクセス制御を行う
#
# userPassword属性に対する設定-------
#  ・LDAP管理ユーザー(cn=root,dc=itboost,dc=co,dc=jp)は書込可能(write)
#  ・自分自身(self)は書込可能(write)
#  ・匿名接続(anonymous)した場合は 認証時のみuserPasswordを利用できる
#  ・そのほかのユーザー(*)は何もできない(none)

access to attribute=userPassword
        by self write
        by dn="cn=root,dc=itboost,dc=co,dc=jp" write
        by anonymous auth
        by * none

# userPassword属性以外(*)に対する設定-------
#  ・LDAP管理ユーザー(cn=root,dc=itboost,dc=co,dc=jp)は書込可能(write)
#  ・自分自身(self)は書込可能(write)
#  ・そのほかのユーザー(*)は読取は可能(read)

access to *
        by dn="cn=root,dc=itboost,dc=co,dc=jp" write
        by self write
        by * read

################################################################
# 検索の高速化
#
# UNIXアカウント(uid)の存在(pres)と一致(eq)、
# Sambaアカウント(rid)の一致(eq)に対する検索能力を高めるためindexを作成

index uid   pres,eq
index rid   eq

################################################################
# 必須項目
#
# suffix : LDAPディレクトリの検索範囲
# rootdn : 特権ユーザー
# rootpw : 特権ユーザーのパスワード
#          slappasswd コマンドを実行し、出力された文字列をコピーすればよい
#               -s :パスワード文字列
#               -h :暗号化方式指定 {CRYPT} {SHA} {MD5} などを取ることができる
#
#           『実行例 ・・・パスワード暗号化方法にMD5を使用した例』
#              slappasswd -s itboost -h {MD5}

database    ldbm
suffix      "dc=itboost,dc=co,dc=jp"
rootdn      "cn=root,dc=itboost,dc=co,dc=jp"
rootpw      {MD5}04GnLjggosVsXYs44jrvFg==

# データベースを置くディレクトリ指定
directory    /usr/local/ldap/var/openldap-ldbm

 LDAPサーバは専用ユーザーで扱うことにします。まず、専用ユーザー「ldap」を作成し、ldapのデータベースが格納されるディレクトリのパーミッションを設定しておきます。

# useradd -d /usr/local/ldap/var/openldap-ldbm -s /bin/false ldap
# chown ldap.ldap /usr/local/ldap/var/openldap-ldbm
# chmod 700 /usr/local/ldap/var/openldap-ldbm

 準備が完了したら、以下のように起動します。

# /usr/local/ldap/libexec/slapd -u ldap

 各サーバの認証をLDAPで行う場合、LDAPサーバデーモンであるslapdが起動していないと、すべての認証が失敗することになります。システム再起動時にslapdが起動するように上記の1行を/etc/rc.d/rc.localに記述しておきましょう。

各サーバ共通のLDAPクライアント設定

 構築するすべてのサーバが、LDAPサーバを認証に利用するための設定を行います。

 LDAPサーバからユーザー情報を取得するためのnss_ldapと、PAMのLDAP対応モジュールであるpam_ldapをインストールします。これらをインストールする際にLDAP用のヘッダファイルが必要になるので、OpenLDAPのソースも用意します。

 nss_ldapとpam_ldapをインストールするために、OpenLDAPに含まれるヘッダファイルやライブラリが必要になります。openldap、openldap-devel、mozilla-mailといったRPMがインストールされていれば問題ありませんが、ここではOpenLDAPをインストールすることで作成されるライブラリやヘッダファイルを使用することにします。

 まずは、LDAPサーバと同様の手順でOpenLDAPをインストールします。ただし、LDAPサーバは別に存在するという前提であるため、slapdの設定や起動は行いません。

$ tar zxvf openldap-stable-20020618.tgz
$ cd openldap-2.0.25
$ ./configure --prefix=/usr/local/ldap
$ make depend
$ make
$ make test
# make install

 次に、nss_ldapのアーカイブを展開し、インストールします。configureスクリプトを実行する際に、上記で展開したOpenLDAPのヘッダファイルやライブラリを利用するため、--with-ldap-dir=/usr/local/ldapオプションとLDAP用設定ファイルを明示的に指定する--with-ldap-conf-fileオプションを付加します。

$ tar zxvf nss_ldap.tgz
$ cd nss_ldap-197
$ ./configure --with-ldap-dir=/usr/local/ldap --with-ldap-conf-file=/etc/ldap.conf
$ make
# make install

 上記の作業によって、NSS(Name Service Switch)用のLDAPモジュール/lib/libnss_ldap-2.2.5.soと、NSS設定ファイルのひな型である/etc/nsswitch.ldapが作成されます。

 NSSの設定ファイルは/etc/nsswitch.confで、さまざまな「名前解決」に関する情報をどこから得るのかを設定します。例えば、/etc/nsswitch.conf内に以下のような記述があったとします。

passwd:    files nisplus

 この場合、passwd(ユーザー情報)はローカルの/etc/passwd(files)→NIS+サーバ (nisplus)の順番で検索されます。

 nss_ldapをインストールした際に作成された/etc/nsswitch.ldapは、以下のようにユーザーやグループ情報をローカルファイル→LDAPサーバの順で検索するように設定された/etc/nsswitch.confのひな型です。

passwd:    files ldap
group:     files ldap
/etc/nsswitch.ldap(一部抜粋)

 このファイルを既存の/etc/nsswitch.confと置き換え、NSSをLDAPに対応させます。

# mv /etc/nsswitch.conf /etc/nsswitch.conf.old
# cp /etc/nsswitch.ldap /etc/nsswitch.conf

 次はpam_ldapのインストールです。nss_ldapと同様、configureスクリプトを実行する際にOpenLDAPのヘッダファイルやライブラリを利用するための--with-ldap-dir=/usr/local/ldapオプションと、LDAP用設定ファイルを明示的に指定する--with-ldap-conf-file オプションを付加します。

$ tar zxvf pam_ldap.tgz
$ cd pam_ldap-150
$ ./configure --with-ldap-dir=/usr/local/ldap --with-ldap-conf-file=/etc/ldap.conf
$ make
# make install

 PAMの設定ファイルは/etc/pam.dディレクトリ以下にあります()。例えば、sshサーバ用であれば/etc/pam.d/sshdのように、PAMに対応したプログラムごとに1つのファイルが用意されています。ただし、今回はシステム全体でPAM認証に利用するファイル/etc/pam.d/system-authをLDAPに対応するように編集し、ほかのプログラムのPAM設定ファイルから、再帰的にこのファイルが読み込まれるようにします。

注:システムによっては、/etc/pam.confがすべてのプログラムのPAM設定ファイルになっていることがあります。

 なお、PAMの設定を変更する場合は、必ず現在の設定ファイルをバックアップしてから行ってください。PAMの設定ファイルを間違って編集すると、ログインすらできなくなってしまう可能性があります。設定を変更する場合は、LDAP認証の動作確認が取れるまで、必ず1つはroot権限でログインした端末を残しておくことをお勧めします。万が一ログインできなくなった場合は、システムをシングルユーザーモードで起動して設定を修正します。

 以下がLDAP認証する場合の設定例です。

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      /lib/security/pam_env.so
auth        sufficient    /lib/security/pam_unix.so likeauth nullok
auth        sufficient    /lib/security/pam_ldap.so use_first_pass
auth        required      /lib/security/pam_deny.so

account     required      /lib/security/pam_unix.so
account     [default=bad success=ok user_unknown=ignore
 service_err=ignore system_err=ignore] /lib/security/pam_ldap.so

password    required      /lib/security/pam_cracklib.so retry=3 type=
password    sufficient    /lib/security/pam_unix.so nullok use_authtok
 md5 shadow
password    sufficient    /lib/security/pam_ldap.so use_authtok
password    required      /lib/security/pam_deny.so

session     required      /lib/security/pam_limits.so
session     required      /lib/security/pam_unix.so
session     optional      /lib/security/pam_ldap.so
LDAPに対応させた/etc/pam.d/system-auth

 /etc/pam.d/system-authを用意したら、各プログラム用の設定ファイルでこのファイルを読み込ませるように編集します。各種サーバのPAM設定ファイルはそれぞれサーバ設定を説明する際に触れるとして、ここでは設定の概略を紹介しておきます。

 ほかの設定ファイルを参照する動作を実現するには、pam_stack.soモジュールを利用します。例えば、sshサーバの認証設定を/etc/pam.d/system-authに合わせる場合は、/etc/pam.d/sshdを以下のようにします。

#%PAM-1.0
auth       required     /lib/security/pam_stack.so service=system-auth
account    required     /lib/security/pam_stack.so service=system-auth
password   required     /lib/security/pam_stack.so service=system-auth
session    required     /lib/security/pam_stack.so service=system-auth
/etc/pam.d/sshdの設定

 この例ではsystem-authに設定したものとまったく同じモジュールを利用していますが、それ以外に利用したいPAMモジュールがあれば設定を追加することも可能です。例えば、/etc/nologinというファイルが存在する場合、一般ユーザーをログインさせないようにするには、以下のようにpam_nologin.soモジュールを使うように設定を追加すればよいでしょう。

#%PAM-1.0
auth       required     /lib/security/pam_stack.so service=system-auth
auth       required     /lib/security/pam_nologin.so
account    required     /lib/security/pam_stack.so service=system-auth
password   required     /lib/security/pam_stack.so service=system-auth
session    required     /lib/security/pam_stack.so service=system-auth
/etc/pam.d/sshdの設定(pam_nologinモジュールを追加した例)

 LDAPクライアントとして動作する際に参照される設定ファイルは/etc/ldap.confになります。このファイルで、参照すべきLDAPサーバとLDAPディレクトリの検索範囲(ベースDN)を指定します。

host ldap.itboost.co.jp
base dc=itboost,dc=co,dc=jp

 また、/etc/ldap.confでは上記の2項目以外にもさまざまな設定が可能です。詳しくは、pam_ldapのアーカイブを展開したときに作成されるサンプルファイル()を参照してみてください。

注:/usr/local/srcディレクトリで展開したのであれば、/usr/local/src/pam_ldap-150/ldap.conf。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。