序章

Web管理者は、一時的であろうと恒久的であろうと、Webサイトの一部を訪問者から制限することが有益であると感じるかもしれません。 Webアプリケーションは独自の認証および承認方法を提供する場合がありますが、これらが不十分または利用できない場合は、Webサーバー自体に依存してアクセスを制限することもできます。

このチュートリアルでは、Ubuntu20.04で実行されているApacheWebサーバー上のパスワード保護アセットについて説明します。 これにより、サーバーに追加のセキュリティレイヤーが提供されます。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • root以外のユーザーでセットアップされた1つのUbuntu20.04サーバー sudo 特権とファイアウォールが有効になっています。 これを行うには、Ubuntu20.04初期サーバーセットアップガイドに従ってください。

  • UbuntuサーバーにインストールされているApacheWebサーバー。 まだ設定していない場合は、 Ubuntu20.04チュートリアルにApacheWebサーバーをインストールする方法をガイドできます。 必ずステップ5を完了し、ドメインの仮想ホストファイルを用意してください。 このチュートリアルでは、例として your_domain を参照し、使用します。 /etc/apache2/sites-available/your_domain.conf 仮想ホストファイル用。

  • SSLで保護された仮想ホスト。 これを設定することはあなたがあなたのサイトのドメイン名を持っているかどうかに依存します。

    • ドメイン名をお持ちの場合は、無料の信頼できる証明書を提供するLet’sEncryptを使用してサイトを保護できます。 これを設定するには、 Let’s Encrypt Guide forApacheに従ってください。
    • ドメインがなく、この構成をテストまたは個人使用に使用している場合は、代わりに自己署名証明書を使用できます。 これは同じタイプの暗号化を提供しますが、ドメイン検証はありません。 セットアップするには、Apacheの自己署名SSLガイドに従ってください。
  • ドメインを設定する場合(オプション)、 Namecheap でドメイン名を購入するか、 Freenom でドメイン名を無料で取得するか、のドメイン登録事業者を使用してください。選択。 さらに、サーバー用に次のDNSレコードの両方を設定する必要があります。 それらを追加する方法の詳細については、この DigitalOceanDNSの紹介に従ってください。

    • とのAレコード your_domain サーバーのパブリックIPアドレスを指します。
    • とのAレコード www.your_domain サーバーのパブリックIPアドレスを指します。

これらの前提条件を完了したら、次のようにサーバーにログインします。 sudo ユーザーと最初のステップに進みます。

ステップ1—Apacheユーティリティパッケージのインストール

サーバーを更新し、必要なパッケージをインストールすることから始めましょう。 このチュートリアルを完了するために、と呼ばれるユーティリティを使用します htpasswd、 の一部 apache2-utils パッケージ、ファイルを作成し、制限されたコンテンツにアクセスするために必要なユーザー名とパスワードを管理します。

まず、サーバーのパッケージインデックスを更新します。

  1. sudo apt update

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

  1. sudo apt install apache2-utils

これをインストールすると、 htpasswd 指図。

ステップ2—パスワードファイルを作成する

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

このユーティリティを初めて使用するときは、を追加する必要があります -c 指定されたものを作成するオプション .htpasswd file. ここでは、ユーザー名を指定します(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$eponJaBR$9uyVIRpDpbHoseI.hS1cq/ another_user:$apr1$dDXiQxte$RGn3CVfFLQOPf5lSJgNvV1

これで、Apacheが読み取れる形式のユーザーとパスワードが得られました。

ステップ3—Apacheパスワード認証の設定

このステップでは、Apacheを設定してチェックする必要があります。 .htpasswd 保護されたコンテンツを提供する前にファイルします。 これは、サイトの仮想ホストファイルに直接入れるか、配置するかの2つの方法のいずれかで行うことができます。 .htaccess 制限が必要なディレクトリ内のファイル。 通常は仮想ホストファイルを使用するのが最善ですが、 root 以外のユーザーが自分のアクセス制限を管理できるようにする必要がある場合は、2番目のオプションを参照して、Webサイトと一緒にバージョン管理の制限を確認するか、を使用してWebアプリケーションを持っている .htaccess すでに他の目的のためのファイル。

注:アクティブな仮想ホストに対して次のオプションを実行できます。 独自のものを使用している場合は、構成を反映するようにコマンドと値を必ず変更してください。

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

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

最初のオプションは、Apache構成を編集し、仮想ホストファイルにパスワード保護を追加することです。 これにより、分散構成ファイルを読み取る費用が回避されるため、通常、パフォーマンスが向上します。 このオプションでは、構成へのアクセスが必要です。これは常に利用できるとは限りませんが、アクセスできる場合は、このオプションをお勧めします。

制限を追加する仮想ホストファイルを開くことから始めます。 この例では、 /etc/apache2/sites-available/your_domain.conf 仮想ホストを保持するファイル。 次のようなコマンドラインテキストエディタでファイルを開きます。 nano:

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

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

/etc/apache2/sites-available/your_domain.conf
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

認証はディレクトリごとに行われます。 認証を設定するには、制限するディレクトリをターゲットにする必要があります。 <Directory ___> ブロック。 この例では、ドキュメントルート全体を制限しますが、このリストを変更して、Webスペース内の特定のディレクトリのみをターゲットにすることができます。

/etc/apache2/sites-available/your_domain.conf
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

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

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

/etc/apache2/sites-available/your_domain.conf
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

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

終了したら、ファイルを保存して閉じます。 使用している場合 nano、を押すことでそうすることができます CTRL + X に続く Y それから ENTER.

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

  1. sudo apache2ctl configtest

すべてがチェックアウトされ、 Syntax OK 出力として、サーバーを再起動してパスワードポリシーを実装できます。

  1. sudo systemctl restart apache2

以来 systemctl すべてのサービス管理コマンドの結果を表示するわけではありません。 status サーバーが実行されていることを確認するコマンド:

  1. sudo systemctl status apache2
Output
● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese> Active: active (running) since Fri 2022-04-29 17:12:24 UTC; 4s ago Docs: https://httpd.apache.org/docs/2.4/ Process: 4493 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SU> Main PID: 4514 (apache2) Tasks: 55 (limit: 9508) Memory: 5.8M CGroup: /system.slice/apache2.service ├─4514 /usr/sbin/apache2 -k start ├─4516 /usr/sbin/apache2 -k start └─4517 /usr/sbin/apache2 -k start

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

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

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

を使用してパスワード保護を有効にするには .htaccess ファイルの場合、次のようなコマンドラインテキストエディタでメインのApache設定ファイルを開きます。 nano:

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

を見つける <Directory> のブロック /var/www/ ドキュメントルートを保持するディレクトリ。 この行を更新して、ドキュメントルートを反映させます。 次に、オンにします .htaccess を変更して処理する AllowOverride そのブロック内のディレクティブ NoneAll. この内容 <Directory> ブロックは次のように読み取られます。

/etc/apache2/apache2.conf
. . .

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

. . .

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

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

  1. sudo nano /var/www/your_domain/.htaccess

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

/var/www/your_domain/.htaccess
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

ファイルを保存して閉じます。 Webサーバーを再起動して、ディレクトリ内またはその下のすべてのコンテンツをパスワードで保護します。 .htaccess ファイル:

  1. sudo systemctl restart apache2

次に実行します systemctl status 再起動が成功したことを確認するには:

  1. sudo systemctl status apache2
Output
● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese> Active: active (running) since Fri 2022-04-29 17:18:17 UTC; 3s ago Docs: https://httpd.apache.org/docs/2.4/ Process: 4721 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SU> Main PID: 4744 (apache2) Tasks: 55 (limit: 9508) Memory: 5.9M CGroup: /system.slice/apache2.service ├─4744 /usr/sbin/apache2 -k start ├─4745 /usr/sbin/apache2 -k start └─4746 /usr/sbin/apache2 -k start

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

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

コンテンツが保護されていることを確認するには、次のコマンドに移動して、Webブラウザで制限されたコンテンツにアクセスしてみてください。 https://your_domain_or_server_IP.

次のようなユーザー名とパスワードのプロンプトが表示されます。

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

結論

これで、サイトの基本認証が設定されました。

Apache構成でできることはもっとたくさんあります .htaccess. Apache構成で利用できる柔軟性とパワーの詳細については、次のいずれかのチュートリアルを試してください。

  • メインの設定ファイルの理解を深めるには、Apacheインストールガイドの重要なApacheファイルとディレクトリの理解に関するセクションをお読みください。

  • Apacheで仮想ホストファイルを設定する方法の詳細

  • URLの書き換え、前の「未承認」メッセージのようなエラーページのカスタマイズ、またはサーバーサイドインクルードを使用してすべてのページに共通の要素を含める方法については、ガイド.htaccessファイルの使用方法をご覧ください。