mod_auth_pamのインストール
バージョン | mod_auth_pam 1.0a | |
Apache 1.3.20 | ||
OS | RedHat 7.0J (Linux 2.2.16-22) | |
ホームページ | http://pam.sourceforge.net/mod_auth_pam/ | |
ダウンロード | http://pam.sourceforge.net/mod_auth_pam/ |
Webコンテンツへの認証に、OSのアカウントを使う方法です。パスワードを一元管理できるため、イントラ系のシステムでは便利ではないでしょうか。これを実現するには、mod_auth_pamというApacheのモジュールを使用します。
・・・のはずでしたが、mod_auth_pamには、後述するような問題がありました。とりあえず書いてしまったので掲載していますが、mod_auth_pamではなく、mod_auth_externalを使うことをお勧めします。mod_auth_externalについては以下を参考にしてください。
Apacheのインストール
まずはApacheをDSOサポート付きでインストールします。
$ tar xvfz apache_1.3.20.tar.gz $ cd apache_1.3.20 $ ./configure --enable-rule=SHARED_CORE --enable-module=so $ make $ su # make install
mod_auth_pamのインストール
次のようにしてmod_auth_pamをDSO用でインストールします。
$ tar xvfz mod_auth_pam.tar.gz $ cd mod_auth_pam-1.0a $ make $ su # make install
Apacheをリスタートします。
# apachectl restart
PAMの設定
mod_auth_pamのmake installを実行するとhttpd.confが更新され、/etc/pam.d/httpdにPAMの設定ファイルが作られます。作られた設定ファイルではpam_pwdb.soを使用していますが、私の環境ではこのままでは動作しなかったので、次のように設定を変更しました。
auth required pam_unix.so account required pam_unix.so
シャドウパスワードファイルの権限設定
以下の設定を行うと、CGIのセキュリティホールを突いてシャドウパスワードを窃取される危険性があります。問題を理解できないのであれば、設定しないようにしてください。
pam_unix.soでは、シャドウパスワードファイル/etc/shadowを参照して認証が行われます。このファイルはroot以外での読み書きが禁止されています。Apacheはhttpd.confのUser命令で設定されたユーザー(デフォルトはnobody)権限の下で認証処理を行います。このままではApacheがシャドウパスワードファイルにアクセスできないため、認証処理できません。
そこでシャドウパスワードファイルのパーミッション設定をいじってアクセスできるようにするのですが、だからと言ってchmod 655 /etc/shadowなどとやってしまっては、シャドウパスワードの意味がなくなってしまいます。そこで、シャドウパスワードにアクセスできる新しいグループを設定します。
まず、shadow-readerというグループを作ります。
# groupadd shadow-reader
次に、/etc/groupを編集してユーザーnobodyをshadow-readerに加えます。(555の部分は環境によって異なります)
shadow-reader:x:555:nobody
/etc/shadowのグループを変更します。
# chgrp shadow-reader /etc/shadow # chmod g+r /etc/shadow
これで認証できるようになるのですが、adduserなどでシャドウパスワードファイルが更新されると、また元の権限に戻ってしまいます。ですので、上の操作をその都度行う必要があります。
Apacheの認証の設定
.htaccessファイルなどで、次のような設定をしておけばPAMによる認証が行われます。
AuthName "Restricted Access Area" AuthType Basic require valid-user