Webサイトやブログでも利用できるBASIC認証の仕組みと設定手順を詳しく解説します。
- BASIC認証を実装する詳しい手順ががわかります
- .htaccess、httpd.conf、VirtualHost.confの3種類のBASIC認証設定方法と手順がわかります
BASIC認証とは
BASIC認証(ベーシック認証)とはWebサイトやブログの全体や特定のページにパスワード認証を掛けて、特定のユーザーにしかアクセスできないようにする仕組みです。
BASIC認証はWebサーバの機能を利用しているので簡単に実装することが可能です。
BASIC認証をWebサイト全体に設定するとGoogleなどのクローラーにインデックスもされなくなるので注意が必要です。つまりWebサイトのトップページにBASIC認証を設定してしまうとGoogleやYahooなどの検索結果に表示されなくなります。
社内向けサイトにBASIC認証は利用される
例えばBASIC認証を利用することで外部からはアクセスできない、社内向けのサイトを作成することができます。特定の人しか利用しないサイトにSEOとかまったく関係ないので。
完全に社内向けのサイトの場合は、IP制限といって社内で利用しているIPアドレスからのアクセスでないとWebサイトが表示されない設定を組み合わせることが多いです。
個人ブログサイトではBASIC認証の使い道は少ない
個人ブログでBASIC認証を利用する場面は特定のページだけをアクセス制限したい場合です。例えば有料情報ページなどを設ける場合です。
ただ、スマホではBASIC認証のユーザIDとパスワード情報をPCのように保存できないので、毎回アクセスする度に入力しないといけないので煩わしいです。
このように個人ブログではWebサイト全体にBASIC認証を掛ける意味も用途もほぼありません。
BASIC認証はセキュリティ安全性が低い
BASIC認証で会社などの利用者数の多いサイトを管理をするのは大変なので、LDAPサーバー内に登録されているアカウント情報を利用できるLDAP認証を使う場合がほとんどです。
他にもセキュリティ安全性が高いDigest認証(ダイジェスト認証)などもありますが、現在はSSL通信が大前提となっているのであまり見かけません。
BASIC認証を設定する方法
BASIC認証は下記3つの設定方法があり、それぞれの影響範囲が違います。
- .htaccess
設置したディレクトリの配下全てにアクセス制限(Basic認証)を設定できる - httpd.conf
Webサイトの全体や特定のページにアクセス制限(Basic認証)を設定できる - VirtualHost(ヴァーチャルホスト)の.conf
バーチャルホスト毎に全体や特定のページにアクセス制限(Basic認証)を設定できる
大きく別けてこの3つのファイルと範囲にBasic認証の設定をすることができます。
最も簡単なのが.htaccessと.htpasswdを利用するディレクトリ単位でのBASIC認証設定です。
企業や大規模なサーバーだとWebサイト毎にBasic認証を実装する際はhttpd.confやVirtualHost.conf(ヴァーチャルホストの設定ファイル)に設定する方法が一般的です。
基本的な記載の仕方はどれも同じで、Basic認証の設定を記載するファイルの違いだけです。
3つの設定方法すべてで.htpasswdファイルにユーザIDと暗号化したパスワードを記載したBASIC認証を設定できます
.htaccessを使う方法
.htaccessファイルにBASIC認証の設定を記述し、.htpasswdファイルにユーザ名とパスワードを記述します。ディレクトリ単位でのアクセス制限(BASIC認証)になります。
- .htaccess
- .htpasswd
.htaccessファイルと.htpasswdファイルをBasic認証を設定したいディレクトリに設置する必要があります。
.htaccessファイルの記載内容のAuthUserFileにはURLではなく.htpasswdファイルのフルパスを書く必要があります。ファイルのフルパスを表示する方法下記の2つです。
- テラターム(Tera Term)などでサーバーにSSH接続し”pwd”コマンドを実行
- サーバーのフルパスを取得するためのphpファイルを設置してアクセス ※PHPの設定が済んでいないと機能しません
.htaccessファイルの記載方法
.htaccessファイルはBASIC認証を設定したいディレクトリに置きます。
置いたディレクトリの配下はすべてBasic認証が掛かります。
.htaccessファイルは下記のように記載します。
AuthName "Authentication" AuthType Basic AuthUserFile "/usr/local/apache/htdocs/.htpasswd" require valid-user
各項目の意味と内容は下記のとおりです。
- AuthNameは認証名です。任意の名前でOKです。
- Basic認証なので Basic と記載します
- .htpasswdファイルが保存されている場所をフルパスで記載します。お互いに一致していればファイル名は何でもOKです
- requireはアクセスを許可するユーザーを指定します。valid-user は.htpasswdファイルに含まれるすべてのユーザを許可します。例えばユザーIDがyublogだけにアクセスを許可したい場合はvalid-userを消してyublogを記載します。
httpd.confを使う方法
.htaccessファイルを使わずに直接Webサーバ(apache)の設定ファイル(httpd.conf)にBASIC認証の設定を記述することでWebサイト全体や特定のページだけにBASIC認証を設定することができます。
.htpasswdファイルにユーザ名とパスワードを記述する方法以外にも、LDAPやDigest認証なども利用できますが一般的ではないので当記事では割愛します。
httpd.confの保存場所はApache設定によって違います。
/usr/local/apache/conf/httpd.conf
や
/etc/httpd/conf/httpd.conf
などサーバー環境によって異なってきます。
httpd.confファイルの記載方法
httpd.confファイルをティストエディタで開いて下記を一番下に追記します。
記述例: <Directory "/var/www/html"> AuthName "Authentication" AuthType Basic AuthBasicProvider file AuthUserFile /usr/local/apache/htdocs/.htpasswd Require valid-user </Directory>
Apacheのディレクティブ
<Directory “/var/www/html”>はディレクティブというWebサーバ(Apache)の制御や設定を司る部分です。この場合はBASIC認証を適用する範囲です。
複数のディレクティブが存在する場合は上から順番に優先順位が高くなります。
- <Directory> (正規表現なし)
- <Direcotry> (正規表現あり)
- <DirecotryMatch>
- <Files>、<FilesMatch>
- <Location>、<LocationMatch>
VirtalHost.confを使う方法
1台のWebサーバ内で複数のWebサイトを運営していてWebサイト毎にBASIC認証を設定したい場合はVirtualHost.confファイル内に記述します。
VirtalHost.confファイルの記載方法
VirtalHost.confファイルをティストエディタで開いて下記を一番下に追記します。
※VirtalHost.confはWebサイト毎にファイル名が違うはずなので適宜置き換えてください。
記述例: <VirtualHost *:443"> ~省略 <Directory "/var/www/html"> AuthName "Authentication" AuthType Basic AuthBasicProvider file AuthUserFile /usr/local/apache/htdocs/.htpasswd Require valid-user </Directory> </VirtualHost>
.htpasswdファイルの記載方法
.htpasswdファイルの作成方法は先に紹介した3種類のBASIC認証で共通です。
.htpasswdファイルの中身は
ユーザID:暗号化されたパスワード
上記のように記載しますが、半角の:(コロン)でユザーIDと暗号化されたパスワードで区切る必要があります。
.htpasswdファイルのパスワードは暗号化が必須
パスワードは必ず暗号化しないと認証が通りません。
暗号化されていなパスワードを.htpasswdファイルに記述している場合は認証画面でIDとパスワードを入力し、合っていても”Internal Server Error”と表示されます。
パスワードを暗号化するサイトはこちらです↓
.htaccess による認証用 パスワード暗号化ツールhttps://www.luft.co.jp/cgi/htpasswd.php
↑このサイトだとIDを含めて生成してくれるので.htaccessファイルにコピペするだけです。
htpasswdコマンド
前述のパスワード暗号化のサイトを使う方法以外にも、htpasswd コマンドでも.htpasswdファイル作成と同時にパスワードを暗号化できます。
htpasswd -c パスワードファイルのディレクトリ/.htpasswd Basic認証のユーザー名
※同じファイル名があった場合は上書き保存されます。
実行例: htpasswd -c /usr/local/apache/htdocs/.htpasswd yublog New password:パスワードを入力 Re-type new password:再度パスワードを入力 Adding password for user yublog cat .htpasswd yublog:$apr1$GxpZCjHt$iret7ipQ ↑このようにパスワードが暗号されます。
サーバーのフルパスをphpファイルで表示する方法
フルパスはLinuxコマンドのpwd を実行して表示するのが手っ取り早いですが、もしコマンドが使えない場合は下記のPHPのファイルを作成し、Webブラウザからアクセスすることでも表示できます。
ファイル名は何でもいいですが例えば、pass.phpで作成します。
作成したファイルに下記の3行を記載します。
<?php echo __FILE__ ; ?>
保存したpass.phpファイルのパーミッションを変更します。
chmod 705 pass.php
上記を設定後に、例えばhttp://yublog.jp/pass.php と ドメイン名+pass.phpでchromeなどのWebブラウザでアクセスするとフルパスを表示することができます。
Linux(CentOS)にPHPが入っていないとpass.phpは動かないので下記コマンドでPHPのインストールをはじめとした各種設定をしないといけません。
# yum -y install php
コメントを除外して表示するLinuxコマンド
# cat (設定ファイル)| grep -v ^# | grep -v ^$
最後にApacheを再起動する
BASIC認証を有効にするには、どの設定方法でもWebサーバ(Apache)の再起動が必要です。再起動しないと有効化されません。
Linuxサーバーの種類やApacheのバージョンによって再起動コマンドは異なりますので下記は参考程度にしてください。
/usr/local/apache/bin/apachectl restart や /etc/init.d/httpd restart
httpdプロセスを確認するコマンドの一例です
ps aux | grep httpd /usr/local/apache/bin/httpd -k start と表示されたら起動しています。
まとめ
BASIC認証は個人ブログで使う機会はほとんどなく、ほぼすべてが法人の社内限定公開のWebサイトで使うことになります。
BASIC認証は昔からあって最も簡単なWebサーバのセキュリティ設定です。
セキュリティの脆弱性はSSL通信で守られているとはいえ、他のセキュリティ施策であるWAFなどを併用したほうが安心です。
エックスサーバのレンタルサーバーではhttpd.confやVirtalHost.confファイルにはアクセスできないため、任意のディレクトリに.htaccessファイルを置くBASIC認証設定しかできません。