【Linux】Apache HTTPサーバーでBasic認証用資格情報を管理する方法

目次

概要

ApacheやNginxなどのWebサーバーでBasic認証を導入する際、認証用ファイルを生成・管理するためのツールがhtpasswdです。このツールは、ユーザー名と暗号化されたパスワードのペアを専用のファイルに保存し、特定のディレクトリへのアクセス制限をかける場面で活用されます。Debian系やRHEL系の主要なディストリビューションで広く利用可能です。

仕様(引数・オプション)

構文

htpasswd [オプション] パスワードファイル ユーザー名

主要なスイッチ

スイッチ説明
-cパスワードファイルを新規作成します。既存のファイルは上書きされます。
-bパスワードをコマンドライン引数から直接入力するバッチモードです。
-nファイルを更新せず、標準出力に結果のみを表示します。
-nb標準出力モードでパスワードを直接指定して実行します。

主要なオプション

オプション説明
-mMD5アルゴリズムを使用してパスワードを暗号化します(デフォルト)。
-dcryptアルゴリズムを使用して暗号化します(WindowsやNetwareを除く)。
-sSHAアルゴリズムを使用して暗号化します。
-pパスワードを暗号化せず、平文のまま保存します(非推奨)。
-D指定したユーザーをファイルから削除します。
-i標準入力からパスワードを読み込みます。
-Bbcryptアルゴリズムを使用して暗号化します(高い堅牢性)。
-Cbcryptの計算コストを指定します(デフォルトは5)。
-v指定したユーザー名とパスワードが一致するか検証します。

基本の使い方

管理システムの内部ドキュメント用認証ファイルを新規作成し、管理者ユーザーを追加します。

BASH

# apache2-utils(Ubuntu/Debian)または httpd-tools(RHEL/CentOS)のインストール
sudo apt update && sudo apt install -y apache2-utils

# /etc/apache2/.htpasswd-docs ファイルを新規作成し mori ユーザーを追加
sudo htpasswd -c /etc/apache2/.htpasswd-docs mori

Result

New password: 
Re-type new password: 
Adding password for user mori

実践コマンド

社内ポータルサイトの運用において、パスワードプロンプトを表示させず、スクリプト等で自動的にユーザーを追加するシナリオです。

BASH

# バッチモードを使用して mori ユーザーのパスワードを直接設定
# 既存のファイル /etc/apache2/.htpasswd-portal に追加
sudo htpasswd -b /etc/apache2/.htpasswd-portal mori StrongPassword2026

# 登録内容の確認(ハッシュ化されたパスワードを確認)
grep mori /etc/apache2/.htpasswd-portal

Result

mori:$apr1$uD6X8V/S$vG7I3hK9lJpRmE2fNq1A0/

カスタムポイント

  • ファイルパス: /etc/apache2/.htpasswd-docs を、実際のWebサーバー設定(AuthUserFile)で指定したパスに変更してください。
  • ユーザー名: mori の箇所を、システムを利用する各担当者の名前に変更して管理してください。
  • 暗号化方式: セキュリティ要件に応じて、-B オプションを使用してより強固なbcrypt形式を選択することを検討してください。

注意点

  1. コマンド履歴の露出: -b オプションでパスワードを直接指定すると、シェルの実行履歴(history)にパスワードが残るため、共用サーバーでは注意が必要です。
  2. ファイルの上書き: -c オプションは常にファイルを新規作成(または初期化)するため、2人目以降のユーザーを追加する際は必ず -c を除外して実行してください。
  3. 権限管理: 生成されたパスワードファイルはWebサーバーの実行ユーザー(www-data等)が読み取れる権限である必要がありますが、外部から直接URLで閲覧されないよう、ドキュメントルート外に配置してください。
  4. セキュリティ: 平文保存の -p オプションは極めて危険であるため、特殊なデバッグ用途を除き使用しないでください。

応用

特定のユーザーが正しいパスワードを知っているか、ファイルを書き換えずに検証する例と、特定のユーザーを削除する例です。

BASH

# パスワードの整合性を検証(一致すれば正解、不一致ならエラーを表示)
htpasswd -v /etc/apache2/.htpasswd-portal mori

# 特定のプロジェクトから離脱した mori ユーザーの情報を削除
sudo htpasswd -D /etc/apache2/.htpasswd-portal mori

Result

# 検証成功時
Password for user mori correct.

# 削除成功時
Deleting password for user mori

まとめ

htpasswdコマンドは、Webサーバーにおけるアクセス制御の基礎となるBasic認証ファイルを効率的に管理するためのツールです。初回作成時には新規作成オプションを、運用の継続時には追加・削除・検証の各オプションを使い分けることで、安全な認証環境を維持できます。特にパスワードのハッシュ化アルゴリズムの選択や、コマンド履歴への配慮といった運用上の注意点を遵守することで、情報漏洩のリスクを最小限に抑えつつ、特定のディレクトリに対する確実な保護を実現することが可能です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次