2001/11/28
バージョン 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