confに設定する方法と、.htaccessファイルを使う方法の2つの方法がある。
Basic認証(ベーシックにんしょう、Basic Authentication)とは、HTTPで定義される認証方式の一つ。基本認証と呼ばれることも。
Basic認証では、ユーザ名とパスワードの組みをコロン ":" でつなぎ、Base64でエンコードして送信する。このため、盗聴や改竄が簡単であるという欠点を持つが、ほぼ全てのWebサーバおよびブラウザで対応しているため、広く使われている。引用:Wikipedia
環境:
- Ubuntu 16.04
- Apache 2.4.18
ユーザーとパスワードの設定
どちらの方法でも認証のために、ユーザーとパスワードの設定は必要。先に作成しておく。
ユーザー管理ファイルを作成
管理ファイルを新規作成する場合、
$ sudo htpasswd -c ファイル名 ユーザー名
実行すると、パスワードの入力を求められるので2回入力する。$ sudo htpasswd -c /etc/apache2/.htpasswd user1 |
既に管理ファイルが存在していて、2回目以降のユーザー作成では、オプション -C を付けない。
$ sudo htpasswd /etc/apache2/.htpasswd user2 |
ユーザー管理ファイルの置き場所はどこでもいいが、セキュリティ上、公開されていないディレクトリ上に作成すること。
パスワードの変更
パスワードを変更したい場合も、同様のコマンドで更新する。
$ sudo htpasswd /etc/apache2/.htpasswd user1 |
ユーザーの削除
オプション -D を付ける。
$ sudo htpasswd -D /etc/apache2/.htpasswd user1 |
.htaccessファイルを使った認証方法
認証をかけたいディレクトリに .htaccess ファイルを置き、以下の内容を記述する。
AuthType Basic
AuthName "Please Enter Your ID and pass"
AuthUserFile /etc/apache2/.htpasswd
require valid-user
AuthType
認証方式を指定。 Basic認証の場合 Basic とする。AuthName
認証画面に表示されるメッセージ。AuthUserFile
作成したユーザー管理ファイルを指定。require
アクセスを許可するユーザーやグループを指定。 valid-user の場合、ユーザー管理ファイルに含まれるすべてのユーザーを対象とする。システムが .htaccess ファイルを見つけた時、このファイルの中で定義された設定を、既にこのディレクトリに対して定義されていた設定に対して上書きする必要がある。
これは apacheのディレクティブ設定で行う。
"/etc/apache2/sites-available/" に置いたconfファイルで設定する。
<Directory パス> |
- None :上書きを禁止
- AuthConfig :認証に関する変更を許可
- All :すべての設定の変更を許可
設定後、apacheを再起動する。
.htaccess ファイルを置いたディレクトリにアクセスする。

設定した通り認証を求められるので、登録したユーザーとパスワードを入力すればいい。
confファイルで設定する方法
"/etc/apache2/sites-available/" に置いたapacheのディレクティブ設定で行う。
記述する内容は、.htaccess ファイル内に記述したものとほぼ同じ。
<Directory 認証を設定するディレクトリパス> |
設定後、apacheを再起動すれば、認証を設定するディレクトリに認証がかけられている。
まとめ
apache では .htaccessファイルの使用を推奨していません。
apacheでは認証用のディレクティブを書く方法が推奨され、.htaccess ファイルはサーバの設定ファイルを変更できない場合に使用すべきとしている。
理由としては、apacheが各ディレクトリで.htaccessファイルを探し、設定を書き換えるためサーバに余計な負荷をかけるというパフォーマンス上の問題や、.htaccessファイルは一般ユーザーが設置、編集できるのでセキュリティ上の問題があるため。
これらのことを理解したうえで、Basic認証を使い分けながら使用していく。
Ubuntu サーバの設定 Webサーバー



