「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モジュールの有効化について説明しました。