Basic認証でサイトにパスワードによるアクセス制限がしたい!
当記事ではApacheで運用するWebサイトにベーシック認証を設定する方法を紹介します。
お手軽にWebサイトのアクセス制限するならBasic認証
Webサイトを運用していく中でいろいろな理由で「パスワード認証でアクセス制限を追加したい!」なんてことよくありますよね。
限定ユーザーだけのコンテンツを提供したい
開発中のサイトで内部の人にだけページを見せたい
などなど。
そんな時お手軽にパスワード認証によるアクセス制限を追加できるのがBasic認証と言われる機能です。
Basic認証とは?
Basic認証はApache特有の機能ではなくHTTPというプロトコルレベルで定義された認証のルールのことです。
設定が非常に手軽にできるため簡易的な認証に使用されることが多いです。
設定の流れ
apacheのBasic認証の設定の流れは以下の3ステップです。
- ①.htpasswdファイルの作成とユーザー追加
- ②apache(httpd)の設定
- ③apacheの設定反映(リロード)
①.htpasswdファイルの作成とユーザー追加
【事前準備】パスワード生成コマンドを用意
パスワード生成コマンドmkpasswdコマンドを用意します。
$ sudo yum -y install expect
16文字のランダムなパスワードを出力するには次の通りです。
$ mkpasswd -l 16
a/x8ekqvPixEqf5e
htpasswdコマンドを用意
apacheをインストールしてある場合はすでに入っているので不要。
もしhtpasswdだけ欲しければ以下でインストール。
$ sudo yum install httpd-tools
htpasswdの使い方
ベーシック認証のユーザー管理は.htpasswdというファイルに行を追記します。
新規でファイルを作成するには -cオプションを付けます。
$ sudo htpasswd -c <ファイル名> <ユーザー名>
既存ファイルにユーザー追加するには -c を取って
$ sudo htpasswd <ファイル名> <ユーザー名>
パスワードは対話形式で入力します。
既存ファイルに-cつけて実行するとそれまでのデータが消えちゃうので注意です
htpasswdでアカウント情報の追加
htpasswdコマンドを実行して.htpasswdファイルにユーザー名とパスワード情報を追加していきます。
上記のように1つ1つパスワードを手打ちして対話式でやっていく手もありますが、次々と大量にアカウント発行する時にパスワード生成してからコマンド実行して手入力して、、、だとミスも多くなり心が折れてしまいそうです。
そこで一気にやる方法を紹介します。
1行で実行する内容はこちら。ユーザー名だけ都度書き換えて次々と実行してください。
- 16桁のパスワード生成
- 画面にパスワード出力
- そのパスワードでユーザー作成
$ mkpswd=`mkpasswd -l 16`; echo $mkpswd; htpasswd -b <.htpasswdファイルのパス> <ユーザー名> $mkpswd
a/x8ekqvPixEqf5e ←作られた16桁のパスワードが出力される
Updating password for user testuser
※最初の実行(新規ファイル作成)の場合はhtpasswdに-cを付ける。
※hatpasswd の-bオプションはコマンドラインからパスワード入力。
※ユーザー名は英数字、アンダーバー(_)、ドット(.)、ハイフン(-)で32文字まで。@は使えないので注意
※「英字のoと数字の0」や「英字のIと英字のl」など間違えやすいので注意
②apache(httpd)の設定
httpd.confや.htaccessに以下の設定をします
<Location /admin/>
AuthType Basic
AuthName "TestAdminPage"
AuthUserFile /var/www/html/.htpasswd
require valid-user
</Location>
設定項目名 | 説明 |
---|---|
AuthType | ベーシック認証はBasic |
AuthName | 認証時ダイアログに表示される認証名 ※ブラウザによる |
AuthUserFile | パスワードファイル(.htpasswd)のパス |
require | Require user→指定したユーザーを許可 Require group→指定したグループを許可 Require valid-user→認証を突破したユーザーを全員許可 |
③apacheの設定反映(リロード)
httpd.confの場合は設定を反映させます。
$ sudo systemctl restart httpd
コメント