Sambaの認証をLDAP対応させるように構築します。今回は、以下のソフトウェアを利用して検証しました。
SambaをLDAPに対応させるように、ソースからインストールします。そのためには、configureスクリプト実行時に--with-ldapsamオプションを指定します。検証に際しては、以下のオプションを指定してインストールしました。
$ tar zxvf samba-2.2.4-ja-1.0.tar.gz |
Sambaアカウントの認証をLDAPに対応させるため、以下の設定を行う必要があります。
/usr/local/samba/lib/smb.confの具体的な記述は、以下のようになります。
ldap server = 192.168.0.2 |
また、WindowsからSambaアカウントのパスワードを変更した場合に、Linuxのシステムアカウントと同期するように以下の項目を設定しておきます。
passwd program = /usr/local/sbin/smbldap-passwd.pl %u |
もちろん、上記以外の項目についても必要に応じて適宜編集しなければなりません(編注)。
もう1つ、LDAP管理者のパスワードをsmbpasswdコマンドで設定しておく必要があります。以下のように-wオプションと引数にLDAP管理者に設定したパスワードを平文で入力します。ここで設定するパスワードは、必ずLDAPサーバで設定したものと同じものを使用してください。
# smbpasswd -w itboost |
設定が完了したら、Sambaを起動します。
# /usr/local/samba/bin/smbd -D |
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 |
次に、smbldap-toolsを正常に動作させるためにsmbldap_conf.pmを編集します。Windowsドメイン構築のための情報も多数ありますが、必要に応じて設定を変更すればよいでしょう。
## LDAPに関する設定 -- 必須 |
設定ファイルを修正したら、LDAPサーバにユーザーを格納するためのディレクトリ構造を作ります。smbldap-toolsに含まれているsmbldap-populate.plスクリプトを一度実行すれば、以下のようなディレクトリ構造ができあがります。
# smbldap-populate.pl |
これで、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 |
メールサーバは、内部ネットワークからメールを受信する場合はPOP/SSLでの接続、外部からメールを見たい場合はUsermin/SSLを利用させ、平文でパスワードが流れることがないようにします。また、Userminでユーザーへパスワード変更のインターフェイスを提供させるように設定します(Userminについては後述)。
今回は以下のソフトウェアを利用して構築しました(SMTPサーバについては特別な作業は必要ありません)。
QpopperをSSL対応およびPAM経由でLDAP認証できるようにインストールします。
$ tar zxvf qpopper4.0.4.tar.gz |
まず、SSLを利用するために必要な秘密鍵と証明書を作成します。ここでは特に外部の認証局を使用せず、自己証明書を作成します。また、SSLの秘密鍵と証明書は/usr/local/qpopper/etc/に作成することとします。
# mkdir /usr/local/qpopper/etc |
赤字が入力個所 |
上記の作業で作成された秘密鍵(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 |
Qpopperが、PAM経由でLDAPパスワードを参照するように設定します。具体的には、以下のようなファイルを/etc/pam.d/qpopperとして作成します。
auth required /lib/security/pam_stack.so service=system-auth |
Qpopperをxinetd経由で起動するために、/etc/xinetd.d/qpopperというファイルを作成し、以下の設定を記述します。
service pop3s |
設定を変更したら、それを反映させるためにxinetdにHUPシグナルを送ります。
# killall -HUP xinetd |
ユーザーにシステムを利用させるときのインターフェイスとして、Userminを設定します。Userminを利用すれば、ユーザーのパスワード変更やメール受信などさまざまな操作をWebブラウザで行えるようになります。これには以下のソフトウェアを利用しました。
UserminはSSLでアクセスすることを想定しています。そのためには、Net::SSLeay.pm というPerlモジュールを組み込んでおく必要があります。ソースを展開し、以下のように実行してインストールします。
$ tar xvzf Net_SSLeay.pm-1.17.tar.gz |
次に、Userminの認証機能に必要なAuthen::PAMというPerlモジュールをインストールします。
$ tar xzvf Authen-PAM-0.13.tar.gz |
最後に、Userminのインストールです。ソースファイルを展開し、作成されたディレクトリにあるsetup.shスクリプトを実行します。設定項目についていくつか確認されますが、使用するシステムに合わせて設定します。今回はSSL経由でUserminを使用させるため、最後の「Use
SSL (y/n)」という質問に対しては「y」と答えることに注意します。
# tar zxvf usermin-0.940.tar.gz |
すべての設定が終わると、Userminが自動的に起動するので、Webブラウザのアドレスバーで、
https://サーバのIPアドレス:20000 |
と入力してアクセスできることを確認してください。
Userminの表示に関する設定は、/etc/usermin/configで変更できます。Userminはあまり日本語化が進んでいないので設定してもそれほど大きくは変化しませんが、/etc/usermin/configに「lang」項目を追加し、デフォルトの言語を日本語に設定しておきます。
lang=ja_JP.euc |
Userminは多数の機能の集合体で、デフォルトでは必要以上と思われる機能が有効になっています。Userminの機能を制限したい場合は、/etc/usermin/webmin.aclファイルを編集します。例えば、パスワード変更とメール閲覧機能だけを有効にするには、以下のようにします。
user: changepass mailbox |
また、/etc/userminディレクトリ下には、Userminの機能ごとにサブディレクトリがあり、各ディレクトリにはそれぞれ設定ファイルが存在します。例えば、パスワード変更画面を提供しているchangepass機能の設定は/usr/usermin/changepass/configで行います。このファイルには、以下の2つの設定項目が含まれています。
passwd_cmd= |
passwd_cmdの行で特にコマンドを指定しない場合は、前述のAuthen::PAMモジュールを利用して認証を行います。
UserminのPAMの設定ファイルを/etc/pam.d/userminとして作成する必要があります。ここでは、すべてsystem-authファイルを参照させるように設定すればよいでしょう。
#%PAM-1.0 |
PAMの設定はここまでで問題ないのですが、UserminがLDAP認証のパスワード入力方法に対応していません。LDAP認証を使用するには、/usr/local/src/usermin-0.940/changepass/changepass.cgiの書き換えが必要になります。以下の行を削除あるいは「#」でコメントアウトして、
$ans = $remote_user if ($code == PAM_PROMPT_ECHO_ON()); |
以下のように編集し直せば、LDAP認証をさせる場合でもUserminを使用することができます。
if ( $code == PAM_PROMPT_ECHO_OFF() ) { |
ここまでの設定で、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サーバのベーシック認証もLDAPに対応させます。Webサーバへのデータ転送にはWebDAVを利用することにし、認証時の通信も暗号化できるようにApacheをSSLに対応させて構築します。今回は以下のソフトウェアを利用して検証しました。
まずはApacheとOpenSSLのアーカイブを展開しておきます。
$ tar zxvf apache_1.3.26.tar.gz |
両アーカイブを展開したら、OpenSSLをコンパイルします。
$ cd openssl-0.9.6d |
ここではコンパイルのみを行い、インストールは実行しません。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 |
これで、ApacheのMakefileが適切に書き換えられます。Apacheのソースを展開したディレクトリに移動して、Apacheをコンパイルします。
$ cd ../apache_1.3.26 |
ここで、SSLの設定を行います。apache_1.3.26ディレクトリ内でmake certificateを実行して質問に答えれば、テスト用の証明書やプライベート鍵を生成できます。テスト用といっても、通信の暗号化は可能です。
$ make certificate |
以上の作業が終わったらインストールを行います。
# make install |
Apacheのベーシック認証にLDAPを利用させるため、mod_auth_ldapモジュールを組み込みます。まずはmod_auth_ldapのアーカイブを展開し、生成されたディレクトリに移動します。
$ tar mod_auth_ldap.tar.gz |
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 |
Apacheについては、特にWebDAVとLDAP関連の部分を中心に説明します(編注)。
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> |
Windowsで[ネットワークコンピュータ](編注)→[ネットワークプレース]の追加ウィザードを起動し、ネットワークプレースとして、
https://WebサーバのIPアドレス/webdav |
を設定すると、SSL接続の確認後にパスワード入力を要求されます。ここで認証に成功すると、WebDAVの利用が可能になります。
今回は、特に「パスワードを一元管理する」「平文でパスワードを流さない」「ユーザーの使い勝手」を中心に、さまざまなサーバとの連携方法を説明しました。ただし、前回も説明したように、これ以外の要素も考慮した設定を入れ込む必要があると思います。
また、パスワードを一元管理することは、管理が楽になる半面でデメリットもあります。1つのパスワードが漏れるだけで複数台のサーバにアクセスできてしまうことや、あるマシンにはログインできるがほかのマシンにはできないといったアクセス制御を別の形で行う必要があることなどです。
セキュリティリスクや運用の容易さなどのバランスを考えながら、どうすればうまくいくのかを環境に合わせて考えていただければと思います。
Copyright © ITmedia, Inc. All Rights Reserved.