制作中のサイトを先方へ確認してもらうために
一般には非公開の形で、サイトを設置することが必要な場合があります。
その場合に利用されるのが、Basic認証。
IDとパスワードを入力しないと、ブラウザ上からは閲覧できないというものです。
以下では、BASIC認証が効かない場合にチェックしてほしい項目と
実際にConcrete5 + ConoHa VPSという環境で
Basic認証を設置した際の方法を記載します。
目次
BASIC認証が効かない場合の5つの大きな原因
まず、BASIC認証が効かない場合の原因としては、下の5つのケースが多いです。
- WebサーバーとしてApacheではなくnginxを利用している
- AuthUserFileで指定するpasswdファイルへの「サーバーパス」が誤っている
- 最終行に空行がない、文字コードがUTF-8以外になっている
- httpd.confサーバー設定ファイルでAllow Overrideによるオーバーライドを許可していない
- Apacheサーバーを再起動していないため、.htaccessファイルが読み込まれていない
以下から、①〜⑤として、上記5通りのそれぞれについて解説していきます。
途中、そもそものBASIC認証のつけ方についても基礎から説明。
①前提: .htaccess活用によるBASIC認証ができるのは、ApacheのWebサーバーだけ
.haccessを利用したBASIC認証は、WebサーバーがApacheである場合だけです。
nginxを利用している場合には、.htaccessではなく他の方法でBASIC認証を実装する必要があります。
nginxでのBASIC認証の実装方法
nginxによるBASIC認証の実装については、下記の記事を参考にしてください。
Nginx で Basic 認証 – Qiita
[Linux] Nginx に Basic 認証を設定する方法 │ TEAM T3A
運用しているWebサーバーがApacheなのかnginxなのか分からない場合の調べ方
ターミナルより運用サーバーにSSH接続等でログイン後
sudo netstat -untap|grep 80
上記のコマンドを実行。
として出てくる文字列の末尾がhttpdだったらapacheで、nginxだったらnginx、出力が無ければどちらも80番ポートでは起動していないという感じになります。
Apache – パソコンで起動中のサーバを確認する方法|teratail
あるいは、80番または443番ポートをLISTENしているプロセスを調べる方法も。
$ sudo /usr/sbin/lsof -Pn -i tcp:80
サーバ上で動いているWebサーバを特定する方法 | CentOS | daily memorandum 3.0.0
そもそものBasic認証のつけ方(Apacheの場合)
まず、Basic認証を行うためのファイル設定方法について。
.htaccessファイルと、.htpasswd(パスワードファイル)の2つが必要となります。
.htaccess(BASIC認証設定ファイル)の作り方
.htaccessファイルには、以下のように記述。
不可視ファイルのため、 ローカルでファイル先頭に . (ドット)を付けられない方は
ファイル名をhtacesssにしたうえで以下を記述、サーバーにアップロードした際にファイル名の先頭に . を付けて名前を変更してください。
下記、ソースコード含めてこちらのサイトから引用しています。
.htaccessでBasic認証の設定をする方法 | てらこや.work
大変丁寧に解説されておりました。ディレクトリ単位ではなくファイル単位でBASIC認証をかける方法についても記載あり。ご参照ください。
— 引用ここから —
<Files ~ "^\.(htaccess|htpasswd)$"> Deny from all </Files> AuthType Basic AuthUserFile /home/foo/html/.htpasswd AuthName "Please enter your ID and password" Require valid-user
1〜3行目は、.htaccessファイルと.htpasswdファイルを外部からアクセスできないようにしています。正規表現なので、もっと簡易的に <Files ~ “^\.ht”> と書いてもいいのですが、わかりやすさ優先で。4行目以下のディレクティブ設定は以下の通り。ディレクティブ 説明AuthType BASICを指定すると基本認証AuthUserFile パスワードファイル名AuthName 認証名(認証ウィンドウの表示)Require 認証ユーザー(valid-user : ファイルに書かれた全ユーザー)
— 引用ここまで —
WordPressを利用している場合でWordPressのインストールディレクトリに設置する場合、もともと.htaccessファイルが生成されていると思いますので、その.htaccessファイルに追記する形で記述しましょう。
その際、上記コードは #BEGIN WordPress よりも前に記述をしてください。#BEGIN WordPress より下に記述をすると、アップデートの際などに書き換えられてしまう可能性があります。
ほか参考: いまさらながら、Basic認証のつけかた – Qiita
②: .htaccessファイル内AuthUserFileに記述する「サーバーパス」は合っていますか?
.htaccessファイル内、AuthUserFileには” /サーバーのパス/.htpasswd ” として、パスワードファイルの設置先パスを記述する必要があります。
上記ソースコードでは5行目
AuthUserFile /home/foo/html/.htpasswd
の部分。ここはサイト表示のURLとは異なり、”サーバーパス”である必要があります。
下記手順などで必ずサーバーパスを確認してから記述するようにしてください。
サーバーパスはサイトのURLとは違います。以下の内容を例えば test.php などの名前をつけて、BASIC認証をかけたいサーバーのディレクトリにアップロードしてください。
<?php echo __FILE__; ?>アップロードしたら、Chromeなどのブラウザでそのファイルにアクセスします。アップロードしたサーバーの公開URLが vektor-inc.co.jp ならば、vektor-inc.co.jp/test.php にアクセスすると、そのサーバーパスが表示されるのでメモ帳などにコピーしておきます。
サイト全体にBASIC認証をかける方法 | 株式会社ベクトル
特に500エラーが出る場合には、このサーバーパスが異なっていることが多いです。
きちんと確認をして記述するようにしましょう。
③: .htaccessファイルの最後には必ず空行を含み、文字コードはUTF-8(BOM無し)
.htaccess の文字コードはUTF-8(BOM無し)、改行コードはLFを設定し、ファイルの最終行には空行を入れる必要があります。ただし .htaccess が日本語などの全角文字を含まず、半角英数字だけである場合は文字コードは Shift-JIS や EUC-JP などでも問題ありません。
空行がない場合や文字コードが異なる場合には、Internal Server Errorが発生してしまう可能性があるとのこと。
.htpasswd(BASIC認証パスワードファイル)の作り方
次に、BASIC認証で用いるIDとパスワードを記載したファイルを作成し、サーバーに設置。
このうち、パスワードは暗号化したものを記載しておく必要があります。
コマンドを利用したやり方もありますが、簡単なパスワード生成用サイトがあります。
下記のサイトより暗号化パスワードを生成、生成された1行のテキストをそのまま.htpasswdファイルに貼り付けてサーバーへアップロードしてください。
(ファイルの中身も生成されたテキスト1行のみでOK)
htpasswdジェネレータ – htaccess パスワード用 MD5 ハッシュ計算
使用するIDとパスワードを入力したら、アルゴリズムのプルダウン項目が「MD5 (Apache Servers Only)」となっていることを確認。
「左で設定したパスワードを暗号化 」をクリックして、パスワードを暗号化しましょう。
生成されたテキスト1行をコピーして.htpasswdファイルを作成、ペーストしてファイルの中身とします。
BASIC認証は盗聴や改竄が簡単であるという欠点を持っています。
それらのリスクを防ぐため、Digest認証というユーザ名とパスワードをMD5でハッシュ化して送る方法があります。
htpaswdの暗号化を自動で生成してくれるジェネレーターにはいくつかありますが、上記サイトのジェネレーターようにMD5によるハッシュ化に対応しているものを利用するようにしましょう。
.htaccessファイルについて詳細を解説
.htaccessファイルとは…
.htaccess(ドット・エイチ・ティ・アクセス)とは、Apache(アパッチ)などのソフトウェアが使用されている環境で使用可能なディレクトリ単位のWebサーバー設定ファイルです。
これが特定のディレクトリに設置されると、「.htaccess」内に記述されている内容が、設置されたディレクトリ内とその下層のディレクトリ内に対して適用されます。
具体的には、この.htaccessファイルに設定を書き込むことで
- Basic認証
- 301リダイレクトの設定
- カスタム404エラーページ設定
- URLの正規化
などを、.haccessファイルが設置されているディレクトリおよびそれ以下のディレクトリについて、設定することができます。
ただこの.htaccessファイル、サーバー主設定ファイル(httpd.conf)を触ることができるなら、極力使わないほうが良いとされています。
(今回は.htaccessで設定をしましたが。)
基本的に、.htaccess ファイルの使用は極力避けてください。
ユーザ認証の設定は httpd.conf (サーバ主設定ファイルのこと) に書くことができますし、実際その方がより良い設定方法とされています。
どんな時に使用すべきか
.htaccess ファイルは、ディレクトリ毎の設定を行ないたいけれど、サーバシステムの root アクセス権限を持っていないという場合にのみ使うべきものです。
例えば、レンタルサーバーなどで自分専用にWEBサーバーの設定を変えたい場合は、.htaccess ファイルを格納することで、WEBサーバの設定変更(一部)を行うことができます。
他にも、サーバ管理者が頻繁に httpd.conf の設定変更を行ないたくはないので、個々のユーザが .htaccess ファイルを使って設定変更を行なうことを許可したい!そんな時に使用します。
しかし、使用する場合は、httpd.conf でAllowOverrideディレクティブを使って、最低限の許可しか与えないようにすべきですね。
.htaccessファイルの設置場所について
基本的には、.htaccessファイルの設定内容を効かせたいディレクトリに設置をしてください。
.htaccessファイルを設置した配下のディレクトリには、全て設定内容が適用されます。
.htaccessファイル設置場所について、参考記事:
.htaccessの設置場所はここでいいでしょうか? 【OKWAVE】
適用範囲について、参考記事:
htaccess留意事項
④: Basic認証が効かない場合には、httpd.conf(サーバー主設定ファイル)のAllowOverrideをチェック
Basic認証が効かない場合には、httpd.conf(サーバー主設定ファイル)のAllowOverrideの項目が” All “になっているか
チェックしましょう。
なお、エックスサーバーなどの共用レンタルサーバーの場合には
httpd.confファイルを編集できないことが多いので、諦めるしかありません…
(ファイル自体を見つけることができません)
Apacheのhttpd.confで.htaccessが有効になるようにしとかないといかんのですね。
ドキュメントルートのAllowOverrideがNoneになっていたので、Allに変更。
Apacheの設定ファイル、httpd.confの場所は
/etc/httpd/conf/
(CentOS,RHEL,Fedoraなどの場合)
Apacheの設定ファイル httpd.confの場所 – Qiita
私の環境、ConoHa VPSの場合は以下の設定内容でした。
環境は前述のとおり、ConoHa VPSでConcrete5イメージをインストールしたものです。
httpd.confファイル内
130行目あたりに以下の設定があります。
151行目あたりの”AllowOverride”を
None → All に変更して、オーバーライドを許可します。
# Further relax access to the default document root: <Directory "/var/www/html"> # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs/2.4/mod/core.html#options # for more information. # Options Indexes FollowSymLinks # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # Options FileInfo AuthConfig Limit # AllowOverride None # # Controls who can get stuff from this server. # Require all granted </Directory>
また、上記Aliasのディレクトリに加えて
ルートディレクトリの部分も
AllowOverride None → All に修正
100行目あたり
# <Directory> blocks below. # <Directory /> AllowOverride none Require all denied </Directory>
これを none → All に修正します。
mod_rewriteが効かないと思ったら.htaccessが効いていなかった件
⑤: パーミッションを確認して、Apacheサーバーを再起動したら完了
.htaccessおよび.htpasswdのパーミッションは604にしてください。
(サーバーによっては644推奨)
ここまで完了したら、サーバーを再起動して、完了です。(Apacheを再起動する。)
サーバーを再起動(またはhttpd自体を再起動)させないと、httpd.confの設定変更が有効になりませんのでご注意ください。
# service httpd restart
または
# systemctl restart httpd
でApacheを再起動します。
ConoHa VPSであれば、サーバーコントロールパネルより「再起動」を押して
VPSごと再起動してもOKです。
以上で完了です。おつかれさまでした!
WordPressでログイン画面にBASIC認証をかける方法。wp-adminだけでなくwp-login.phpにもアクセス制限を
なお、WordPressにアクセス制限としてBASIC認証をかける場合、ダッシュボードであるwp-adminフォルダだけでなくwp-login.phpファイルにもBASIC認証をかけることを推奨します。
[WordPressログイン画面とダッシュボードにBASIC認証でアクセス制限をかける方法 | まほウェブ](https://marketing-wizard.biz/blog/security/wp-login-basicauth/)WordPressログイン画面とダッシュボードにBASIC認証でアクセス制限をかける方法
具体的なBASIC認証の作成・設定方法とあわせて說明しています。
WordPressでのBASIC認証の設定・実装を検討している方はぜひご一読ください。
Leave a Reply