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でユーザー削除、③.htaccessAuthType Basic/AuthUserFile/Require valid-userを設定・IP制限と組み合わせ・設定ファイルのDirectoryブロックへ記述、④curl -uで認証テスト・エラーログで詳細確認・.htpasswdのパーミッション(640・root:www-data)設定、⑤WordPressのwp-admin/wp-login.phpを二重保護・admin-ajax.phpは除外の手順で対応します。

お気軽にご相談ください

お見積りへ お問い合わせへ