Ubuntu16.04でApacheを使用してパスワード認証を設定する方法
序章
ウェブサイトを運営するとき、訪問者から制限したいサイトの部分がしばしばあります。 Webアプリケーションは独自の認証および承認方法を提供する場合がありますが、これらが不十分または利用できない場合は、Webサーバー自体を使用してアクセスを制限することもできます。
このガイドでは、Ubuntu16.04で実行されているApacheWebサーバーでアセットをパスワードで保護する方法を示します。
前提条件
このチュートリアルを完了するには、Ubuntu16.04サーバーにアクセスする必要があります。
さらに、開始する前に次のものが必要になります。
-
サーバー上のsudoユーザー: Ubuntu 16.04初期サーバーセットアップガイドに従って、
sudo
権限を持つユーザーを作成できます。 -
Apache2 Webサーバー:まだセットアップしていない場合は、詳細記事のApacheセクション Linux、Apache、MySQL、PHP(LAMP)スタックをUbuntuにインストールする方法16.04 、ガイドできます。
-
SSLで保護されたサイト:どのように設定するかは、サイトのドメイン名があるかどうかによって異なります。
- ドメイン名をお持ちの場合…サイトを保護する最も簡単な方法は、無料の信頼できる証明書を提供するLet’sEncryptを使用することです。 これを設定するには、 Let’s Encrypt Guide forApacheに従ってください。
- ドメインがない場合…この構成をテストまたは個人使用に使用している場合は、代わりに自己署名証明書を使用できます。 これは同じタイプの暗号化を提供しますが、ドメイン検証はありません。 セットアップするには、Apacheの自己署名SSLガイドに従ってください。
これらがすべて整ったら、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 sammy
ユーザーのパスワードを入力して確認するように求められます。
追加する追加ユーザーの-c
引数は省略してください。
- sudo htpasswd /etc/apache2/.htpasswd another_user
ファイルの内容を表示すると、各レコードのユーザー名と暗号化されたパスワードを確認できます。
- cat /etc/apache2/.htpasswd
Outputsammy:$apr1$.0CAabqX$rb8lueIORA/p8UzGPYtGs/
another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1
ステップ3—Apacheパスワード認証の設定
Apacheが読み取れる形式のユーザーとパスワードを含むファイルができたので、保護されたコンテンツを提供する前に、このファイルをチェックするようにApacheを構成する必要があります。 これは、サイトの仮想ホストファイルに直接配置するか、制限が必要なディレクトリに.htaccessファイルを配置するかのいずれかの方法で実行できます。 通常は仮想ホストファイルを使用するのが最善ですが、root以外のユーザーが自分のアクセス制限を管理できるようにする必要がある場合は、Webサイトと一緒にバージョン管理で制限を確認するか、他の目的で.htaccessファイルを使用するWebアプリケーションをすでに用意してください。 、2番目のオプションを確認してください。
ニーズに最適なオプションを選択してください。
オプション1:仮想ホスト定義内でのアクセス制御の構成(推奨)
最初のオプションは、Apache構成を編集し、仮想ホストファイルにパスワード保護を追加することです。 これにより、分散構成ファイルを読み取る費用が回避されるため、通常、パフォーマンスが向上します。 このオプションでは、構成にアクセスする必要があります。これは常に利用できるとは限りませんが、アクセスできる場合は、このオプションをお勧めします。
制限を追加する仮想ホストファイルを開くことから始めます。 この例では、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>
終了したら、ファイルを保存して閉じます。
Webサーバーを再起動する前に、次のコマンドで構成を確認できます。
- sudo apache2ctl configtest
すべてがチェックアウトされ、Syntax OK
が表示されたら、サーバーを再起動してパスワードポリシーを実装します。 systemctl
はすべてのサービス管理コマンドの結果を表示しないため、status
を使用して、サーバーが実行されていることを確認します。
- sudo systemctl restart apache2
- sudo systemctl status apache2
これで、指定したディレクトリがパスワードで保護されているはずです。
オプション2:.htaccessファイルを使用したアクセス制御の構成
Apacheは、.htaccess
ファイルを使用して、特定の構成アイテムをコンテンツディレクトリ内に設定できるようにすることができます。 Apacheはディレクトリを含むすべてのリクエストでこれらのファイルを再読み込みする必要があり、パフォーマンスに悪影響を与える可能性があるため、オプション1をお勧めしますが、すでに.htaccessファイルを使用している場合、またはroot以外のユーザーに制限の管理を許可する必要がある場合は[ X250X]ファイルは理にかなっています。
.htaccess
ファイルを使用してパスワード保護を有効にするには、メインのApache構成ファイルを開きます。
- sudo nano /etc/apache2/apache2.conf
ドキュメントルートを保持する/var/www
ディレクトリの<Directory>
ブロックを見つけます。 そのブロック内のAllowOverride
ディレクティブを「なし」から「すべて」に変更して、.htaccess
処理をオンにします。
. . .
<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 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ブラウザで制限されたコンテンツにアクセスしてみてください。 次のようなユーザー名とパスワードのプロンプトが表示されます。
正しいクレデンシャルを入力すると、コンテンツにアクセスできるようになります。 間違ったクレデンシャルを入力するか、「キャンセル」をクリックすると、「未承認」エラーページが表示されます。
結論
おめでとう! これで、サイトの基本認証を設定できました。 ただし、Apache構成と.htaccessは、基本認証よりもはるかに多くのことを実行できます。 Apache構成で利用できる柔軟性とパワーの詳細については、次のいずれかのチュートリアルを試してください。
-
メインの設定ファイルでの理解を深めるには、UbuntuまたはDebianVPSでApacheWebサーバーを設定する方法を参照してください。
-
仮想ホストファイルの詳細については、 Ubuntu16.04でApache仮想ホストを設定する方法を参照してください。
-
URLの書き換え、上記の「無許可」メッセージなどのエラーページのカスタマイズ、またはサーバーサイドインクルードを使用してすべてのページに共通の要素を含める方法については、ガイド.htaccessファイルの使用方法をご覧ください。