2003年11月11日火曜日

Apacheアクセス制御

baba さんの日記で、Apache のアクセス制御について以下のような質問があった。

あるディレクトリ以下に対して、以下のようなアクセス制御を
することは可能でしょうか。

* ある特定の社内サブドメイン(あるいは特定ホスト)は
パスワード認証なし
* それ以外の社内からのアクセスはパスワード認証あり
* それ以外の社外からはアクセス不可

Apache のアクセス制御

Apache のアクセス制御では上記のようなことは単純には出来ないようだ。それは mod_access の仕様によるもので、ユーザー認証と IP 認証の組み合わせの認証は出来るものの、IP 認証の結果によってユーザー認証を変更するといった複雑な認証には対応していないためである。

また、例えば Directory での指定と .htaccess の指定の両方をしたらどうかというのもあるが、こちらも駄目である。これらの指定は順番に評価されるわけではなく、あらかじめマージされて評価されるためで、Apache がマージする順序により認証が上書きされてしまうのだ。

とりあえず簡単な方法

以上のことを踏まえたうえで、とりあえず簡単な方法は以下のとおりであろう。

Alias /baba2 /var/www/baba1
Alias /baba3 /var/www/baba1

<Location /baba1>
order deny,allow
deny from all
</Location>

<Location /baba2>
order deny,allow
deny from all
allow from 218.44.239.78

</Location>

<Location /baba3>
order deny,allow
deny from all
allow from 61.120.65.146

AuthName baba
AuthType Basic
AuthUserFile /home/tnh/.htpasswd
Require user tnh

Satisfy all
</Location>

/var/www/baba1 に実体を置き、http://hostname/baba2http://hostname/baba3 でアクセスしてもらおうという作戦である。とりあえずこの設定でうまく動作する。

しかしこの設定だとユーザーに URL 使い分けてもらわないといけないので、使い勝手が悪いだろう。

もう少し賢い設定

執筆中

0 件のコメント: