--- title: "Basic認証でアクセス制限する方法|.htaccessと.htpasswdの設定" description: "Apacheサーバーでのベーシック認証の設定方法を解説します。.htaccessと.htpasswdファイルの書き方、特定IPのみ許可する組み合わせ設定、パスワード生成方法、よくあるエラーの対処法をまとめました。" date: 2026-07-09 category: セキュリティ tags: [Basic認証] related_tools: [htaccess] draft: false --- **Basic認証(ベーシック認証)** は、URLにアクセスしたときにIDとパスワードの入力を求めるアクセス制限の方法です。Apacheサーバーでは `.htaccess` と `.htpasswd` ファイルで設定できます。 ## 用途 - 公開前のWebサイト・ステージング環境へのアクセス制限 - 管理者専用ページの保護 - 特定メンバーだけ閲覧できるコンテンツの制限 ## 設定ファイルの構成 ``` /var/www/html/ ← Webルートディレクトリ ├── .htaccess ← 認証設定(アクセス制限をかけるディレクトリに置く) └── .htpasswd ← ユーザー名とハッシュ化パスワードの一覧 ``` `.htpasswd` はWebルートの外(ドキュメントルートの外)に置くのが理想ですが、`.htaccess` でアクセスを禁止する方法でも対処できます。 ## .htpasswdファイルの作成 ### htpasswdコマンドで生成(推奨) ```bash # 新規ファイルを作成してユーザーを追加(-c オプション) htpasswd -c /path/to/.htpasswd username # 既存ファイルにユーザーを追加(-c なし) htpasswd /path/to/.htpasswd username2 # bcryptハッシュを使う場合(より安全) htpasswd -B /path/to/.htpasswd username ``` 実行後にパスワードの入力を求められます。`.htpasswd` の内容は以下のような形式になります: ``` username:$apr1$xxxxx$xxxxxxxxxxxxxxxxxxxxxxx username2:$2y$05$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` ### オンラインツールで生成 サーバーへのSSHアクセスができない場合、「htpasswd generator」で検索するとブラウザ上でハッシュを生成できるツールがあります。生成されたハッシュを `.htpasswd` に貼り付けます。 ## .htaccessの設定 ### 基本的な設定 ```apache AuthType Basic AuthName "Protected Area" AuthUserFile /var/www/.htpasswd Require valid-user ``` | ディレクティブ | 説明 | |---|---| | `AuthType Basic` | 認証方式(Basicを指定) | | `AuthName` | ブラウザのダイアログに表示される説明文 | | `AuthUserFile` | `.htpasswd` ファイルの絶対パス | | `Require valid-user` | 有効なユーザーのアクセスを許可 | **重要**: `AuthUserFile` には絶対パスを指定します。相対パスは動作しません。サーバー上のパスは `phpinfo()` や `pwd` コマンドで確認できます。 ### 特定ユーザーのみ許可する ```apache AuthType Basic AuthName "Admin Only" AuthUserFile /var/www/.htpasswd Require user admin ``` `Require user ユーザー名` で特定ユーザーのみを許可できます。 ### 特定IPは認証なし・それ以外は認証あり ```apache AuthType Basic AuthName "Protected Area" AuthUserFile /var/www/.htpasswd # Apache 2.4以降 Require ip 192.168.1.0/24 Require valid-user ``` 社内ネットワークのIPからはパスワードなし・外部からはパスワード入力を求める設定例です。 ## WordPressへのBasic認証設定時の注意 WordPressにBasic認証をかけると、WordPressの内部リクエスト(cronなど)が認証で弾かれることがあります。 WordPress管理画面(`/wp-admin/`)を除外する設定: ```apache # ルートに置く .htaccess AuthType Basic AuthName "Protected Area" AuthUserFile /var/www/.htpasswd Require all denied # wp-adminディレクトリへのアクセスは許可 Require ip 自社IPアドレス Require valid-user ``` また、XMLRPCへの直接アクセスをBasic認証で保護することで、ブルートフォース攻撃も防げます。 ## .htpasswdファイルの保護 `.htpasswd` がWebルート内にある場合、直接アクセスされないように `.htaccess` に以下を追加します: ```apache Require all denied ``` ## よくあるエラーと対処 ### 500 Internal Server Error `.htaccess` の記述ミスが原因であることがほとんどです。 **確認ポイント:** - `AuthUserFile` のパスが正しいか(絶対パスを使っているか) - `.htpasswd` が存在し、読み取り可能なパーミッションか(644推奨) - Apache の `AllowOverride` が `All` または `AuthConfig` になっているか ### パスワードを入力しても認証されない - `.htpasswd` のユーザー名・パスワードが正しく生成されているか確認する - パスワードハッシュの形式がApacheのバージョンと対応しているか確認する(bcryptを使う場合は `mod_authn_core` が必要) ### Basic認証の限界 Basic認証は簡易的なアクセス制限です。通信がHTTPSでない場合、ID・パスワードが平文で送信されます。本番環境では必ずHTTPS(SSL)と組み合わせて使用してください。