サーバーのユーザーアカウントでApacheのユーザー認証を行う (CentOS/RedHat)

投稿者 : OSCA

[PR] "出川哲朗の充電させてもらえませんか?"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

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 という記述が基本認証で入力したアカウント名となります。

Apacheのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca