はじめに
Webサーバーを設定するとき、アクセスを制限したいサイトのセクションがしばしばあります。
このガイドでは、Ubuntu 14.04 で動作する Apache Web サーバー上で資産をパスワードで保護する方法を説明します。
前提条件
開始するには、Ubuntu 14.04 サーバー環境にアクセスする必要があります。 管理作業を行うには、sudo
権限を持つ非 root ユーザーが必要です。 そのようなユーザーを作成する方法については、Ubuntu 14.04 サーバー初期設定ガイドを参照してください。
Install the Apache Utilities Package
制限付きコンテンツへのアクセスに必要なパスワードを格納するファイルを作成するために、htpasswd
というユーティリティを使用することになります。 これは、Ubuntu リポジトリ内の apache2-utils
パッケージに含まれています。
このコマンドを入力することにより、ローカル パッケージ キャッシュを更新し、パッケージをインストールします。 この機会に、Apache2 サーバーがまだサーバーにインストールされていない場合に備えて、Apache2 サーバーも入手することにします。 これを使用して、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.
Configure Apache Password Authentication
さて、Apache が読み込める形式のユーザーとパスワードのファイルができたので、保護されたコンテンツを提供する前にこのファイルをチェックするよう Apache を設定する必要があります。
最初のオプションは、Apache の設定を編集して、バーチャルホストファイルにパスワード保護を追加することです。 これは、分散された設定ファイルを読み込む費用を避けるため、一般的に良いパフォーマンスを与えます。
Virtual Host ファイルを修正する能力がない場合 (または、特定の設定項目をコンテンツ ディレクトリのファイル内で設定できるようにするために、すでに .htaccess files for other purposes), you can restrict access using an
.htaccessfile. Apache uses
.htaccess` ファイルを使っている場合)、この方法が推奨されます。
Configuring Access Control within the Virtual Host Definition
制限を追加したいバーチャルホストファイルを開くことから始めてください。 この例では、Ubuntu の apache パッケージを通してインストールされたデフォルトのバーチャルホストを保持する 000-default.conf
ファイルを使用します。
- sudo nano /etc/apache2/sites-enabled/000-default.conf
コメントを除去した内部では、ファイルは次のようになります:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>
認証はディレクトリごとに行われます。 認証を設定するには、<Directory ___>
ブロックで制限したいディレクトリを対象にする必要があります。 この例では、ドキュメント ルート全体を制限しますが、このリストを変更して、Web スペース内の特定のディレクトリのみをターゲットにすることができます:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/var/www/html"> </Directory></VirtualHost>
このディレクトリ ブロック内で、Basic
認証を設定するよう指定します。 AuthName
には、認証のプロンプトが表示されたときにユーザーに表示されるレルム名を選択します。 AuthUserFile
ディレクティブで、作成したパスワードファイルを Apache に指定します。 最後に、このリソースにアクセスするために valid-user
を要求します。つまり、パスワードで身元を確認できる人は誰でも入ることができます:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/var/www/html"> AuthType Basic AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd Require valid-user </Directory></VirtualHost>
完了したらファイルを保存して閉じてください。
- sudo service apache2 restart
指定したディレクトリがパスワード保護されているはずです。
Configuring Access Control with .htaccess Files
代わりに .htaccess
ファイルを使ってパスワード保護を設定したい場合は、Apache のメイン設定ファイルを編集して .htaccess
ファイルを許すことから始めます:
- sudo nano /etc/apache2/apache2.conf
文書ルートを保持する /var/www
ディレクトリ用の <Directory>
ブロックを見つけてください。
. . .<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted</Directory>. . .
終わったらファイルを保存して閉じます。
次に、制限したいディレクトリに .htaccess
ファイルを追加する必要があります。 このデモでは、/var/www/html
にあるドキュメント ルート全体 (Web サイト全体) を制限しますが、アクセスを制限したい任意のディレクトリにこのファイルを置くことができます:
- sudo nano /var/www/html/.htaccess
このファイルの中で、Basic
認証を設定するように指定します。 AuthName
には、認証のプロンプトが表示されたときにユーザーに表示されるレルム名を選択します。 AuthUserFile
ディレクティブで Apache に作成したパスワードファイルを指定します。 最後に、このリソースにアクセスするために valid-user
を要求します。つまり、パスワードで身元を確認できる人は誰でも入ることができます。
AuthType BasicAuthName "Restricted Content"AuthUserFile /etc/apache2/.htpasswdRequire valid-user
保存してファイルを閉じてください。 Webサーバーを再起動し、.htaccess
ファイルがあるディレクトリ以下のすべてのコンテンツをパスワードで保護します。
- sudo service apache2 restart
パスワード認証の確認
コンテンツが保護されていることを確認するには、Webブラウザで制限されたコンテンツにアクセスしてみてください。 次のようなユーザー名とパスワードのプロンプトが表示されるはずです。
正しい認証情報を入力すると、コンテンツにアクセスすることが許可されます。 間違った認証情報を入力するか、[キャンセル] をクリックすると、「未承認」エラー ページが表示されます。
結論
これで、サイトに基本認証を設定するために必要なすべてが揃ったはずです。 パスワード保護は、認証情報がプレーンテキストでサーバーに送信されないように、SSL暗号化と組み合わせる必要があることに留意してください。 Apache で使用する自己署名入り SSL 証明書を作成する方法については、このガイドに従ってください。 商用の証明書をインストールする方法については、このガイドに従ってください。