OSCA

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

投稿日:2013年1月25日

このエントリーをはてなブックマークに追加

LinuxにインストールされたApacheで基本認証(BASIC認証)を設定する場合、「.htpasswd」ファイルなどを利用したパスワード認証が一般的ですが、「.htpasswd」での新たなユーザー管理方法を増やす事が煩わしい場合もあります。 OSのユーザーが適切に作業員ごとに作成されている場合などは、OSのアカウント/パスワードを利用して基本認証させれば手っ取り早いなぁと思う時もあるわけです。

ここでは、Apacheでの基本認証にOSのユーザーアカウントを利用する方法について説明します。

前提

ここで前提としている環境は以下の通りです。

モジュールのインストール

OSのアカウント/パスワードを利用して基本認証を行うために、以下のモジュールを yum でインストールします。

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

著者 : OSCA

OSCA

個人として何か一つでも世の中の多くの人に使ってもらえるサービスを作ろうと日々奮闘中のエンジニア。 夜景好きのアマチュア写真家でもあります。
Twitter : @oscaphoto
Facebook : OSCA