Ubuntu 14.04でApacheを使用してパスワード認証を設定する方法

前書き

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

このガイドでは、Ubuntu 14.04で実行されているApache Webサーバー上のアセットをパスワードで保護する方法を示します。

前提条件

開始するには、Ubuntu 14.04サーバー環境にアクセスする必要があります。 管理タスクを実行するには、 `+ sudo +`権限を持つ非rootユーザーが必要です。 このようなユーザーを作成する方法については、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 [Ubuntu 14.04初期サーバーセットアップガイド]に従ってください。

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

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

追加したいユーザーがいる場合は、 `+ -c +`引数を省略します。

sudo htpasswd /etc/apache2/.htpasswd

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

cat /etc/apache2/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Apacheパスワード認証を構成する

Apacheで読み取れる形式のユーザーとパスワードを含むファイルが作成されたので、保護されたコンテンツを提供する前にこのファイルをチェックするようにApacheを構成する必要があります。 これには2つの異なる方法があります。

最初のオプションは、Apache構成を編集し、パスワード保護を仮想ホストファイルに追加することです。 これにより、分散構成ファイルの読み取りにかかる費用が回避されるため、一般にパフォーマンスが向上します。 このオプションがある場合、この方法をお勧めします。

仮想ホストファイルを変更する機能がない場合(または他の目的ですでに + .htaccessファイルを使用している場合)、an + .htaccess` + fileを使用してアクセスを制限できます。 Apacheは、コンテンツディレクトリのファイル内に特定の構成アイテムを設定できるようにするために、+ `.htaccess`ファイルを使用します。 欠点は、Apacheがディレクトリに関係するすべての要求でこれらのファイルを再読み取りする必要があることであり、パフォーマンスに影響を与える可能性があります。

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

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

まず、制限を追加する仮想ホストファイルを開きます。 この例では、Ubuntuのapacheパッケージを通じてインストールされたデフォルトの仮想ホストを保持する `+ 000-default.conf +`ファイルを使用します。

sudo nano /etc/apache2/sites-enabled/

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

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
   ServerAdmin [email protected]
   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 [email protected]
   DocumentRoot /var/www/html
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined



</VirtualHost>

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

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
   ServerAdmin [email protected]
   DocumentRoot /var/www/html
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined

   <Directory "/var/www/html">




   </Directory>
</VirtualHost>

完了したら、ファイルを保存して閉じます。 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

. . .

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

. . .

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

次に、制限したいディレクトリに `+ .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ブラウザーで制限されたコンテンツにアクセスしてみてください。 次のようなユーザー名とパスワードのプロンプトが表示されます。

image:https://assets.digitalocean.com/articles/apache_password_1404/password_prompt.png [Apache2パスワードプロンプト]

正しい資格情報を入力すると、コンテンツへのアクセスが許可されます。 間違った資格情報を入力するか、「キャンセル」をクリックすると、「不正」エラーページが表示されます。

image:https://assets.digitalocean.com/articles/apache_password_1404/unauthorized_error.png [Apache2不正エラー]

結論

これで、サイトの基本認証をセットアップするために必要なものがすべて揃ったはずです。 パスワード保護をSSL暗号化と組み合わせて、資格情報がプレーンテキストでサーバーに送信されないようにする必要があることに注意してください。 Apacheで使用する自己署名SSL証明書を作成する方法については、https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-ubuntuを参照してください-14-04 [このガイド]。 商用証明書のインストール方法については、https://www.digitalocean.com/community/tutorials/how-to-install-an-ssl-certificate-from-a-commercial-certificate-authority [このガイド]をご覧ください。

前の投稿:Debian 10でApacheのmod_rewriteを使用してURLを書き換える方法
次の投稿:Ubuntu 16.04にBroをインストールする方法