[Up] [Next] [Previous]  [Home]

アクセス制御とセキュリティ

NCSA httpd では次の二つの方法でWWWサーバへのアクセスを制限できます。

アクセス制御ファイル

アクセス制御とユーザー認証はサーバ全体またはディレクトリ毎に可能です。 NCSA httpd ではファイル毎のアクセス制限はサポートされていません。もし、 個々のファイルでプロテクトをかける必要があれば、そのファイルをディレク トリの中に置いてプロテクトしなければなりません。

ディレクトリのアクセス制限をグローバル ACF で行う場合は、次のように <Directory>ディレクティブで制限したいディレクトリを指定 して、制限を行なう<Limit>ディレクティブを使用します。

<Directory /usr/local/etc/httpd/htdocs/subdirecty>
        <Limit GET POST>
        order,
        deny from,
        allow from,
        require
        <Limit>
</Directory>

とします。

<Limit>ディレクティブは、次のようにメソッドによりクライ アントからの要求を制限します。

<Limit メソッド1 メソッド2 ... メソッドn>
ただし、メソッドは GET と POST のみサポートしています。Limitディレクティ ブを閉じる場合は</Limit>を使用します。
.htaccessを使って、個々のディレクトリで行う場合は <Limit>ディレクティブのみを使用します。

<Limit GET>
  order,
  deny from,
  allow from,
  require
</Limit>

アクセス制御用ディレクティブ

アクセス制御、認証に使用されるディレクティブを下表に示します。


ディレクティブ パラメータ例 用途

<Limit> <Limit GET POST> アクセス制限節の開始
</Limit> </Limit> アクセス制限節の終了
order deny,allow アクセスの 評価順
deny from .foo.co.jp アクセ ス拒否するドメインまたはIPアドレス
allow from .foo.co.jp アクセ ス許可するドメインまたはIPアドレス
requre ben bob tom アクセス を許可するユーザまたはグループ
AuthName Foo Members Only 認証を要求する際に表示されるメッセージ
AuthType Basic 認証方式 (Basic, PGP, PEM)
AuthUserFile /www/etc/passwd パスワードファイルのパス名
AuthGroupFile /www/etc/group グループファイルのパス名

ドメイン毎のアクセス制限

ドメイン名やIPアドレスによって、WWWサーバーへのアクセスを制限するメカ ニズムは、組織内のみにアクセスを許す場合や特定のグループにのみアクセス を許す場合に用いられます。

ドメイン制御ディレクティブ

ドメインのアクセス制御ディレクティブは以下の三つがあります。これらは、 <Directory>ディレクティブの中で用いられます。
order
Limit節の中で評価される denyallow の順番を定義します。denyallowの順番がデフォ ルトです。
allow
ホストがディレクトリにアクセスできることを定義します。
deny
ホストがディレクトリにアクセスできないことを定義します。

アクセス制御の方法

初期のWWWサーバーのコンフィギュレーションでは、アクセス制限はかかって いません。

<Directory /usr/local/etc/httpd/htdocs>
        Options Indexes FollowSymlinks
        AllowOverride All
        <Limit GET>
                order allow,deny
                allow from all
        <Limit>
<Directory>

例えば、ローカル組織内でアクセス制限をする場合、 access.confを次のように変更し、httpdを再起動します。

<Directory /usr/local/etc/httpd/htdocs>
        Options Indexes FollowSymlinks
        AllowOverride None
        <Limit GET>
                order deny,allow
                deny from all
                allow from foo.co.jp
        <Limit>
<Directory>

アクセス制限のないパターンとの違いは次のとおりです。

複数のドメイン名を許可したかったり、IPアドレスとドメインを組合せること も可能です。その場合、次のように記述します。IPアドレスの場合、一致する アドレスを記述します。下記の場合、172.16.0.1 〜 172.16.255.254 までが 許可されます。

allow foo.co.jp foo.com 172.16.
allow foo.co.jp foo.com 172.16』のように最後にドットがない と、172.16n.n.n のようなアドレスにもアクセスが許されてしまいます。IPア ドレスを記述する場合は、最後にドットを入れて記述して下さい。(今井@住 友電工様より御指摘)

ディレクトリ毎に制限する場合、.htaccessファイルに <Limit>ディレクティブを置き、ACFの時と同様の記述形式で 制限します。

<Limit GET>
        order deny,allow
        deny from all
        allow from foo.co.jp
</Limit>

ユーザー認証

ユーザー認証はサーバ全体または個々のディレクトリに対して行なうことがで きます。ユーザー認証を行うと、そのサーバまたはディレクトリにアクセスす る際に、ちょうどログインするようにユーザ名とパスワードの一致が求められ ます。ユーザ名とパスワードを含んだファイルはシステムが持つもの (/etc/passwrd)と一致する必要はありません。WWWサーバー用にユーザ 名/パスワードのファイルが用意されます。

NCSA Mosaic の場合、ユーザー認証が設定されてくると次のようなプロンプト が表示されます。


NCSA Mosaic のユーザ認証ウィンドウ(ユーザ名入力)

ユーザ名入力後、


NCSA Mosaic のユーザ認証ウィンドウ(パスワード入力)

Netscapeの場合、一度にユーザー名とパスワードを入力するウィンドウが次の ように表示されます。


Netscape のユーザ認証ウィンドウ

ユーザー認証はWWWサーバ全体に行われる事は少なく、一 般に特定のディレクトリに対して行われます。そして、ユーザー名とパスワー ドを収めたファイルは一つにまとめることもできますし、個々のディレクトリ 毎に持つ事もできます。そのパスワードファイルは一般に.htpasswdと いう名称で使われます。

例です (ユーザ名をyamada、パスワードを yamada で 入力してみて下さい)

パスワードファイルの管理

パスワードファイルにユーザーを登録する場合やパスワードを変更する場合、 NCSA httpd ソースパッケージの supportディレクトリにある htpasswdプログラムを使用します。htpasswdは次のように使い ます。
% htpasswd [-c] .htpasswd username 
username は加えたいあるいはパスワードを変更したいユーザー名です。 -c フラグはそこにパスワードファイル(.htpasswd)が存在せず、 新たに作成する場合に用います。パスワードファイルは以下のようにユーザー 名とパスワードがセミコロン(:)で区切られたファイルです。削除する場合は、 エディタで該当するユーザー行を削除します。

ユーザ名:暗号化されたパスワード

taro:y1ia3tjWkhCK2
jiro:kd03g0Wk09ErD
saburo:tck3GxmQE7h

access.confによる認証設定

WWWサーバ全体に認証設定を行う場合、DocumentRootに認証機能を与 える設定を行う。次のように access.confを設定すればよい。

<Directory /usr/local/etc/httpd/htdocs>
        Options Indexes FollowSymlinks
        AllowOverride None
        AuthUserFile /usr/local/etc/httpd/conf/.htpasswd
        AuthGroupFile /dev/null
        AuthName By Secret Password Only!
        AuthType Basic
        <Limit GET>
                require user username
        </Limit>
</Directory>

上記の設定を行ったら、WWWのパスワードファイルを作成します。次のコマン ドを入力すると、新しいパスワードがファイルが作られ、新しいパスワードの 入力が促されます。そして、パスワードを入力すると、パスワードの再入力が 促され、正しいパスワードを入力すれば、完了です。
% htpasswd -c /usr/local/etc/httpd/conf/.htpasswd username

ディレクトリ毎に行う場合

個々のディレクトリで設定を行う場合、アクセス制御の時と同様のファイル .htaccessを使って、以下のように設定します。

AuthUserFile /usr/local/etc/httpd/conf/.htpasswd
AuthGroupFile /dev/null
AuthName By Secret Password Only!
AuthType Basic
<Limit GET>
        require user username
</Limit>

個々のディレクトリで設定する場合には、<Directory>節は必要ありま せん。

グループ認証

そして、次のようにACFを変更します。

<Directory /usr/local/etc/httpd/htdocs>
        Options Indexes FollowSymlinks
        AllowOverride None
        AuthUserFile /usr/local/etc/httpd/conf/.htpasswd
        AuthGroupFile /usr/local/etc/httpd/conf/.htgroup
        AuthName By Secret Password Only!
        AuthType Basic
        <Limit GET>
                require group groupname
        </Limit>
</Directory>

次にグループファイル/usr/local/etc/httpd/conf/.htgroupをを作成 します。
groupname: username1 username2 username3 ... usernameN
ユーザー名は空白で分割します。複数グループがあれば、一行づつ登録します。 そして、登録し終ったら、httpdを再起動します。

個々のディレクトリで設定を行う場合、アクセス制御の時と同様のファイル .htaccessを使って、以下のように設定します。

AuthUserFile /usr/local/etc/httpd/conf/.htpasswd
AuthGroupFile /usr/local/etc/httpd/conf/.htgroup
AuthName By Secret Password Only!
AuthType Basic
<Limit GET>
        require group groupname
</Limit>

個々のディレクトリで設定する場合には、<Directory>節は必要ありま せん。

ディレクトリのセキュリティ上の注意

FTP や Gopher は chroot()機能を持っているため、対象ディレクト リ以外へのアクセスはシステムレベルで制限されていますが、WWWサーバには、 この機能がありません。しかし、WWWブラウザは自由にディレクトリの行き来 ができないので、その心配は少ないと言えます。一番注意しなければならない のは、DocumentRootで定義されたディレクトリツリー以外のディレ クトリにシンボリックリンクを張った場合やユーザーディレクトリにあるプラ イベートなディレクトリがある場合です。この機能を使用した場合の安全性 を高めるために、WWW管理者は access.confファイルの followsymlinkオプションを無効にするか、 SymLinksIfOwnerMatchに変更した方が良いでしょう。

ユーザーのホームディレクトリにpublic_htmlディレクトリを設けると、 http://www.foo.co.jp/~username/ でアクセスできます。こ こに対して、個々にグローバルACFを許さないようにプロテクトをかける場合、 次の方法があります。

もし、全てのユーザーがあるディレクトリ(例えば、/home)にいる場合、 /home ディレクトリ全体にプロテクトをかけるだけです。 access.confファイルの中に次のディレクティブを加えます。

<Directory /home>
        AllowOverride None
        Options Indexes
</Directory>

ユーザーディレクトリがバラバラの場合、次のようにワイルドカードを使って 設定します。

<Directory /*/*/public_html*>
        AllowOverride None
        Options Indexes
</Directory>


[Up] [Next] [Previous]  [Home]