前書き

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

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

前提条件

このチュートリアルを完了するには、Ubuntu 16.04サーバーにアクセスする必要があります。

さらに、開始する前に次のものが必要になります。

  • サーバー上の `+ sudo +`ユーザー:https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu- 16-04 [Ubuntu 16.04初期サーバーセットアップガイド]。

  • * Apache2 Webサーバー*:まだ設定していない場合は、詳細な記事のApacheセクション、https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache -mysql-php-lamp-stack-on-ubuntu-16-04 [Linux、Apache、MySQL、PHP(LAMP)スタックをUbuntu 16.04にインストールする方法+
    ]、あなたを導くことができます。

  • * SSLで保護されたサイト*:設定方法は、サイトのドメイン名があるかどうかによって異なります。

  • *ドメイン名を持っている場合…*サイトを保護する最も簡単な方法は、無料の信頼できる証明書を提供するLet’s Encryptを使用することです。 Apacheの暗号化ガイドに従って設定してください。 。

  • *ドメインがない場合…*この構成をテストまたは個人的な使用のために使用している場合は、代わりに自己署名証明書を使用できます。 これにより、同じタイプの暗号化が提供されますが、ドメイン検証は行われません。 https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04 [自己署名SSLガイドApache]をセットアップします。

これらがすべて揃ったら、 `+ sudo +`ユーザーとしてサーバーにログインし、以下に進みます。

手順1-Apacheユーティリティパッケージのインストール

`+ apache2-utils `パッケージの一部である ` htpasswd +`というユーティリティを使用して、ファイルを作成し、制限されたコンテンツにアクセスするために必要なユーザー名とパスワードを管理します。

sudo apt-get update
sudo apt-get install apache2-utils

手順2-パスワードファイルの作成

これで、 `+ 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$.0CAabqX$rb8lueIORA/p8UzGPYtGs/
another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1

ステップ3-Apacheパスワード認証の構成

Apacheが読み取れる形式のユーザーとパスワードを含むファイルができたので、保護されたコンテンツを提供する前にこのファイルをチェックするようにApacheを構成する必要があります。 これは、サイトの仮想ホストファイルに直接挿入するか、制限が必要なディレクトリに.htaccessファイルを配置することの2つの方法のいずれかで実行できます。 一般的には仮想ホストファイルを使用するのが最善ですが、非ルートユーザーが独自のアクセス制限を管理できるようにする必要がある場合は、Webサイトと一緒にバージョン管理に制限を確認するか、既に他の目的で.htaccessファイルを使用するWebアプリケーションを用意してください、2番目のオプションを確認してください。

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

オプション1:仮想ホスト定義内でのアクセス制御の設定(推奨)

最初のオプションは、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>

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

Webサーバーを再起動する前に、次のコマンドで構成を確認できます。

sudo apache2ctl configtest

すべてがチェックアウトされ、 `+ Syntax OK `が表示されたら、サーバーを再起動してパスワードポリシーを実装します。 ` systemctl `はすべてのサービス管理コマンドの結果を表示するわけではないため、 ` status +`を使用してサーバーが実行されていることを確認します。

sudo systemctl restart apache2
sudo systemctl status apache2

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

オプション2:.htaccessファイルを使用したアクセス制御の構成

Apacheは、特定の構成アイテムをコンテンツディレクトリ内に設定できるようにするために、 `+ .htaccess +`ファイルを使用できます。 Apacheはディレクトリに関連するすべてのリクエストでこれらのファイルを再読み取りする必要があるため、パフォーマンスに悪影響を与える可能性があるため、オプション1をお勧めしますが、すでに.htaccessファイルを使用している場合、または非rootユーザーに制限の管理を許可する必要がある場合は、 ` + .htaccess + `ファイルは理にかなっています。

`+ .htaccess +`ファイルを使用してパスワード保護を有効にするには、メインのApache設定ファイルを開きます:

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 」ファイルでパスワード保護し、「 systemctl status +」を使用して再起動が成功したことを確認します。

sudo systemctl restart apache2
sudo systemctl status apache2

ステップ4-パスワード認証の確認

コンテンツが保護されていることを確認するには、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不正エラー]

結論

おめでとうございます。 順守していれば、サイトの基本認証を設定できました。 ただし、Apache構成と.htaccessは、基本認証よりもはるかに多くのことができます。 Apache構成で利用できる柔軟性とパワーの詳細については、次のチュートリアルのいずれかを試してください。

  • メイン構成ファイルの理解については、https://www.digitalocean.com/community/tutorials/how-to-configure-the-apache-web-server-on-an-ubuntu-or-debianを参照してください。 -vps [UbuntuまたはDebian VPSでApache Webサーバーを構成する方法+
    ]

  • 仮想ホストファイルの詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-16-04 [Apache Virtualのセットアップ方法Ubuntu 16.04上のホスト]

  • URLの書き換え、上記の「Unauthorized」メッセージなどのエラーページのカスタマイズ、またはサーバーサイドインクルードを使用したすべてのページに共通要素を含める方法については、https://www.digitalocean.com/community/tutorials/how-to-useをご覧ください-the-htaccess-file [.htaccessファイルの使用方法]。