SKILL LEVEL: SYSADMIN/ADVANCED - TIME: 5-10 MINS
はじめに
このチュートリアルでは、パスワードで保護することにより、Webサイトまたはサイト内のフォルダーを保護する方法を説明します。この例では、最も人気のあるWebサーバーであるApache2を使用しますが、他のWebサーバーでも同様の方法を実行できます。
私たちが使用する方法は基本認証システムですが、セットアップが簡単で、大きな悪いインターネット上の他の人々からあなたのウェブサイトを素早く保護することができます。この方法は、サイトのユーザー名とパスワードの組み合わせを作成することに依存しています。ユーザー名はいくつでも追加できますが、各パスワードを維持する必要があることに注意してください。
この例では、Ubuntu16.04サーバーエディションを使用しています。これは、Apache 2 Webサーバーを使用している場合、Ubuntu14.04および他のほとんどすべてのLinuxディストリビューションでも機能します。
Ubuntuでは、標準ユーザーとしてログインし、sudoを使用してroot(特権/スーパーユーザー)コマンドを発行します。サーバーにrootログインがある場合は、代わりにこれを使用できます。 sudoを使用する必要はありませんが、すべての安全で安全なサーバー管理には、sudoを使用してアクションを実行し、通常の(root以外の)ユーザーとして管理タスクを実行することをお勧めします。
Apacheユーティリティパッケージをインストールする
制限されたコンテンツにアクセスするために必要なパスワードを保存するファイルを作成するために、htpasswd
というユーティリティを使用します。 、apache2-utilsパッケージの一部です。 apache2-utilsをインストールするには、次のコマンドを実行します。
-
sudo apt-get update
-
sudo apt-get install apache2-utils
上記は、Apache2がすでにインストールされていることを前提としています(インストールされていない場合は、sudo apt-get install apache2)。
これで、htpasswd
にアクセスできるようになりました。 指図。これを使用して、Apacheがユーザーの認証に使用できるパスワードファイルを作成できます。この目的のために、.htpasswd
という隠しファイルを作成します。 /etc/apache2
内 構成ディレクトリ。プレフィックス(。)が付いたファイルは、標準のディレクトリリストから自動的に非表示になることに注意してください(たとえば、lsコマンドでは表示されません)。それらを表示する場合は、ls -la(長いリスト、すべてのファイル)を使用します。
このユーティリティを初めて使用するときは、-c
を追加する必要があります 指定されたファイルを作成するオプション。ユーザー名を指定します(sammy
この例では)ファイル内に新しいエントリを作成するコマンドの最後に:
-
sudo htpasswd -c /etc/apache2/.htpasswd sammy
ユーザーのパスワードを入力して確認するように求められます。
-c
を省略します 追加したい追加ユーザーの引数:
-
sudo htpasswd /etc/apache2/.htpasswd another_user
ファイルの内容を表示すると、各レコードのユーザー名と暗号化されたパスワードを確認できます。
-
cat /etc/apache2/.htpasswd
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パッケージを介してインストールされたデフォルトの仮想ホストを保持するファイル:
- 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スペース内の特定のディレクトリのみをターゲットにすることができます。
<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>
終了したら、ファイルを保存して閉じます。 Apacheを再起動して、パスワードポリシーを実装します:
-
sudo service apache2 restart
指定したディレクトリはパスワードで保護されているはずです。
.htaccessファイルを使用したアクセス制御の構成
.htaccess
を使用してパスワード保護を設定する場合 代わりに、ファイルを作成する代わりに、メインのApache構成ファイルを編集して.htaccess
を許可することから始める必要があります。 ファイル:
-
sudo nano /etc/apache2/apache2.conf
<Directory>
を見つけます /var/www
のブロック ドキュメントルートを保持するディレクトリ。 .htaccess
をオンにします AllowOverride
を変更して処理する そのブロック内の「なし」から「すべて」へのディレクティブ:
. . .
<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
が必要になります このリソースにアクセスするには、パスワードで本人確認ができる人は誰でも次の場所で許可されます:
/var/www/html/.htaccess
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
ファイルを保存して閉じます。 Webサーバーを再起動して、.htaccess
を使用してディレクトリ内またはその下のすべてのコンテンツをパスワードで保護します。 ファイル:
- sudo service apache2 restart
コンテンツが保護されていることを確認するには、Webブラウザで制限されたコンテンツにアクセスしてみてください。次のようなユーザー名とパスワードのプロンプトが表示されます。
正しいクレデンシャルを入力すると、コンテンツにアクセスできるようになります。間違ったクレデンシャルを入力するか、[キャンセル]をクリックすると、[未承認]エラーページが表示されます。
結論
これで、サイトの基本認証を設定するために必要なものがすべて揃ったはずです。クレデンシャルがプレーンテキストでサーバーに送信されないように、すべてのパスワード保護をSSL暗号化と組み合わせる必要があります。
このページのコンテンツの一部を提供してくれたdigitalocean.comの皆さんに感謝します。必ずチェックしてください。あらゆる予算に合う素晴らしいウェブホスティングサービスがあります!