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

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

[浅野史彦, 小川典嗣,アイティーブースト]
前のページへ 1|2|3       

Sambaの構築

 Sambaの認証をLDAP対応させるように構築します。今回は、以下のソフトウェアを利用して検証しました。

Sambaのインストールと設定

 SambaをLDAPに対応させるように、ソースからインストールします。そのためには、configureスクリプト実行時に--with-ldapsamオプションを指定します。検証に際しては、以下のオプションを指定してインストールしました。

$ tar zxvf samba-2.2.4-ja-1.0.tar.gz
$ cd samba-2.2.4-ja/source
$ ./configure --with-quotas --with-ldapsam --with-pam --with-syslog
$ make
# make install

 Sambaアカウントの認証をLDAPに対応させるため、以下の設定を行う必要があります。

  • LDAPサーバのIPアドレス
  • LDAPサーバのポート番号
  • LDAPディレクトリの検索範囲
  • LDAP管理者の識別名
  • SSL対応(今回は対応させていません)

 /usr/local/samba/lib/smb.confの具体的な記述は、以下のようになります。

   ldap server = 192.168.0.2
   ldap port = 389
   ldap suffix = "dc=itboost,dc=co,dc=jp"
   ldap admin dn = "cn=root,dc=itboost,dc=co,dc=jp"
   ldap ssl = yes

 また、WindowsからSambaアカウントのパスワードを変更した場合に、Linuxのシステムアカウントと同期するように以下の項目を設定しておきます。

   passwd program       = /usr/local/sbin/smbldap-passwd.pl %u
   passwd chat          = *New* %n\n *Retype* %n\n *success*
   unix password sync   = yes

 もちろん、上記以外の項目についても必要に応じて適宜編集しなければなりません(編注)。

編注:Sambaについては、以下の記事も参照。
連載:Samba Tips!
特集:Samba 3.0の全貌

 もう1つ、LDAP管理者のパスワードをsmbpasswdコマンドで設定しておく必要があります。以下のように-wオプションと引数にLDAP管理者に設定したパスワードを平文で入力します。ここで設定するパスワードは、必ずLDAPサーバで設定したものと同じものを使用してください。

# smbpasswd -w itboost

 設定が完了したら、Sambaを起動します。

# /usr/local/samba/bin/smbd -D
# /usr/local/samba/bin/nmbd -D

smbldap-toolsのインストールと設定

 LinuxのユーザーとSambaユーザーを同時にLDAPサーバへ登録するためのsmbldap-toolsをインストールします。smbldap-toolsはldapaddやldapmodifyなど、LDAPクライアント用ツールを呼び出して利用するPerlスクリプトです。まずは、LDAPサーバと同様にOpenLDAPをインストールします。ただし、LDAPサーバは別のホストであるという前提のため、slapdは起動しないようにします。

 アーカイブファイル展開後にできるディレクトリ以下のファイルを/usr/local/sbinディレクトリ以下にコピーします。また、これらのファイル群のうち、Perlモジュールに当たるsmbldap_conf.pmとsmbldap_tools.pmは/usr/lib/perl5/5.6.1以下から参照できるようにシンボリックリンクを張っておきます。

$ tar zxvf smbldap-tools-0.7.tgz
$ cp smbldap-tools-0.7/* /usr/local/sbin
$ ln -s /usr/local/sbin/*.pm /usr/lib/perl5/5.6.1/

 次に、smbldap-toolsを正常に動作させるためにsmbldap_conf.pmを編集します。Windowsドメイン構築のための情報も多数ありますが、必要に応じて設定を変更すればよいでしょう。

## LDAPに関する設定 -- 必須
$slaveLDAP = "192.168.0.2";
$masterLDAP = "192.168.0.2";
$suffix = "dc=itboost,dc=co,dc=jp";
$binddn= "cn=root,$suffix";
$bindpasswd= "{MD5}04GnLjggosVsXYs44jrvFg==";

## システムアカウントに関する設定
$_userLoginShell = q(/bin/bash)
$_userHomePrefix = q(/home/)

## Sambaに関する設定
$_userSmbHome
$_userSmbHome
$_userHomeDrive

# SambaとLDAPプログラムの場所
$smbpasswd = "/usr/local/samba/bin/smbpasswd";
$ldap_path = "/usr/local/ldap/bin";

 設定ファイルを修正したら、LDAPサーバにユーザーを格納するためのディレクトリ構造を作ります。smbldap-toolsに含まれているsmbldap-populate.plスクリプトを一度実行すれば、以下のようなディレクトリ構造ができあがります。

# smbldap-populate.pl

画面4 LDAP Browserで見たディレクトリ構造 画面4 LDAP Browserで見たディレクトリ構造

 これで、smbldap-toolsが利用できるようになります。例えば、Linuxにおけるユーザーだけを作成する場合は以下のように実行します。

# smbldap-useradd.pl -m ユーザー名

 ここで指定した-mオプションは、ユーザー作成の際にそのユーザーのホームディレクトリが存在しなければ作成するためのものです。

 ユーザーにSambaを利用させる場合は、以下のように-aオプション付きで実行します。

# smbldap-useradd.pl -m -a ユーザー名

 そのほかのsmbldap-toolsについても、以下のように実行することでどのようなオプションが使えるかなどを確認できます。

# コマンド名 -?

 LDAPサーバへの接続はSambaの機能で実現しますが、SWATを利用している場合はPAM経由でLDAPパスワードを利用するようにする必要があります。具体的には、以下のようなファイルを/etc/pam.d/sambaとして作成します。

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

メールサーバの構築

 メールサーバは、内部ネットワークからメールを受信する場合はPOP/SSLでの接続、外部からメールを見たい場合はUsermin/SSLを利用させ、平文でパスワードが流れることがないようにします。また、Userminでユーザーへパスワード変更のインターフェイスを提供させるように設定します(Userminについては後述)。

 今回は以下のソフトウェアを利用して構築しました(SMTPサーバについては特別な作業は必要ありません)。

Qpopperのインストール

 QpopperをSSL対応およびPAM経由でLDAP認証できるようにインストールします。

$ tar zxvf qpopper4.0.4.tar.gz
$ ./configure
   --with-openssl \
   --with-pam=qpopper \
   --prefix=/usr/local/qpopper
$ make
# mkdir -p /usr/local/qpopper/sbin
# mkdir -p /usr/local/qpopper/man/man8
# make install

POP関連の各種設定

  • SSLの設定

 まず、SSLを利用するために必要な秘密鍵と証明書を作成します。ここでは特に外部の認証局を使用せず、自己証明書を作成します。また、SSLの秘密鍵と証明書は/usr/local/qpopper/etc/に作成することとします。

# mkdir /usr/local/qpopper/etc
# cd /usr/local/qpopper/etc
# openssl req -newkey rsa:1024 -keyout cert.key -nodes -x509 -days 365 -out cert.pem
Generating a 1024 bit RSA private key
......................++++++
.....++++++
writing new private key to '/tmp/openssl.fdtiml'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Osaka
Locality Name (eg, city) [Newbury]:Kyobashi
Organization Name (eg, company) [My Company Ltd]:ITBoost
Organizational Unit Name (eg, section) []:Network
Common Name (eg, your name or your server's hostname) []:mail.itboost.co.jp
Email Address []:asano@itboost.co.jp
赤字が入力個所

 上記の作業で作成された秘密鍵(cert.key)と自己証明書(cert.pem)が、一般ユーザーから参照できないようにパーミッションを設定します。

# chmod 600 qpopper.key qpopper.pem

 作成したSSL用のファイルを使用するように、Qpopperの設定ファイルを作成します。QpopperのSSL用設定ファイルとして/usr/local/etc/qpopper/qpopper.confを作成し、このファイルにSSLに関する以下の設定を書き込みます。

set clear-text-password = ssl
set tls-support = alternate-port
set tls-version = default
set tls-private-key-file = /usr/local/qpopper/etc/cert.key
set tls-server-cert-file = /usr/local/qpopper/etc/qpopper.pem

  • PAMの設定

 Qpopperが、PAM経由でLDAPパスワードを参照するように設定します。具体的には、以下のようなファイルを/etc/pam.d/qpopperとして作成します。

auth       required     /lib/security/pam_stack.so service=system-auth
account    required     /lib/security/pam_stack.so service=system-auth

  • xinetdの設定

 Qpopperをxinetd経由で起動するために、/etc/xinetd.d/qpopperというファイルを作成し、以下の設定を記述します。

service pop3s
{
        disable = no
        socket_type             = stream
        wait                    = no
        user                    = root
        server                  = /usr/local/qpopper/sbin/popper
        server_args             = -s -f /usr/local/qpopper/etc/qpopper.conf
        log_on_success  += HOST DURATION
        log_on_failure  += HOST
}

 設定を変更したら、それを反映させるためにxinetdにHUPシグナルを送ります。

# killall -HUP xinetd

Userminの導入

 ユーザーにシステムを利用させるときのインターフェイスとして、Userminを設定します。Userminを利用すれば、ユーザーのパスワード変更やメール受信などさまざまな操作をWebブラウザで行えるようになります。これには以下のソフトウェアを利用しました。

Userminのインストールと表示言語設定

 UserminはSSLでアクセスすることを想定しています。そのためには、Net::SSLeay.pm というPerlモジュールを組み込んでおく必要があります。ソースを展開し、以下のように実行してインストールします。

$ tar xvzf Net_SSLeay.pm-1.17.tar.gz
$ cd Net_SSLeay.pm-1.17
$ perl Makefile.PL
# make install

 次に、Userminの認証機能に必要なAuthen::PAMというPerlモジュールをインストールします。

$ tar xzvf Authen-PAM-0.13.tar.gz
$ cd Authen-PAM-0.13
$ perl Makefile.PL
$ make
# make install

 最後に、Userminのインストールです。ソースファイルを展開し、作成されたディレクトリにあるsetup.shスクリプトを実行します。設定項目についていくつか確認されますが、使用するシステムに合わせて設定します。今回はSSL経由でUserminを使用させるため、最後の「Use

SSL (y/n)」という質問に対しては「y」と答えることに注意します。

# tar zxvf usermin-0.940.tar.gz
# cd usermin-0.940
# ./setup.sh
*********************************************************************
*          Welcome to the Usermin setup script, version 0.940       *
*********************************************************************
Usermin is a web-based interface that allows Unix-like operating
systems and common Unix services to be easily administered.

Installing Usermin in /usr/local/src/usermin-0.940 ...

*********************************************************************
Usermin uses separate directories for configuration files and log
 files.
Unless you want to run multiple versions of Usermin at the same time
you can just accept the defaults.

Config file directory [/etc/usermin]:
Log file directory [/var/usermin]:

*********************************************************************
Usermin is written entirely in Perl. Please enter the full path to
 the
Perl 5 interpreter on your system.

Full path to perl (default /usr/bin/perl):

Testing Perl ...
Perl seems to be installed ok

*********************************************************************
Operating system name:    Redhat Linux
Operating system version: 7.3

*********************************************************************
Usermin uses its own password protected web server to provide access
to the administration programs. The setup script needs to know :
 - What port to run the web server on. There must not be another
   web server already using this port.
 - The hostname of this system that the web server should use.
 - If the webserver should use SSL (if your system supports it).

Web server port (default 20000):
Web server host name (default vmlinux.ldomain):
Use SSL (y/n): y

 すべての設定が終わると、Userminが自動的に起動するので、Webブラウザのアドレスバーで、

https://サーバのIPアドレス:20000

と入力してアクセスできることを確認してください。

 Userminの表示に関する設定は、/etc/usermin/configで変更できます。Userminはあまり日本語化が進んでいないので設定してもそれほど大きくは変化しませんが、/etc/usermin/configに「lang」項目を追加し、デフォルトの言語を日本語に設定しておきます。

lang=ja_JP.euc

Userminの設定 − 使用する機能

 Userminは多数の機能の集合体で、デフォルトでは必要以上と思われる機能が有効になっています。Userminの機能を制限したい場合は、/etc/usermin/webmin.aclファイルを編集します。例えば、パスワード変更とメール閲覧機能だけを有効にするには、以下のようにします。

user: changepass mailbox

 また、/etc/userminディレクトリ下には、Userminの機能ごとにサブディレクトリがあり、各ディレクトリにはそれぞれ設定ファイルが存在します。例えば、パスワード変更画面を提供しているchangepass機能の設定は/usr/usermin/changepass/configで行います。このファイルには、以下の2つの設定項目が含まれています。

passwd_cmd=
smbpasswd=smbpasswd

 passwd_cmdの行で特にコマンドを指定しない場合は、前述のAuthen::PAMモジュールを利用して認証を行います。

PAMの設定

 UserminのPAMの設定ファイルを/etc/pam.d/userminとして作成する必要があります。ここでは、すべてsystem-authファイルを参照させるように設定すればよいでしょう。

#%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

 PAMの設定はここまでで問題ないのですが、UserminがLDAP認証のパスワード入力方法に対応していません。LDAP認証を使用するには、/usr/local/src/usermin-0.940/changepass/changepass.cgiの書き換えが必要になります。以下の行を削除あるいは「#」でコメントアウトして、

       $ans = $remote_user if ($code == PAM_PROMPT_ECHO_ON());
       $ans = $in{'new1'} if ($code == PAM_PROMPT_ECHO_OFF());

以下のように編集し直せば、LDAP認証をさせる場合でもUserminを使用することができます。

        if ( $code == PAM_PROMPT_ECHO_OFF() ) {
            if ( $msg =~ /login/ ) {
                $ans = $in{'old'};
            } else {
                $ans = $in{'new1'};
            }
        }

 ここまでの設定で、Userminを通したパスワード変更およびSSL経由のメール閲覧が可能になります。また、Userminのソースを展開したディレクトリにUserminの起動/停止を制御するためのスクリプトusermin-initがあるので、/etc/rc.d/init.d/userminとしてコピーしておきましょう。

# cp /usr/local/src/usermin-0.940/usermin-init /etc/rc.d/init.d/usermin

 このスクリプトは、引数が「start」でUserminを起動、「stop」で停止、「restart」で再起動します。必要に応じて、/etc/rc3.dなどにシンボリックリンクを張っておけば、システム再起動時に自動的にUserminが起動します。

Webサーバの構築

 Webサーバのベーシック認証もLDAPに対応させます。Webサーバへのデータ転送にはWebDAVを利用することにし、認証時の通信も暗号化できるようにApacheをSSLに対応させて構築します。今回は以下のソフトウェアを利用して検証しました。

Webサーバのインストール

 まずはApacheとOpenSSLのアーカイブを展開しておきます。

$ tar zxvf apache_1.3.26.tar.gz
$ tar zxvf openssl-0.9.6d.tar.gz

 両アーカイブを展開したら、OpenSSLをコンパイルします。

$ cd openssl-0.9.6d
$ ./configure --prefix=/usr/local --openssldir=/usr/local/openssl -fPIC
$ make

 ここではコンパイルのみを行い、インストールは実行しません。configureの「-fPIC」は、DSO版作成時に必要なPIC(Position Independent Code)オプションの指定です。

 次に、ApacheにSSLを組み込むためのmod_sslのconfigureを行います。ApacheのMakefileもmod_sslのconfigure時に書き換えられるので、必要なオプションがあればここで追加します。今回は、ssl、DSO、rewriteを有効にしています。

$ cd ../mod_ssl-2.8.10-1.3.26
$ ./configure \
    --with-apache=../apache_1.3.26 \
    --with-ssl=../openssl-0.9.6d  \
    --enable-module=so \
    --enable-rule=SHARED_CORE \
    --enable-module=rewrite \
    --enable-shared=rewrite

 これで、ApacheのMakefileが適切に書き換えられます。Apacheのソースを展開したディレクトリに移動して、Apacheをコンパイルします。

$ cd ../apache_1.3.26
$ make

 ここで、SSLの設定を行います。apache_1.3.26ディレクトリ内でmake certificateを実行して質問に答えれば、テスト用の証明書やプライベート鍵を生成できます。テスト用といっても、通信の暗号化は可能です。

$ make certificate

 以上の作業が終わったらインストールを行います。

# make install

LDAP認証/WebDAVモジュールの組み込み

 Apacheのベーシック認証にLDAPを利用させるため、mod_auth_ldapモジュールを組み込みます。まずはmod_auth_ldapのアーカイブを展開し、生成されたディレクトリに移動します。

$ tar mod_auth_ldap.tar.gz
$ cd ../modauthldap/

 mod_auth_ldapは、LDAP用のヘッダファイルとライブラリを必要とします。前述したLDAPのインストール方法では、ヘッダファイルは/usr/local/ldap/include、ライブラリは/usr/local/ldap/libに存在するので、以下のように実行してmod_auth_ldapモジュールを組み込みます。

$ /usr/local/apache/bin/apxs -I/usr/local/ldap/include -L/usr/local/ldap/lib -lldap -llber -i -a -c mod_auth_ldap.c

 最後に、Webサービスへのファイル転送用としてWebDAVモジュールを組み込みます。今回のようにSSLを組み込んでいる場合は、WebDAVもEAPI対応にするためにCFLAGS=-DEAPIを指定してconfigureを実行する必要があります。

$ tar zxvf mod_dav-1.0.3-1.3.6.tar.gz
$ cd ../mod_dav-1.0.3-1.3.6
$ CFLAGS=-DEAPI ./configure --with-apxs=/usr/local/apache/bin/apxs
$ make
# make install

Apacheの設定とWebDAVの確認

 Apacheについては、特にWebDAVとLDAP関連の部分を中心に説明します(編注)。

編注:Apacheの設定は
連載:ApacheによるWebサーバ構築を参照。また、WebDAVについては、
特集:次世代プロトコルWebDAVの可能性
特集:WebDAV時代のセキュリティ対策
特集:Apache 2.0でWebDAV
などが参考になるだろう。

 WebDAVでは、ファイルに対するロック機構を提供するデータベースを使います。まず、このデータベースファイルを格納するディレクトリを/usr/local/apache/varとして作成することにします。

# mkdir /usr/local/apache/var

 また、/usr/local/apache/conf/httpd.confにデータベース名を定義します。

DAVLockDB       /usr/local/apache/var/DAVLock

 以下に、/usr/local/apache/htdocs/webdavディレクトリをWebDAVで利用し、WebDAV利用時はSSLによる暗号化を行い、さらにLDAP認証が必要になるようにしたhttpd.confの設定例(一部抜粋)を紹介します。

<Directory /usr/local/apache/htdocs/webdav>

# WebDAVのための設定

  Dav On

# SSLを強制するための設定

  SSLRequireSSL

# 認証に関する設定

  AuthName "WebDAV on HTTPS Server"
  AuthType Basic

# 認証に成功したユーザーにのみ操作を認める
  <Limit PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK
 UNLOCK>
     Require valid-user
  </Limit>

# LDAP関連の定義
  LDAP_Server ldap.itboost.co.jp
  LDAP_Port 389
  Base_DN "dc=itboost,dc=co,dc=jp"
  UID_Attr uid

</Directory>

 Windowsで[ネットワークコンピュータ](編注)→[ネットワークプレース]の追加ウィザードを起動し、ネットワークプレースとして、

https://WebサーバのIPアドレス/webdav

を設定すると、SSL接続の確認後にパスワード入力を要求されます。ここで認証に成功すると、WebDAVの利用が可能になります。

画面5 ネットワークプレースの追加 画面5 ネットワークプレースの追加
編注:あるいは[マイネットワーク]。

リスクと運用性のバランスが重要

 今回は、特に「パスワードを一元管理する」「平文でパスワードを流さない」「ユーザーの使い勝手」を中心に、さまざまなサーバとの連携方法を説明しました。ただし、前回も説明したように、これ以外の要素も考慮した設定を入れ込む必要があると思います。

 また、パスワードを一元管理することは、管理が楽になる半面でデメリットもあります。1つのパスワードが漏れるだけで複数台のサーバにアクセスできてしまうことや、あるマシンにはログインできるがほかのマシンにはできないといったアクセス制御を別の形で行う必要があることなどです。

 セキュリティリスクや運用の容易さなどのバランスを考えながら、どうすればうまくいくのかを環境に合わせて考えていただければと思います。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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