この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:男石
更新日時:2026-06-11 07:07:02

タイトル: .htaccess でベーシック認証
SEOタイトル: Apache .htaccess でベーシック認証を設定する手順(.htpasswd / htpasswd / AuthType Basic / トラブルシュート)

この記事の要点
  • Apache のベーシック認証.htaccess.htpasswd の 2 ファイルで設定する
  • .htpasswdhtpasswd コマンドで作成し、ID とハッシュ化パスワードを保存
  • .htaccess には AuthUserFile / AuthName / AuthType Basic / require valid-user を記述
  • .htpasswdドキュメントルート外に置くのが基本(ブラウザから直接アクセスされない場所)
  • ベーシック認証は常に HTTPS と組み合わせる。HTTP だとパスワードが平文で送られる

ベーシック認証とは

Apache HTTP Server が標準でサポートするもっとも簡単な認証方式です。ブラウザがダイアログを表示してユーザー ID とパスワードを入力させ、Apache がそれを検証します。.htaccess.htpasswd の 2 ファイルだけで設定でき、開発中サイトの非公開化や管理画面の保護でよく使われます。

設定の全体像

  1. htpasswd コマンドで .htpasswd(ID とハッシュ化パスワードのファイル)を作成
  2. 保護したいディレクトリに .htaccess を配置し、認証ディレクティブを記述
  3. Apache を再起動またはリロードして反映

1. .htpasswd の作成

htpasswd コマンドで作成します。-c はファイルを新規作成(既存ファイルがあれば上書き)、-b はパスワードを引数で渡す、-m は MD5 ハッシュ(デフォルトで安全)です。

# 新規作成(既存があれば上書き)
htpasswd -b -c -m .htpasswd admin secret

# 既存ファイルにユーザー追加(-c を外す)
htpasswd -b -m .htpasswd user2 password2

# 対話的に入力(パスワードがコマンド履歴に残らないので推奨)
htpasswd -m .htpasswd admin

# ユーザー削除
htpasswd -D .htpasswd user2

# bcrypt(より強いハッシュ)
htpasswd -B -c .htpasswd admin

作成された .htpasswd は以下のような内容です。

admin:$apr1$abc1234$XYZ.encryptedhash.here/
user2:$apr1$def5678$ABC.encryptedhash.here/

2. .htaccess の記述

保護したいディレクトリに .htaccess を置きます。AuthUserFile.htpasswd の絶対パスを指定してください。

AuthUserFile /var/www/private/.htpasswd
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user

ディレクティブの意味

ディレクティブ役割
AuthUserFile.htpasswd の絶対パス。相対パスは不可
AuthNameブラウザ認証ダイアログに表示されるrealm(領域名)
AuthType認証方式。Basic または Digest
require valid-user.htpasswd に登録された任意のユーザーで OK
require user admin特定ユーザーのみ許可
require group editorグループ単位で許可(AuthGroupFile 必要)

3. Apache の AllowOverride を確認

.htaccess を有効にするには httpd.conf 側で AllowOverride AuthConfig 以上が設定されている必要があります。


    AllowOverride AuthConfig
    # または全許可
    # AllowOverride All

変更後は Apache をリロードします。

# Debian/Ubuntu
sudo systemctl reload apache2

# RHEL/CentOS/Rocky
sudo systemctl reload httpd

# 設定構文チェック
apachectl configtest

.htpasswd の置き場所

.htpasswd はドキュメントルート(公開ディレクトリ)のに置くのが安全です。公開ディレクトリ内に置く場合は、追加で .htaccess に以下を入れて直接アクセスを拒否します。


    Require all denied

セキュリティ上の注意

  • HTTPS 必須 — ベーシック認証は ID とパスワードを Base64 でエンコードして送るだけで、暗号化はしません。HTTP では盗聴される
  • htpasswd -b は履歴に残る — 本番では対話入力か、デプロイスクリプトで自動化
  • パスワードは長く — ブルートフォース対策に最低 12 文字
  • bcrypt (-B) を使う — MD5 (-m) よりはるかに強い
  • 本格的なログイン認証が必要ならアプリ側で実装するか OAuth/SSO を検討

よくあるトラブル

症状原因と対処
500 Internal Server Error.htaccess の構文ミス。apache2ctl configtest でチェック
認証ダイアログが出ないAllowOverrideNoneAuthConfig 以上に
正しいパスワードでも弾かれるAuthUserFile のパスが間違っている、または Apache から読めない権限
.htpasswd を直接ダウンロードできてしまうドキュメントルート外に移動 or Require all denied
ログアウトしたいベーシック認証にはログアウト機能がない。ブラウザを閉じるか、別 URL に異なる credentials でアクセス

特定のパスのみ保護する

.htaccess の代わりに httpd.conf を使うほうが処理が高速で確実です。


    AuthUserFile /var/www/private/.htpasswd
    AuthName "Admin Area"
    AuthType Basic
    require valid-user

nginx で同じことをする場合(参考)

同じ仕組みは nginx でも利用できます。Apache の .htpasswd 形式の認証ファイルがそのまま使えます。

server {
    location /admin/ {
        auth_basic           "Admin Area";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

IP アドレスでの許可と組み合わせる

社内 IP は認証なしで通し、それ以外はベーシック認証、という二段構えもよくあります。


    AuthUserFile /var/www/private/.htpasswd
    AuthName "Admin"
    AuthType Basic

    # 社内 IP は無条件で許可、それ以外はパスワード要求
    
        Require ip 203.0.113.0/24
        Require valid-user
    

認証情報の使い回し(curl の例)

自動化やテストでは curl の -u オプションで認証情報を渡せます。

curl -u admin:secret https://example.com/admin/
# あるいは事前にダイアログを出す
curl --basic --user admin https://example.com/admin/

関連

  • Apache HTTP Server — 本体
  • .htaccess — ディレクトリ単位設定ファイル
  • AllowOverride — .htaccess の許可範囲
  • Digest 認証 — より安全な認証方式
  • Let's Encrypt / HTTPS — ベーシック認証と必ず組み合わせる