アクセス制御

利用者を限定した情報公開の方法について説明します。

IPアドレスによる方法

三重大学からしか見られたくないものは,そのディレクトリに .htaccess というファイルを作り,その中に次のように書いておきます。

deny from all
allow from 133.67

これは,三重大学のIPアドレスが 133.67.* であることを使っています。

.htaccess というファイルはメモ帳や秀丸などのテキストエディタで作成すればいいのですが,Windows ではうまく作成できないかもしれません。 そのときは htaccess.txt のような名前で保存してサーバに送った後で,サーバ上で名前を変えます。

三重大学の学内には 10.* というプライベートアドレスのパソコンも多数ありますが,サーバの手前で 133.67.* にアドレス変換(NAT)されるようになっています。 これに対して,三重中京大学では 192.244.75.* というグローバルアドレスと 10.* というプライベートアドレスが混在します。 さらに,61.115.240.68 というアドレスに変換される場合もあります。 そこで,次のようにすれば学内専用のページができます。

deny from all
allow from 192.244.75
allow from 10
allow from 61.115.240.68

別の例として,特定のホスト以外から掲示板等への書き込みを禁止するには次のようにします。

<LimitExcept GET>
    deny from all
    allow from 10.11.12.13
</LimitExcept>

パスワードによる方法

一般に見られたくないものの入っているディレクトリに .htaccess というファイルを作り,その中にたとえば次のように書いておきます。 これは,e299999 という人が,/home/mieu/e299999/public_html/limited というディレクトリの内容にパスワードを設定する場合の例です。 3行目は後述のパスワードファイルの名前です(必ずフルパスで指定します)。

AuthType Basic
AuthName "Himitsu"
AuthUserFile /home/mieu/e299999/public_html/limited/.htpasswd
require valid-user

こうしてから,htpasswd のページでユーザ名(半角英数字8文字程度まで)とパスワード(半角英数字)を打ち込むと,.htpasswd に書き込むべき内容が表示されますので,それをコピー&ペーストして使ってください。 複数の人を登録したい場合は,複数行並べます。

これで,そのディレクトリ以下にあるものを見ようとすると,最初にユーザ名とパスワードを聞いてきます。

一度パスワードを入れてしまえば,そのディレクトリ以下のどのファイルもパスワードなしで見えるようになります。 いったんブラウザを終了して立ち上げ直すまでパスワードを聞いてきません。 たとえブラウザを再起動しても,そのパソコンのキャッシュに残っている情報はパスワードなしで見えてしまう可能性があります(ただし「再読み込み」ボタンを押せばパスワードを聞いてきます)。 したがって,次に同じパソコンを使う人が見て困る情報なら,「キャッシュを空にする」という操作をしておきましょう。

掲示板等で,書き込むときだけパスワードを要求するには,次のようにします。

AuthType Basic
AuthName "Himitsu"
AuthUserFile /home/mieu/e299999/public_html/limited/.htpasswd
<LimitExcept GET>
  require valid-user
</LimitExcept>

詳しい人へ

サーバにログインできる環境があり,UNIXやLinuxに詳しい人なら,次のようにして .htpasswd を作ることができます。 コマンドの名前は,自分でコンパイルした Apache 2 なら /usr/local/apache2/bin/htpasswd,CentOS なら /usr/bin/htpasswd,Vine Linux 4 の Apache 2 なら /usr/bin/htpasswd2 です。

htpasswd2 -c .htpasswd username

こうすると,username というユーザに対するパスワードを2回聞いてきますので,同じパスワードを2回打ち込みます。

さらにユーザを追加するには,続けて次のように打ち込みます。

htpasswd2 .htpasswd anotheruser

今度は -c がないことにご注意ください。 やはりパスワードを2回聞いてきます。 これを必要なだけ続けます。

以上の方法ではパスワードが crypt という関数でハッシュされます。 Apache 1.3.9 以降(Apache 2 も)では,より安全な MD5 を使うオプション -m が使えます。 -c -m-cm のように縮められます。

Digest認証

上述のような通常の認証(Basic認証)ではパスワードが平文でネットワークを流れます。 最近のブラウザやApache 2.xは標準でDigest認証という新しい方式に対応していますので,それを使ってみましょう。 以下はUNIXやLinuxに詳しいと仮定します。

まず .htaccess はたとえば次のように書きます。

AuthType Digest
AuthName "hogehoge"
AuthDigestFile /home/hoge/.htpasswd
Require valid-user

Apache 2.2 では AuthDigestFile ではなく AuthUserFile と書きます。

次に,htdigest コマンドを使ってパスワードファイルを作ります(初回だけ -c オプションを付けます)。 コマンドの名前は,自分でコンパイルした Apache 2 なら /usr/local/apache2/bin/htdigest,CentOS なら /usr/bin/htdigest,Vine Linux 4 の Apache 2 なら /usr/bin/htdigest2 です。

htdigest2 -c .htpasswd hogehoge okumura

パスワードを聞いてきますので,2回打ち込みます。

注意

上記のようなアクセス制御をしても,Webサーバにログインできるユーザは,直接あなたのファイルを読むことができるかもしれません。 ログインできなくても,CGIやPHPなどをうまく使ってパスワードを回避することができるかもしれません。 本当に秘密のファイルは共同利用のサーバには置かず,自前のWebサーバを立てるべきです。


奥村晴彦

Last modified: 2007-07-22 20:48:25