こんにちは。サイオステクノロジーの木村です。
今回は、mod_auth_basic でBasic認証する手順について記載します。
mod_auth_basic は、Apache HTTP Server におけるBasic認証を実現するモジュールです。検証環境などで、まずは簡易的に認証を導入したい場合などに手軽に利用できる仕組みとして便利です。
以下の手順ではHTTPで説明していますが、通信内容が平文で送信されるためHTTPSを利用するなど注意が必要です。
Apacheのモジュールを使用したOIDC認証について記載した以下の記事もございますので、あわせてご参照ください。
Apache【mod_auth_openidc】×【Entra ID】:OpenID Connect認証でシングルサインオン
検証環境
Rocky Linux 9.0
Apache 2.4.62
手順
Apache のインストールと確認
・インストール・バージョン確認
$ sudo dnf install -y httpd
$ httpd -v
・モジュールの確認
mod_auth_basic は Apache HTTP Server のコアモジュールの一つであり、Apache をインストールすると基本的にデフォルトで含まれます。以下でモジュールがロードされているか確認します。
$ httpd -M | grep auth_basic_module
auth_basic_module (shared)
と表示されればモジュールがロードされています。
・Apache の起動と自動起動設定
$ sudo systemctl start httpd
$ sudo systemctl enable httpd
ブラウザで http://[サーバIP]/
にアクセスし、Apache のデフォルトのテストページが表示されれば、インストールと起動が正常に完了していることを確認できます。
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --reload
認証ファイルの作成
Basic認証で使用するユーザー名とパスワードを格納する「認証ファイル」を作成します。
認証情報はファイル以外にも、LDAP サーバーやデータベースなどと連携して管理することもできます。
・認証ファイルの作成とユーザ追加
$ sudo htpasswd -c /etc/httpd/.htpasswd [ユーザー名]
-c は新規作成を意味します。2人目以降を追加する場合は -c を付けずに実行してください。
コマンドを実行すると、パスワードの入力を求められるので、パスワードを入力します。
・認証ファイルの確認
$ cat /etc/httpd/.htpasswd
認証後に表示するページの作成
今回はPHPで作成します。/var/www/html/secure/index.php
を以下の内容で作成します。
<?php
echo "<h1>Basic認証テスト</h1>";
echo "<p>こんにちは、" . htmlspecialchars($_SERVER['REMOTE_USER']) . " さん.</p>";
?>
$ sudo dnf install -y \
php php-cli php-common php-fpm php-mbstring php-xml php-json
Basic認証の設定
・設定ファイルの作成
$ sudo vi /etc/httpd/conf.d/basic-auth.conf
以下の内容を記載し保存します。
<Location "/secure/">
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/httpd/.htpasswd
Require valid-user
</Location>
・設定の反映
設定を反映するため Apache を再起動します。
$ sudo systemctl restart httpd
動作確認
ブラウザでhttp://[サーバIP]/secure/index.php
にアクセスします。
ユーザー名とパスワードの入力を求めるダイアログが表示されますので「認証ファイルの作成」の手順で作成したユーザー名とパスワードを入力します。
PHPで作成したページに遷移し、ユーザー名が表示されます。