2026年7月6日
2026年7月6日
Apacheでbasic認証のパスワードを作成する方法(htpasswd)
はじめに
開発中のサイトや管理画面をBasic認証で保護したい・htpasswdコマンドの使い方がわからない・既存のパスワードファイルにユーザーを追加・削除する方法を知りたいといった場合の解決方法を解説します。
症状・原因
htpasswdコマンドが見つからない(apache2-utilsがインストールされていない).htpasswdファイルのパスが.htaccessと合っていない- Basic認証のダイアログが表示されるが正しいパスワードを入力しても拒否される
Require valid-userが機能しない(mod_auth_basicが無効)
解決手順
ステップ1:htpasswd コマンドをインストールする
# ✅ Ubuntu/Debian に apache2-utils をインストール
sudo apt-get install apache2-utils
# ✅ CentOS/RHEL に httpd-tools をインストール
sudo yum install httpd-tools
# または
sudo dnf install httpd-tools
# ✅ インストール確認
htpasswd -v
# → Htpasswd tool for Apache user authentication
# ✅ mod_auth_basic が有効か確認
sudo apache2ctl -M | grep auth_basic
# → auth_basic_module (shared) ← 有効
# → 表示されない場合は sudo a2enmod auth_basic
ステップ2:パスワードファイルを作成する
# ✅ 新規パスワードファイルを作成(-c オプション)
# 警告: -c は既存ファイルを上書きする
sudo htpasswd -c /etc/apache2/.htpasswd alice
# → New password: (パスワードを入力)
# → Re-type new password:
# → Adding password for user alice
# ✅ 既存ファイルにユーザーを追加(-c なし)
sudo htpasswd /etc/apache2/.htpasswd bob
# ✅ パスワードをコマンドラインで指定(自動化用・セキュリティ注意)
sudo htpasswd -b /etc/apache2/.htpasswd carol "mypassword"
# ✅ bcrypt ハッシュで保存(より安全・Apache 2.4+)
sudo htpasswd -B /etc/apache2/.htpasswd dave
# ✅ ユーザーを削除
sudo htpasswd -D /etc/apache2/.htpasswd alice
# ✅ パスワードファイルの内容確認
cat /etc/apache2/.htpasswd
# → bob:$apr1$... ← MD5ハッシュ
# → dave:$2y$... ← bcryptハッシュ
ステップ3:.htaccess でBasic認証を設定する
# ✅ ディレクトリ全体を Basic 認証で保護
# /var/www/html/.htaccess または
# /etc/apache2/sites-available/example.conf の Directory ブロック内
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
# ✅ 特定ユーザーのみ許可
AuthType Basic
AuthName "Admin Only"
AuthUserFile /etc/apache2/.htpasswd
Require user alice bob
# ✅ IP アドレスとBasic認証の組み合わせ(OR 条件)
AuthType Basic
AuthName "Restricted"
AuthUserFile /etc/apache2/.htpasswd
<RequireAny>
Require ip 192.168.1.0/24
Require valid-user
</RequireAny>
# ✅ Apache の設定ファイルに直接記述(推奨)
<Directory /var/www/html/admin>
AuthType Basic
AuthName "Admin Panel"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
ステップ4:Basic認証の問題を診断する
# ✅ 認証が機能するか curl でテスト
curl -u alice:password http://example.com/admin/
# → 200 OK ← 認証成功
# → 401 Unauthorized ← 認証失敗
# ✅ 認証なしでアクセスすると401が返ることを確認
curl -sI http://example.com/admin/
# → HTTP/1.1 401 Authorization Required
# → WWW-Authenticate: Basic realm="Admin Panel"
# ✅ エラーログで詳細を確認
sudo tail -f /var/log/apache2/error.log
# → AH01617: user alice: authentication failure ← パスワード不一致
# → AH01620: user alice not found ← ユーザーなし
# ✅ .htpasswd ファイルのパーミッション確認
sudo chmod 640 /etc/apache2/.htpasswd
sudo chown root:www-data /etc/apache2/.htpasswd
ステップ5:WordPress の wp-admin を Basic 認証で二重保護する
# ✅ wp-admin を Basic 認証で保護(不正アクセス対策)
# /etc/apache2/sites-available/wordpress.conf
<Directory /var/www/html/wp-admin>
AuthType Basic
AuthName "WordPress Admin"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
# ✅ WordPress の AJAX は認証なしで通過させる
</Directory>
# ✅ wp-login.php だけを保護
<Files wp-login.php>
AuthType Basic
AuthName "WordPress Login"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Files>
# ✅ AJAX アクション(admin-ajax.php)は除外
<Files admin-ajax.php>
Satisfy Any
Allow from all
</Files>
# ✅ WordPress 用のユーザーを作成
sudo htpasswd -B /etc/apache2/.htpasswd wpuser
sudo systemctl reload apache2
# ✅ 設定確認
curl -u wpuser:password -sI http://example.com/wp-admin/
# → HTTP/1.1 302 ← WordPress ログインにリダイレクト(Basic認証通過)
注意事項
.htpasswdファイルはWebからアクセスできない場所(/etc/apache2/など)に保存してください。DocumentRootの下(/var/www/html/)に置くとファイルがダウンロードされる可能性があります- Basic認証はHTTPS通信でのみ使用してください。HTTPの場合、パスワードがBase64エンコードで送信されるだけで暗号化されません
まとめ
Apacheのhtpasswd設定は①apt-get install apache2-utilsでインストール・mod_auth_basicが有効か確認、②htpasswd -cで新規ファイル作成・htpasswdでユーザー追加・-Bでbcryptハッシュ・-Dでユーザー削除、③.htaccessにAuthType Basic/AuthUserFile/Require valid-userを設定・IP制限と組み合わせ・設定ファイルのDirectoryブロックへ記述、④curl -uで認証テスト・エラーログで詳細確認・.htpasswdのパーミッション(640・root:www-data)設定、⑤WordPressのwp-admin/wp-login.phpを二重保護・admin-ajax.phpは除外の手順で対応します。