Apache【mod_auth_basic】でBasic認証

こんにちは。サイオステクノロジーの木村です。
今回は、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 のデフォルトのテストページが表示されれば、インストールと起動が正常に完了していることを確認できます。

Rocky Linux 9 では、デフォルトで firewalld が有効化されており、HTTP が許可されていない場合、外部からのアクセスが制限されます。アクセス可能にするには以下のコマンドを実行します。(以下は HTTP および HTTPS を許可する場合)
$ 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>";
?>
Apache 上で PHP を動かすため、モジュールがインストールされていない場合は、以下のコマンドでインストールします。
$ 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で作成したページに遷移し、ユーザー名が表示されます。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です