LinuxにインストールされたApacheでユーザー認証を設定する場合、「.htpasswd」ファイルなどを利用したパスワード認証が一般的ですが、新たに「.htpasswd」でのユーザー管理を増やす事が煩わしい場合もあります。 既に OS のユーザーが適切に作業員ごとに作成されている場合などは、OS のアカウントとパスワードを利用して認証させれば手っ取り早いなぁと思う時もあるわけです。
ここでは、Apacheでの基本認証にOSのユーザーアカウントを利用する方法について説明します。
前提
ここで前提としている環境は以下の通りです。
- CentOS 6
- Apache 2.2.xx (yumでインストールされたもの)
モジュールのインストール
OSのアカウント/パスワードを利用して基本認証を行うために、以下のモジュールを yum でインストールします。
- mod_authnz_external
- pwauth
yum で mod_authnz_external をインストールしようとすると、pwauth に依存しているため一緒にインストールできました。
[root@myhost ~]# yum install mod_authnz_external
(略)
Dependencies Resolved
===============================================================================
Package Arch Version Repository Size
===============================================================================
Installing:
mod_authnz_external x86_64 3.2.6-1.el6 epel 25 k
Installing for dependencies:
pwauth x86_64 2.3.10-1.el6 epel 14 k
Transaction Summary
===============================================================================
Install 2 Package(s)
Total download size: 39 k
Installed size: 82 k
Is this ok [y/N]: y
(略)
Installed:
mod_authnz_external.x86_64 0:3.2.6-1.el6
Dependency Installed:
pwauth.x86_64 0:2.3.10-1.el6
Complete!
インストールが完了したことを確認するために、インストールしたモジュールに関連したファイルが作成されたかを確認します。
[root@myhost ~]# ls -al /etc/httpd/modules/
total 1488
(略)
-rwxr-xr-x 1 root root 16216 May 7 2012 mod_authnz_external.so
(略)
[root@myhost ~]# ls -al /etc/httpd/conf.d/
total 24
(略)
-rw-r--r-- 1 root root 409 Jan 24 19:34 authnz_external.conf
(略)
設定
/etc/httpd/conf.d/authnz_external.conf を編集します。
Locationディレクティブのコメントアウトを外して、下記のように設定しました。ここではWEBサイト全て(ルート以下)に認証をかけました。 SSLでの接続が必要な場合には、 SSLRequireSSL のコメントも外してください。
LoadModule authnz_external_module modules/mod_authnz_external.so
DefineExternalAuth pwauth pipe /usr/bin/pwauth
#
# see also: http://code.google.com/p/mod-auth-external/wiki/ConfigApache22
#
<Location "/">
# Require SSL connection for password protection.
#SSLRequireSSL
AuthType Basic
AuthName "Protected Contents."
AuthBasicProvider external
AuthExternal pwauth
require valid-user
</Location>
/etc/pam.d/pwauth を編集します。 デフォルトの設定をコメントアウトし、下記のように設定しました。
#%PAM-1.0
#auth include password-auth
#account include password-auth
auth include system-auth
account include system-auth
session include system-auth
以上で基本認証の設定完了。
Apacheを再起動します。
[root@myhost ~]# /etc/init.d/httpd restart
確認
設定が完了したら、さっそくWEBサイトにアクセスして基本認証のダイアログがでること、またOSのアカウントとパスワードでログインできることを確認しましょう。
また、apacheのログ( /var/log/httpd/access_log ) を見ると、アクセス毎に認証ユーザー名が記載されているはず。 出力されていない場合は、Apache のログフォーマットを見直しましょう。 LogFormatという設定行です。
(サンプル)
LogFormat "%h %l %u %t \"%r\" %>s %b" common
上記のようにログのフォーマットを記述しますが、%u という記述が基本認証で入力したアカウント名となります。