前書き
Webサーバーをセットアップするとき、アクセスを制限したいサイトのセクションがしばしばあります。 多くの場合、Webアプリケーションは独自の認証および許可メソッドを提供しますが、Webサーバー自体を使用して、アクセスが不十分または利用できない場合にアクセスを制限できます。
このガイドでは、Ubuntu 14.04で実行されているApache Webサーバー上のアセットをパスワードで保護する方法を示します。
前提条件
開始するには、Ubuntu 14.04サーバー環境にアクセスする必要があります。 管理タスクを実行するには、sudo
権限を持つroot以外のユーザーが必要です。 このようなユーザーを作成する方法については、Ubuntu 14.04 initial server setup guideを参照してください。
Apacheユーティリティパッケージをインストールする
制限されたコンテンツにアクセスするために必要なパスワードを保存するファイルを作成するために、htpasswd
というユーティリティを使用します。 これは、Ubuntuリポジトリ内のapache2-utils
パッケージにあります。
このコマンドを入力して、ローカルパッケージキャッシュを更新し、パッケージをインストールします。 Apache2サーバーがまだサーバーにインストールされていない場合は、この機会にそれを取得します。
sudo apt-get update
sudo apt-get install apache2 apache2-utils
パスワードファイルを作成する
これで、htpasswd
コマンドにアクセスできるようになりました。 これを使用して、Apacheがユーザーの認証に使用できるパスワードファイルを作成できます。 この目的のために、/etc/apache2
構成ディレクトリ内に.htpasswd
という隠しファイルを作成します。
このユーティリティを初めて使用するときは、-c
オプションを追加して、指定したファイルを作成する必要があります。 コマンドの最後にユーザー名(この例ではsammy
)を指定して、ファイル内に新しいエントリを作成します。
sudo htpasswd -c /etc/apache2/.htpasswd sammy
ユーザーのパスワードを入力して確認するように求められます。
追加する追加ユーザーの-c
引数は省略してください。
sudo htpasswd /etc/apache2/.htpasswd another_user
ファイルの内容を表示すると、各レコードのユーザー名と暗号化されたパスワードを確認できます。
cat /etc/apache2/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Apacheパスワード認証を構成する
Apacheが読み取れる形式のユーザーとパスワードを含むファイルが作成されたので、保護されたコンテンツを提供する前にこのファイルをチェックするようにApacheを構成する必要があります。 これには2つの異なる方法があります。
最初のオプションは、Apache構成を編集し、パスワード保護を仮想ホストファイルに追加することです。 これにより、分散構成ファイルの読み取りにかかる費用が回避されるため、一般にパフォーマンスが向上します。 このオプションがある場合、この方法をお勧めします。
仮想ホストファイルを変更する機能がない場合(またはすでに.htaccess files for other purposes), you can restrict access using an
.htaccess`ファイルを使用している場合)。 Apacheは、コンテンツディレクトリ内のファイル内に特定の構成アイテムを設定できるようにするために.htaccess
ファイルを使用します。 欠点は、Apacheがディレクトリに関係するすべての要求でこれらのファイルを再読み取りする必要があることであり、パフォーマンスに影響を与える可能性があります。
以下のニーズに最適なオプションを選択してください。
仮想ホスト定義内でのアクセス制御の構成
まず、制限を追加する仮想ホストファイルを開きます。 この例では、Ubuntuのapacheパッケージを介してインストールされたデフォルトの仮想ホストを保持する000-default.conf
ファイルを使用します。
sudo nano /etc/apache2/sites-enabled/000-default.conf
内部では、コメントを削除すると、ファイルは次のようになります。
/etc/apache2/sites-enabled/000-default.conf
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
認証はディレクトリごとに行われます。 認証を設定するには、制限するディレクトリを<Directory ___>
ブロックでターゲットにする必要があります。 この例では、ドキュメントルート全体を制限しますが、Webスペース内の特定のディレクトリのみをターゲットとするようにこのリストを変更できます。
/etc/apache2/sites-enabled/000-default.conf
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
このディレクトリブロック内で、Basic
認証を設定することを指定します。 AuthName
には、資格情報の入力を求めるときにユーザーに表示されるレルム名を選択します。 AuthUserFile
ディレクティブを使用して、作成したパスワードファイルをApacheにポイントします。 最後に、このリソースにアクセスするにはvalid-user
が必要です。つまり、パスワードで身元を確認できる人は誰でも次の場所で許可されます。
/etc/apache2/sites-enabled/000-default.conf
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
完了したら、ファイルを保存して閉じます。 Apacheを再起動してパスワードポリシーを実装します。
sudo service apache2 restart
指定したディレクトリはパスワードで保護されているはずです。
.htaccessファイルを使用したアクセス制御の構成
代わりに.htaccess
ファイルを使用してパスワード保護を設定する場合は、メインのApache構成ファイルを編集して.htaccess
ファイルを許可することから始める必要があります。
sudo nano /etc/apache2/apache2.conf
ドキュメントルートを保持する/var/www
ディレクトリの<Directory>
ブロックを見つけます。 そのブロック内のAllowOverride
ディレクティブを「None」から「All」に変更して、.htaccess
処理をオンにします。
/etc/apache2/apache2.conf
. . .
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
. . .
完了したら、ファイルを保存して閉じます。
次に、制限したいディレクトリに.htaccess
ファイルを追加する必要があります。 このデモでは、/var/www/html
に基づくドキュメントルート全体(Webサイト全体)を制限しますが、このファイルは、アクセスを制限する任意のディレクトリに配置できます。
sudo nano /var/www/html/.htaccess
このファイル内で、Basic
認証を設定することを指定します。 AuthName
には、資格情報の入力を求めるときにユーザーに表示されるレルム名を選択します。 AuthUserFile
ディレクティブを使用して、作成したパスワードファイルをApacheにポイントします。 最後に、このリソースにアクセスするにはvalid-user
が必要です。つまり、パスワードで身元を確認できる人は誰でも次の場所で許可されます。
/var/www/html/.htaccess
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
ファイルを保存して閉じます。 Webサーバーを再起動して、.htaccess
ファイルを含むディレクトリ内またはその下のすべてのコンテンツをパスワードで保護します。
sudo service apache2 restart
パスワード認証を確認する
コンテンツが保護されていることを確認するには、Webブラウザーで制限されたコンテンツにアクセスしてみてください。 次のようなユーザー名とパスワードのプロンプトが表示されます。
正しい資格情報を入力すると、コンテンツへのアクセスが許可されます。 間違った資格情報を入力するか、「キャンセル」をクリックすると、「不正」エラーページが表示されます。
結論
これで、サイトの基本認証をセットアップするために必要なものがすべて揃ったはずです。 パスワード保護をSSL暗号化と組み合わせて、資格情報がプレーンテキストでサーバーに送信されないようにする必要があることに注意してください。 Apacheで使用する自己署名SSL証明書を作成する方法については、this guideに従ってください。 商用証明書をインストールする方法については、this guideに従ってください。