当サイトのコンテンツをhtmlソースごとそのままコピーして自分のサイトのコンテンツにしてしまう人がいます。そのような行為は当サイトの著作権を侵害する行為ですので絶対にしないでください。発見し次第断固とした措置を取ります。
基本認証は、HTTP/1.0の規格で、特定のユーザーのみにアクセスを許可したり、また特定のユーザーのアクセスを拒否したりするのに用いられる、現状では唯一の方法です。ここでは、具体的なケースごとの設定方法と注意事項、自動パスワード発行システムについて触れたいと思います。
誰かがブラウザから制限をかけた領域(URL)にリクエストを出すと、サーバは認証のための処理を行います。具体的にはユーザー名とパスワードを入力するためのダイアログボックスが現れ、そこに入力をしてサーバにデータを送ります。サーバは入力されたIDとパスワードが許可されているユーザのものかどうかをあるファイルを参照して調べ、許可されているものであればリクエストされたページを出力し、許可されていない場合にはHTTPレスポンスステータスコード"401"のエラー(Authorization Required)を表示します。
基本認証では、パスワードファイルで指定したユーザを初めに認証し、その上で特定のユーザまたはグループに許可を与えるという2重の構造になっています。そのため、「private」というディレクトリにはパスワード登録者全員を通過させ、その上で、privateディレクトリの下にある「a」ディレクトリには誰と誰だけ、「b」ディレクトリにはどのグループだけアクセス許可を与える、といったことが可能になります。
▲TOP
上の説明で"あるファイル"といったのが、ここで説明するアクセス制御ファイル(ACF)です。アクセス制御ファイルには2種類あります。
ファイル名 |
有効範囲 |
設定者レベル |
httpd.conf |
サーバ全体に対して有効 |
サーバ管理者(root) |
.htaccess |
ディレクトリ(下の階層をすべて含む)単位で有効 |
ディレクトリに対して書き込み権限を有する者 |
ここでは私たちが指定し得る".htaccess"について説明します。
ファイルの内容のひな型はだいたい次の通りです。サーバによってフォーマットが異なる場合があるので、詳しくはサーバ管理者または詳しい方にお尋ねください。
<directory /home/iwanami/privat>
AuthUserFile /home/iwanami/private/.private
AuthGroupFile /dev/null
AuthName ByPassword
AuthType Basic
<limit post get>
order deny,allow
deny from all
allow .or.jp
require user ichiro jiro saburo
</limit>
</directory>
▲TOP
基本認証のセキュリティについては、次の2つのことを念頭に置いてください。
- 1.パスワードはBASE64エンコーディングをされるが、もともとオープンなネットワークを前提としていないために悪意の第三者がこれを盗んだり、破壊したりすることは可能です。
- 2.パスワードファイルは第三者がアクセスできないように、例えばpublic_htmlの上のディレクトリ(ユーザのホームディレクトリ)などに置くことをお勧めします。
基本認証のしくみは便利である半面、現状では限界があるということです。
▲TOP
.htaccessの中身を次のようにします。
<Limit GET>
order allow,deny
deny from .bbtec.net
allow from all
</Limit>
この場合、「ヤフー! BB」からのアクセスができないということになります。
▲TOP
.htaccessの中身を次のようにします。
<Limit GET>
order deny,allow
deny from all
allow from .bbtec.net
</Limit>
この場合、「ヤフー! BB」のAPからのアクセスのみ許可されるということになります。
▲TOP
ユーザ単位で指定する場合は、まずパスワードデータファイルを作成しなければなりません。
データファイルの名前を".secret"(なぜファイル名の1文字目に「.」を付けるかについては、いずれ解説します)とし、自分のホームディレクトリ(public_htmlの上のディレクトリ)に作成します。
作成の方法ですが、一番基本となる方法は、"htpasswd"というパスワード生成用プログラムを利用することです。このファイルはプロバイダで提供していると思いますのでパスを調べてください(/usr/binもしくは/usr/local/binにあるかもしれません)。もしない場合は自分の環境にこのファイルを置く必要がありますが、今回は割愛します。
シェル上で、htpasswdを実行します。
% htpasswd -c /home/iwanami/.secret iwanami(Enter)
基本型は、
htpasswd [-c] パスワードファイル名 ユーザー名
で、"-c"オプションは新規にファイルを作成する場合だけ指定します(追加したい場合にこのオプションを付けてしまうと、新しい内容が上書きされてしまいますので注意)。
パスワードファイルはカレントディレクトリにない場合はフルパスで指定してください。
Adding password for iwanami.
New password: abcdefgh(Enter)
Re-type new password: abcdefgh(Enter)
%
この例のように、"iwanami"のパスワードを追加します、とメッセージが出て、新しいパスワードを聞いてきますので、この場合は"abcdefgh"という文字にしてみます。実際には画面には文字は表示されず、カーソルも動きません。次に再入力を促してきますので、全く同じパスワードを入力します。これで追加完了です。2人目からは"-c"オプションを外して同様の操作で追加できます。
さて、.secretにデータが入っているか見てみましょう。
% cat .secret(Enter)
iwanami:VbEmZKL3VBGOs
%
ユーザ名"iwanami:"に続いて暗号みたいな文字が出てきました。これが"abcdefgh"が暗号化されたデータです。
これでパスワードファイルの準備ができたので、次に".htaccess"の中身を次のようにします。
AuthUserFile /home/iwanami/.secret
AuthGroupFile /dev/null
AuthName secret
AuthType Basic
<Limit GET>
require valid-user
</Limit>
このファイルをアクセス制限をしたいディレクトリに置きます。これで、.secretに登録されているユーザのみがアクセスを許可されることになります。
▲TOP
上記の方法の応用です。
htpasswdによるパスワードファイルの作成方法については上記と同じですので省略します。
ここでは、新たにグループファイルというものを作成します。
アクセス許可状況を以下のようにするとします。
・/home/iwanami/public_html/…パスワード登録したユーザのみアクセス可
上記の許可したユーザのうち、
・/home/iwanami/public_html/boys/…男性のみアクセス可
・/home/iwanami/public_html/boys/…女性のみアクセス可
グループファイル名を".secret_group"とし、以下の通りとします。
boys: iwanami koji tadao shinji keisuke
girls: masami yoko yoshiko shiori
上記のユーザ名はすべてパスワード登録してあることが前提です。
public_htmlへ置く.htaccessを以下の通りとします。
AuthUserFile /home/iwanami/.secret
AuthGroupFile /home/iwanami/.secret_group
AuthName secret
AuthType Basic
<Limit GET>
require group boys
require group girls
</Limit>
public_html/boysへ置く.htaccessを以下の通りとします。
AuthUserFile /home/iwanami/.secret
AuthGroupFile /home/iwanami/.secret_group
AuthName secret
AuthType Basic
<Limit GET>
require group boys
</Limit>
public_html/girlsへ置く.htaccessを以下の通りとします。
AuthUserFile /home/iwanami/.secret
AuthGroupFile /home/iwanami/.secret_group
AuthName secret
AuthType Basic
<Limit GET>
require group girls
</Limit>
▲TOP
さて、上記の方法でアクセス制限をかけることが可能になったわけですが、これはシェルでそのつど追加していかなければならず、そのたびにパスワードファイルをフルパスでタイプして…なんて面倒です。そこで、世の中にはパスワードの発行を自動化してしまおう、と考える人が出てくるので、これはPerlなどで書くことができます。
▲TOP