WWW/WWWサーバによる情報公開 - 応用編/情報へのアクセス制限

ここでは,パスワードを知っている特定のユーザやグループメンバ,また特定のドメインやホストからのアクセスに対してのみ情報を公開する方法を説明します.

基本的に,public_html以下のディレクトリにあるすべてのファイルは,世界中のユーザに対して制限なしに公開されます.しかし,CNS の外部からアクセスされては不都合なファイルなども存在します.このような場合,各ユーザはディレクトリにパスワードを設定し,そのパスワードを知っているユーザに対してのみ(図4.1),または,特定のドメイン(CNS など)やホスト(ccz00.sfc.keio.ac.jpなど)からのアクセスに対してのみファイルを公開できます.CNS では次に示すアクセス制限を設定できます.

  • パスワードを知っているユーザにのみアクセスを許可する
  • パスワードを知っているグループメンバにのみアクセスを許可する
  • CNS 内部からのアクセスのみを許可する
  • 特定のホストからのアクセスのみを許可する
  • パスワードとホスト名,ドメイン名を組み合わせてアクセスを制限する


図 4.1:ユーザ認証ダイアログ
図 4.1:ユーザ認証ダイアログ

ページにアクセス制限の設定をしても,CNS のユーザであれば直接ファイルの内容を見ることができてしまいます.この機能は主にCNS の外部からのブラウザによるアクセスを制限する必要が生じた際に利用するものです.

4.1.1 パスワードを知っているユーザにのみアクセスを許可する

`/home/t01000tf/public_html/Secret'というディレクトリの下にあるファイルを,パスワードを知っているユーザにのみアクセスを許可する方法を説明します.

1.
`.htaccess'ファイルを作成する.
アクセス制限を行うディレクトリ(この場合はSecret)の下に, .htaccessという名前のファイルを,図4.2のような内容で作成します.


図 4.2:` .htaccess'ファイルの例(特定のユーザのみ許可)
AuthUserFile /home/t01000tf/etc/.htpasswd
AuthGroupFile /dev/null
AuthName ByPassword
AuthType Basic

<LIMIT GET>
require user taro
</LIMIT>

AuthUserFileには,後で作成するパスワード設定ファイルを絶対パスで指定します.URLによるディレクトリの指定や相対パスによる指定ではエラーとなるので注意してください.require userには,このディレクトリへのアクセスを許可するユーザ名を指定します.これはCNS でのログイン名とは関係なく,自由に設定できます.

2.
パスワード設定ファイルを保存するディレクトリを, .htaccessの中で指定した通りに作成する.

% mkdir  /home/t01000tf/etc<RET>
% touch /home/t01000tf/etc/.htpasswd<RET>
% _

.htpasswdは,public_html以外の場所に作成してく ださい.

3.
パスワードを登録する.
パスワードの登録にはhtpasswdコマンドを利用します. htpasswdコマンドはzz???z???ccz??u???で利用できます.ここでは,先に.htaccessの中で指定した `/home/t01000tf/etc/.htpasswd'というパスワード設定ファイルを新規に作成し,次にtaroというユーザのパスワードを登録する例を示しま す.

% htpasswd  -c  /home/t01000tf/etc/.htpasswd taro<RET>
% _

htpasswdコマンドを実行すると, taroというユーザのパスワードを入力する状態になります. ここで,そのユーザに対するパスワードを入力します.2度求められるので,同じように入力すると,/home/t01000tf/etc/.htpasswdというファイルが新規に作成され,この中にパスワードが暗号化されて書き込まれます.

これでパスワードが設定されます.WWWブラウザでこのディレクトリ以下,つまり`http://www.sfc.keio.ac.jp/~t01000tf/Secret/'以下の情報 にアクセスすると,ユーザ認証用のダイアログ(図4.1)が開き,ユーザ名とパスワー ドの入力を求められるようになります.なお,ディレクトリにアクセス制限を設定すると,それ以下の階層のディレクトリに対しても設定が有効になります.


4.1.2 パスワードを知っているグループメンバにのみアクセスを許可する

`/home/t01000tf/public_html/groupwork'というディレクトリの下にあるファイルを,パスワードを知っているグループメンバにのみアクセスを許可する方法を説明します.

1.
`.htaccess'ファイルを作成する.
アクセス制限を行うディレクトリ(この場合はgroupwork)の下に,.htaccessという名前のファイルを図4.3のような内容で作成します.



図 4.3:` .htaccess'ファイルの例(特定のグループメンバのみ許可)
AuthUserFile /home/t01000tf/etc/.htpasswd
AuthGroupFile /home/t01000tf/etc/.htgroup
AuthName ByPassword
AuthType Basic

<LIMIT GET>
require group friends
</LIMIT>

AuthUserFileAuthGroupFileには,後で作成するパスワード設定ファイルやグループ設定ファイルを絶対パスで指定します.URLによるディレクトリの指定や相対パスによる指定はエラーとなるので注意してください. require groupには,このディレクトリにアクセスを許可するグループ名を指定します.これは自由に名称を設定できます.

2.
パスワード設定ファイルやグループ設定ファイルを保存するディレクトリを, .htaccessの中で指定した通りに作成する.


% mkdir  /home/t01000tf/etc<RET>
% _

.htpasswd.htgroupは,public_html 以外の場所に作成してください.

3.
パスワードを登録する.
パスワードの登録にはhtpasswdコマンドを利用します.ここでは,先に.htaccessの中で指定した/home/t01000tf/etc/.htpasswd というパスワード設定ファイルを新規に作成し,ここにtarohanakojiroというユーザのパスワードを登録する例を示します.

% htpasswd  -c  /home/t01000tf/etc/.htpasswd taro<RET>
% htpasswd  /home/t01000tf/etc/.htpasswd hanako<RET>
% htpasswd  /home/t01000tf/etc/.htpasswd jiro<RET>
% _

htpasswdコマンドを実行すると,各ユーザのパスワードを入力する状態になります. ここで,そのユーザに対するパスワードを入力する.2度求められるので,同じように入力すると,/home/t01000tf/etc/.htpasswdというファイルが新規に作成され,この中に各パスワードが暗号化されて書き込まれます.

.htpasswdを新規に作成するときにはhtpasswdコマンドに -cオプションをつけますが,以後,同じパスワード設定ファイルに対してパスワードを設定する場合は -cオプションをつけないで実行してください.


4.
`.htgroup'ファイルを作成する.
`.htaccess'ファイルの中のAuthGroupFileで指定したディレクトリ(この場合はetc)の下に,.htgroup という名前のグループ設定ファイルを次の内容で作成します.


friends: taro hanako jiro

これでパスワードが設定され,グループ単位でアクセスを許可できるようになります.

4.1.3 CNS からのアクセスのみの許可


ドメイン名によってアクセス制限をするには,アクセス制限するディレクトリに.htaccessという名前のファイルを図4.4のような内容で作成します.この例では,ドメイン`sfc.keio.ac.jp' (CNS 全体)からのアクセスのみを許可するように設定しています.



図 4.4:` .htaccess'ファイルの例(特定のドメインのみ許可)
<LIMIT GET>
order deny,allow
deny from all
allow from sfc.keio.ac.jp
</LIMIT>


これで,そのディレクトリとそれ以下の階層のディレクトリはCNS 内のホストからしかアクセスできないようになります.


4.1.4 特定ホストからのアクセスのみの許可


上の例はドメイン名によるアクセス制限ですが,ホスト名によるアクセス制限も行えます.アクセスを制限するディレクトリに,.htaccess という名前のファイルを図4.5のような内容で作成します.



図 4.5:` .htaccess'ファイルの例(特定ホストのみ許可)
<LIMIT GET>
order deny,allow
deny from all
allow from ccz00.sfc.keio.ac.jp
</LIMIT>


これで,CNS 内にあるccz00.sfc.keio.ac.jpという名前のホストからのアクセスのみ許可されます.

Proxyサーバ を経由してアクセスする場合には,ブラウザが動作しているホスト名ではなく, Proxyサーバとして設定されているホスト名を指定してください.

4.1.5 パスワードとホスト名,ドメイン名を組み合わせたアクセスの制限

パスワードによるアクセス制限と,ホスト名,ドメイン名によるアクセス制限との組み合わせも可能です.

その際は,次のように`.htaccess'ファイル の,Userfile,Groupfileの部分に,4.1.14.1.2を参考にして,適切なディレクトリ,ファイル名を指定します.

AuthUserFile Userfile
AuthGroupFile Groupfile

また,4.1.1から4.1.4 を参考に,次の設定を必要に応じて<LIMIT> </LIMIT>の間に書き加えます.

require group UserGroupName
require user UserName
allow from DomainName
allow from HostName