序章

Webサーバーをセットアップするとき、アクセスを制限したいサイトのセクションがしばしばあります。 多くの場合、Webアプリケーションは独自の認証および承認方法を提供しますが、これらが不十分または利用できない場合は、Webサーバー自体を使用してアクセスを制限できます。

このガイドでは、Ubuntu14.04で実行されているApacheWebサーバーでアセットをパスワードで保護する方法を示します。

前提条件

開始するには、Ubuntu14.04サーバー環境にアクセスする必要があります。 root以外のユーザーが必要になります sudo 管理タスクを実行するための特権。 このようなユーザーを作成する方法については、Ubuntu14.04初期サーバーセットアップガイドに従ってください。

Apacheユーティリティパッケージをインストールします

制限されたコンテンツにアクセスするために必要なパスワードを保存するファイルを作成するために、次のユーティリティを使用します。 htpasswd. これはにあります apache2-utils Ubuntuリポジトリ内のパッケージ。

このコマンドを入力して、ローカルパッケージキャッシュを更新し、パッケージをインストールします。 サーバーにまだインストールされていない場合は、この機会にApache2サーバーも取得します。

  1. sudo apt-get update
  2. sudo apt-get install apache2 apache2-utils

パスワードファイルを作成する

これで、 htpasswd 指図。 これを使用して、Apacheがユーザーの認証に使用できるパスワードファイルを作成できます。 この目的のために、と呼ばれる隠しファイルを作成します .htpasswd 私たちの中で /etc/apache2 構成ディレクトリ。

このユーティリティを初めて使用するときは、 -c 指定されたファイルを作成するオプション。 ユーザー名を指定します(sammy この例では)ファイル内に新しいエントリを作成するコマンドの最後に:

  1. sudo htpasswd -c /etc/apache2/.htpasswd sammy

ユーザーのパスワードを入力して確認するように求められます。

省略します -c 追加したい追加ユーザーの引数:

  1. sudo htpasswd /etc/apache2/.htpasswd another_user

ファイルの内容を表示すると、各レコードのユーザー名と暗号化されたパスワードを確認できます。

  1. cat /etc/apache2/.htpasswd
Output
sammy:$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 .htaccessfile. Apache usesコンテンツディレクトリ内のファイル内に特定の構成アイテムを設定できるようにするための.htaccess`ファイル。 欠点は、Apacheがディレクトリを含むすべての要求でこれらのファイルを再読み取りする必要があることです。これは、パフォーマンスに影響を与える可能性があります。

以下のニーズに最適なオプションを選択してください。

仮想ホスト定義内でのアクセス制御の構成

制限を追加する仮想ホストファイルを開くことから始めます。 この例では、 000-default.conf Ubuntuのapacheパッケージを介してインストールされたデフォルトの仮想ホストを保持するファイル:

  1. sudo nano /etc/apache2/sites-enabled/000-default.conf

内部では、コメントが削除され、ファイルは次のようになります。

/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スペース内の特定のディレクトリのみをターゲットにすることができます。

/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

    <Directory "/var/www/html">
    </Directory>
</VirtualHost>

このディレクトリブロック内で、設定することを指定します Basic 認証。 のために AuthName、資格情報の入力を求めるときにユーザーに表示されるレルム名を選択します。 使用 AuthUserFile 作成したパスワードファイルをApacheにポイントするディレクティブ。 最後に、 valid-user このリソースにアクセスするには、パスワードを使用して本人確認を行うことができるすべての人が次の場所で許可されます。

/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

    <Directory "/var/www/html">
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Directory>
</VirtualHost>

終了したら、ファイルを保存して閉じます。 Apacheを再起動して、パスワードポリシーを実装します。

  1. sudo service apache2 restart

これで、指定したディレクトリがパスワードで保護されているはずです。

.htaccessファイルを使用したアクセス制御の構成

を使用してパスワード保護を設定する場合 .htaccess 代わりに、ファイルを許可するためにメインのApache構成ファイルを編集することから始める必要があります .htaccess ファイル:

  1. sudo nano /etc/apache2/apache2.conf

を見つける <Directory> のブロック /var/www ドキュメントルートを保持するディレクトリ。 オンにする .htaccess を変更して処理する AllowOverride そのブロック内の「なし」から「すべて」へのディレクティブ:

/etc/apache2/apache2.conf
. . .

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

. . .

終了したら、ファイルを保存して閉じます。

次に、を追加する必要があります .htaccess 制限したいディレクトリにファイルします。 このデモンストレーションでは、に基づいているドキュメントルート全体(Webサイト全体)を制限します。 /var/www/html、ただし、アクセスを制限する任意のディレクトリにこのファイルを配置できます。

  1. 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 ファイル:

  1. sudo service apache2 restart

パスワード認証を確認する

コンテンツが保護されていることを確認するには、Webブラウザで制限されたコンテンツにアクセスしてみてください。 次のようなユーザー名とパスワードのプロンプトが表示されます。

正しいクレデンシャルを入力すると、コンテンツにアクセスできるようになります。 間違ったクレデンシャルを入力するか、「キャンセル」をクリックすると、「未承認」エラーページが表示されます。

結論

これで、サイトの基本認証を設定するために必要なものがすべて揃ったはずです。 クレデンシャルがプレーンテキストでサーバーに送信されないように、パスワード保護をSSL暗号化と組み合わせる必要があることに注意してください。 Apacheで使用する自己署名SSL証明書を作成する方法については、このガイドに従ってください。 商用証明書のインストール方法については、このガイドに従ってください。