【BASIC認証】Internal Server Errorの解決方法

【BASIC認証】Internal Server Errorの解決方法 サーバー

「BASIC認証でInternal Server Errorが出てしまう・・・」

このような場合には、AuthGroupFileディレクティブを確認してください。
AuthGroupFileディレクティブを.htaccessに指定していませんか?

以下の記述を.htaccessから除去すれば、エラーが解消される場合があります。

AuthGroupFile /dev/null

この記事では、AuthGroupFileディレクティブについて解説しています。

本記事の内容

  • AuthGroupFileディレクティブとは?
  • mod_authz_groupfileモジュールとは?
  • mod_authz_groupfileモジュールの有効化

それでは、上記に沿って解説していきます。

AuthGroupFileディレクティブとは?

AuthGroupFileディレクティブの公式説明は、以下。

.htaccessにおいて、次のような形で利用します。

AuthUserFile /etc/apache2/.htpasswd 
AuthGroupFile /var/www/html/basic/grouplist 
AuthName "Please enter your ID and password" 
AuthType Basic 
Require group testgp

そして、AuthGroupFileで指定するファイルの中身は以下となります。

/var/www/html/basic/grouplist

testgp:bsuser tester demoman

testgpに、以下のユーザーが属しているという内容です。

  • bsuser
  • tester
  • demoman

改行することにより、グループを追加できます。
ここで設定したグループに対して、アクセスを許可しています。

Require group testgp

つまり、「AuthGroupFile」と「Require group」はセットと言えます。
ここまでをまとめると、次のようになります。

Require group特定のグループにアクセスを許可
AuthGroupFileグループに属するユーザーを登録

あとは、個々のユーザーの認証次第ということになります。
「testgp」グループに属する「bsuser」ユーザーのパスワード設定については、次の記事で解説しています。

上記記事では、「/etc/apache2/.htpasswd」について説明しています。
.htaccessでは、次のようにして読み込んでいます。

AuthUserFile /etc/apache2/.htpasswd

どうでしょうか?
AuthGroupFileディレクティブについて、理解できたでしょうか?

正直、公式の説明はかなりわかりにくいです。
実際に手を動かせば、理解しやすくなるでしょう。

そのためには、次のモジュールについて理解しておく必要があります。

AuthGroupFileディレクティブは、mod_authz_groupfileモジュールに依存しています。

以上、AuthGroupFileディレクティブについて説明しました。
次は、mod_authz_groupfileモジュールについて説明します。

mod_authz_groupfileモジュールとは?

ここでの説明は、UbuntuにaptコマンドでApacheをインストールした状態を想定しています。
そして、特に設定は変更していないという状態をデフォルトと呼んでいます。

Apacheのインストールについては、次の記事で説明しています。

では、mod_authz_groupfileについて説明していきます。
mod_authz_groupfileは、プレーンテキストファイルを使用したグループ認証の機能を持ちます。

プレーンテキストファイルとは、グループとユーザーを関連付けたテキストファイルのことです。
上記では、「/var/www/html/basic/grouplist」として出てきたファイルを指します。

ここで重要なことを言います。
なんと、mod_authz_groupfileモジュールはデフォルトでは無効化されているのです。

有効化されているモジュール一覧で確認してみます。

$ apache2ctl -M | grep 'authz_groupfile' 

何もヒットしません。
つまり、デフォルトではAuthGroupFileディレクティブは機能しないのです。

実際、次のような「Internal Server Error」が表示されます。

このとき、Apacheのエラーログには以下のようなログが残ります。

/var/www/html/basic/.htaccess: Invalid command 'AuthGroupFile', perhaps misspelled or defined by a module not included in the server configuration

以上、mod_authz_groupfileモジュールについて説明しました。
次は、mod_authz_groupfileモジュールの有効化を説明します。

mod_authz_groupfileモジュールの有効化

Ubuntuであれば、以下のコマンドで有効化できます。

sudo a2enmod authz_groupfile

上記コマンドを実行すると、以下のように表示されます。

$ sudo a2enmod authz_groupfile 
Considering dependency authz_core for authz_groupfile: 
Module authz_core already enabled 
Enabling module authz_groupfile. 
To activate the new configuration, you need to run: 
  systemctl restart apache2

「authz_groupfile」は「authz_core」に依存しているようです。
そして、「authz_core」自体はすでに有効化済みだと示しています。

この変更を反映するには、Apacheを再起動しろとのことです。
Apacheの再起動は、次のコマンドで行います。

$ sudo systemctl restart apache2

再起動が完了したら、mod_authz_groupfileが有効化されているか確認しましょう。

$ apache2ctl -M | grep 'authz_groupfile' 
 authz_groupfile_module (shared)

今回は、ヒットしました。
これで、mod_authz_groupfileモジュールの有効化を確認できました。

以上、mod_authz_groupfileモジュールの有効化について説明しました。

タイトルとURLをコピーしました