.htaccess ファイルを使用して Apache で Web ディレクトリをパスワード保護する方法
オンライン プロジェクトを管理する場合、多くの場合、プロジェクトを外部から保護するために、そのプロジェクトへのアクセスを制限する必要があります。これにはさまざまな理由が考えられます。たとえば、サイトがまだ開発段階にあるときに、検索エンジンのクローラーがサイトにアクセスできないようにしたい場合などです。
このチュートリアルでは、Apache ウェブサーバーでさまざまなウェブサイトのディレクトリをパスワードで保護する方法を説明します。これを実現するにはさまざまな方法がありますが、そのうちの最も一般的に使用される 2 つの方法を説明します。
最初の方法では Apache の設定ファイルで直接パスワード保護を設定しますが、2 番目の方法では.htaccess ファイルを使用します。
要件
Web ディレクトリにパスワード保護を設定するには、次のものが必要です。
- 動作する Apache Web サーバー
- Apache 設定ファイルで AllowOverride AuthConfig ディレクティブを有効にする必要があります。
Apache パスワードで保護されたディレクトリのセットアップ
1. このチュートリアルでは、メインの Web ルート ディレクトリ /var/www/html
を保護します。そのディレクトリを保護するには、Apache の設定を開きます。
---------------- On RedHat/CentOS based systems ----------------
vi /etc/httpd/conf/httpd.conf
---------------- On Debian/Ubuntu based systems ----------------
nano /etc/apache2/sites-available/000-default.conf
2. /var/www/html の Apache Document ディレクトリ ルートを見つけ、提案に従って次の内容を追加します。
Apache 2.2 バージョンの場合
<Directory /var/www/html>
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Apache 2.4 バージョンの場合
<Directory /var/www/html>
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
3. ファイルを保存し、次のコマンドを使用して Apache を再起動します。
--------------- On Systemd -------------------
systemctl restart httpd [On RedHat based systems]
systemctl restart apache2 [On Debian based systems]
--------------- On SysV init -----------------
service httpd restart [On RedHat based systems]
service apache2 restart [On Debian based systems]
4. 次に、htpasswd コマンドを使用して、保護されたディレクトリのユーザー名とパスワードを生成します。このコマンドは、Basic 認証用のユーザー ファイルを管理するために使用されます。
コマンドの一般的な構文は次のとおりです。
htpasswd -c filename username
-c
オプションは暗号化されたパスワードを保持するファイルを指定し、username は認証用のユーザーを指定します。
5. パスワード ファイルは、適切に保護されるように、Apache の Web アクセス可能なディレクトリの外に配置する必要があります。そのために、新しいディレクトリを作成します。
mkdir /home/tecmint
6. その後、そのディレクトリに保存されるユーザー名とパスワードを生成します。
htpasswd -c /home/tecmint/webpass tecmint
このコマンドを実行すると、新しいユーザー "tecmint"
のパスワードを 2 回入力する必要があります。
その後、Apache が「webpass」ファイルを読み取れることを確認する必要があります。そのためには、次のコマンドを使用してそのファイルの所有権を変更する必要があります。
---------------- On RedHat/CentOS based systems ----------------
chown apache: /home/tecmint/webpass
chmod 640 /home/tecmint/webpass
---------------- On Debian/Ubuntu based systems ----------------
chown www-data /home/tecmint/webpass
chmod 640 /home/tecmint/webpass
7. この時点で、新しいユーザーとパスワードの準備ができました。次に、対象のディレクトリにアクセスするときにパスワードを要求するように Apache に指示する必要があります。そのために、.htaccess というファイルを /var/www/html に作成します。
vi /var/www/html/.htaccess
そこに次のコードを追加します。
AuthType Basic
AuthName "Restricted Access"
AuthUserFile /home/tecmint/webpass
Require user tecmint
8. 次に、ファイルを保存し、セットアップをテストします。ブラウザを開き、Web ブラウザに IP アドレスまたはドメイン名を入力します。例:
http://ip-address
ユーザー名とパスワードの入力を求めるプロンプトが表示されます。
設定したユーザー名とパスワードを入力してページに進みます。
その他の注意事項
共有ホスティングを使用している場合は、おそらく Apache 構成ファイルにアクセスできません。ただし、ほとんどのホスティング会社はデフォルトで「AllowOverride All」 オプションを有効にしています。つまり、ユーザー名とパスワードを生成し、保護したいディレクトリを選択するだけで済みます。これにより、作業が大幅に軽減されます。
結論
このチュートリアルが役に立ち、目標の達成に役立つことを願っています。ご質問やご意見がございましたら、お気軽に以下のセクションに投稿してください。