0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BASIC認証の設定方法

0
Posted at

BASIC認証の設定方法

完成物: .htaccess と .htpasswd によるディレクトリ単位のBASIC認証

環境: Apache(Xサーバーなどのレンタルサーバー含む)、Linux

はじめに

特定のディレクトリへのアクセスを制限したい場合、Apacheの .htaccess を使ったBASIC認証が手軽に導入できます。この記事では、.htaccess と .htpasswd を組み合わせてBASIC認証を設定する手順を解説します。

完成イメージ

設定完了後、対象ディレクトリにブラウザでアクセスすると、以下のような認証ダイアログが表示されます。

  • ユーザー名とパスワードを入力しないとコンテンツにアクセスできない

  • 認証に失敗すると 401 Unauthorized が返る

  • 認証が通れば通常通りコンテンツが表示される

環境構築

Apache が導入済みであれば追加インストールは不要です。SSH接続できる環境であれば、htpasswd コマンドが使えるか確認しておきます。

htpasswd --version

実装

全体構成

/home/ユーザーID/ドメイン名/
├── public_html/          # 公開ディレクトリ
│   └── secret/
│       └── .htaccess     # BASIC認証の設定ファイル
└── .htpasswd             # 認証情報ファイル(公開ディレクトリ外に置く)

Step 1:.htaccess ファイルを設定する

BASIC認証をかけたいディレクトリに .htaccess ファイルを作成し、以下の内容を記述します。

AuthType Basic
AuthName "Restricted Area"
AuthUserFile /home/ユーザーID/ドメイン名/.htpasswd
Require valid-user

| ディレクティブ | 説明 |

|---|---|

| AuthType | 認証方式。BASIC認証の場合は Basic を指定 |

| AuthName | 認証ダイアログに表示されるメッセージ |

| AuthUserFile | .htpasswd ファイルの絶対パス |

| Require valid-user | .htpasswd に登録されたユーザーのみ許可 |

💡 なぜこう書くか: AuthUserFile には必ず絶対パスを指定します。相対パスでは動作しません。また、.htpasswd はウェブ公開ディレクトリ(public_html 配下)の外に置くことで、ファイル自体への直接アクセスを防げます。

Step 2:.htpasswd ファイルを作成する

認証に使うユーザー名とパスワードのハッシュを .htpasswd に記述します。

方法A:コマンドで生成する(SSH接続できる場合)

# 新規作成(-c オプションでファイルを新規作成)
htpasswd -c /home/ユーザーID/ドメイン名/.htpasswd ユーザー名

# 2人目以降の追加(-c を付けると上書きされるので注意)
htpasswd /home/ユーザーID/ドメイン名/.htpasswd ユーザー名2

方法B:オンラインツールで生成する(SSH接続できない場合)

  1. htpasswd Generator などのツールでユーザー名とパスワードを入力して生成する

  2. 出力された内容を .htpasswd としてサーバーにアップロードする

生成される .htpasswd の中身は以下のような形式です。

username:$apr1$xxxx$xxxxxxxxxxxxxxxxxxxxxxxx

Step 3:設定を確認する

ブラウザで対象ディレクトリのURLにアクセスし、認証ダイアログが表示されることを確認します。

# curlで動作確認する場合
curl -u ユーザー名:パスワード https://example.com/secret/

# 認証なしでアクセスして 401 が返ることを確認
curl -I https://example.com/secret/

ハマりポイント

| 症状 | 原因 | 対処 |

|---|---|---|

| 500 Internal Server Error | .htaccess の記述ミス、またはサーバーが AllowOverride を許可していない | 記述を見直す。サーバー設定で AllowOverride AuthConfig を許可する |

| 401が出続けて認証できない | AuthUserFile のパスが間違っている、またはファイルが存在しない | 絶対パスを再確認。ls -la でファイルの存在を確認する |

| .htpasswd にアクセスできてしまう | .htpasswd を公開ディレクトリ内に置いている | 公開ディレクトリ外に移動し、AuthUserFile のパスを更新する |

| パスワードが通らない | ハッシュ方式が異なる、または .htpasswd の改行コードがCRLF | MD5またはBcryptで再生成する。改行コードをLFに変換する |

改善の余地

  • 特定のIPアドレスは認証をスキップするよう Require ディレクティブを組み合わせる

  • HTTPS未導入の場合、BASIC認証の資格情報が平文で流れるためSSL/TLSを導入する

  • より強固なアクセス制御が必要な場合はDigest認証やOAuthへの移行を検討する

まとめ

  • .htaccess に AuthType Basic などの設定を記述することでディレクトリ単位のBASIC認証が実現できる

  • .htpasswd は公開ディレクトリの外に配置し、AuthUserFile には絶対パスを指定する

  • SSH接続できる環境では htpasswd コマンドで安全にパスワードを生成できる

  • BASIC認証は簡易的なアクセス制限手段であり、HTTPS環境での利用が前提

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?