アクセスコントロール書法の拡張された部分に関しては、 hosts_options(5) の文書で解説する。この拡張は、プログラム が -DPROCESS_OPTIONS を指定して作成されたかどうかに左右される。
以下の文章では、daemon とはネットワークデーモンのプロセス 名を意味し、client とは、サービスを要求するホストの名前、 もしくはホストのアドレスを意味している。ネットワークデーモンのプ ロセス名は、inetd の設定ファイル中に明示されている。
アクセスコントロールのファイルが存在しない場合は、それらのファイ ルが空であったとみなされる。したがって、アクセスコントロールは、 アクセスコントロールファイルを準備しない事によって停止する事がで きる。
daemon_list : client_list [ : shell_command ]
daemon_list は、ひとつ以上のデーモンプロセス名 (argv[0] の値) または、ワイルドカード (後述) を使ったリストである。
client_list は、ひとつ以上の、ホスト名、ホストアドレス、ま たは、ワイルドカード (後述) を使った、クライアントのホスト名かア ドレスにマッチするパターンのリストである。
複合化された daemon@host や user@host という形式は、 それぞれ SERVER ENDPOINT PATTERNS および CLIENT USERNAME LOOKUP のセクションで解説する。
リストの各要素は空白、またはカンマで分けなければいけない。
NIS (かつての YP) の netgroup 問い合わせという例外を除いては、 全てのアクセスコントロールのチェックは大文字小文字を同一視して行 なわれる。
この形式は注意を持って使用すべきである:ホスト名は、一時的なネー ムサーバーの問題により、使えない場合がありうる。また、ネットワー クアドレスは、ソフトウェアから見て、どんなタイプのネットワークと 会話しているのか、特定できない場合は利用できなくなる。
この形式は注意を持って使用すべきである:ホスト名は、一時的なネー ムサーバーの問題により、使えない場合がありうる。また、ネットワー クアドレスは、ソフトウェアから見て、どんなタイプのネットワークと 会話しているのか、特定できない場合は利用できなくなる。
シェルコマンドは、inetd の PATH 設定と関連させてはいけない。代わ りに絶対パスを用いるか、冒頭で明示的に PATH=whatever を宣言する べきである。
hosts_options(5) の文書では、互換性のない異なる方法でシェ ルコマンドのフィールドを使うための、もうひとつの書式を解説してい る。
% の展開が行なわれることによって、シェルを混乱させる可能性のある 文字群は、アンダースコアへと置き換えられる。
process_name@host_pattern : client_list ...
このようなパターンは、マシンが複数の異なるインターネットのホスト 名とインターネットのアドレスを持っている場合に使用する。サービス プロバイダは、異なる組織に属するようなインターネット上の名前を持 つFTP, GOPHER あるいは WWW を提供するために、この機能を利用でき る。hosts_options(5) 文書の中の `twist' のオプションも参照する事。 あるシステム (Solaris, FreeBSD) では、ひとつの物理的なインターフェー スが、複数のインターネットアドレスを持つ事ができる(それ以外のシ ステムでは、専用のネットワークアドレス空間にあるSLIP や PPP など の疑似インターフェースの助けを借りなければならないだろう )。
host_pattern は、client_lists の解説文にあった、ホスト名とアドレ スのような、いくつかの文法に従うことになる。一般的には、server endpoint information (サーバー側末端での情報)は、 connection-oriented serveices (コネクション指向の高いサービス)で のみ利用する事ができる。
daemon_list : ... user_pattern@host_pattern ...
デーモンラッパーは、ルールに従う形でユーザー名を探査するように振 舞うか(デフォルト)、あるいは常にクライアントホストに問い合わせる のか、コンパイル時に設定可能となっている。ルールに従う形式でユー ザー名の探査を行なう場合には、上の記述ルールは daemon_list と host_pattern の両方がマッチした場合にのみ、ユーザー名の 探査を行なうであろう。
user_pattern は、デーモンプロセスのパターンと同じ文法であり、す なわち同じワイルドカード群が適用される(ただしネットグループのメ ンバーシップはサポートされない)。しかしながら、これはユーザー名 の探査に独占されるべきではない。
ユーザー名の探査を選択可能とすることにより、最後の問題を軽減する ことができる。たとえば、こんなルール:
daemon_list : @pcnetgroup ALL@ALL
これはユーザー名の探査を行なわない PC ネットグループのメンバーに もマッチするだろうし、それ以外のシステムに対してはユーザー名の探 査を行なうだろう。
クライアントの要求に答える前に、TCP ラッパー群は本当のクライアン トが実際には全く要求を送って来ていなかったことを発見する目的で、 IDENT サービスを使う事ができる。
クライアントホストが IDENT サービスを用意しているなら、IDENT の 問い合わせをして、返って来た結果が否定的(クライアントマシンが `UNKNOWN@host') であれば、それはペテン攻撃の確固たる証拠となる。
肯定的な IDENT の問い合わせ結果 (クライアントマシンは `KNOWN@host')でも、充分に信頼できるとは言い切れない。単にクライ アントのコネクションを誤魔化すよりは難しいが、それでも侵入者はク ライアントのコネクションと、IDENT の問い合わせの両方を偽っている 可能性がある。さらには、クライアントの IDENT サーバーそのものが 嘘をついていることさえ考えられる。
Note: IDENT の問い合わせは UDP サービスと共存して動作する事はできない。
以下の記述例を読むにあたっては、allow の記述は deny の記述より先 に検索され、その検索は最初にマッチしたもので終了となり、マッチし たものが全く見つからない場合には、アクセスは承認される、というこ とをはっきりと理解しておくことが重要である。
記述例はホストとドメインの名前を使う。ネームサーバーへの問い合わ せが一時的に失敗した場合の影響を軽減するためには、これらにアドレ ス、かつ、あるいは network/netmask の情報を含めることで、改善す る事ができる。
デフォルトのポリシー(no access)は、単に deny file の中で記述され る:
/etc/hosts.deny: ALL: ALL
これによって、allow file の中のエントリでアクセスが許可されない 限り、全てのホストへのサービスは拒否となる。
明示的に権限を授けるホストは、allow file の中でリストされる。記 述例:
/etc/hosts.allow: ALL: LOCAL @some_netgroup
ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
最初のルールでは、ローカルドメイン(ホスト名に `.'を必要としない) と、some_netgroup に属するホストからのアクセスが許可されて いる。二番目のルールでは、terminalserver.foobar.edu. を除 くfoobar.edu ドメイン(ドットで始まることが宣言されている) の、全てのホストからのアクセスが許可されている。
デフォルトのポリシー(access granted) に従えば、どんな allow file でも、まったく省略可能なほど冗長なものとなる。明示的に権限を与え ないホストは、deny file にリストする。記述例:
/etc/hosts.deny: ALL: some.host.name, .some.domain
ALL EXCEPT in.fingerd: other.host.name, .other.domain
最初のルールでは、いくつかのホストと、ドメインへの全てのサービス が拒否される。二番目のルールでは、それ以外のホストとドメインから の finger リクエストに限って許可が与えられている。
/etc/hosts.allow:
in.tftpd: LOCAL, .my.domain /etc/hosts.deny: in.tftpd: ALL: (/some/where/safe_finger -l @%h | \ /usr/ucb/mail -s %d-%h root) &
safe_finger コマンドは tcpd wrapper に付属しており、適切な場所に インストールされるべきである。これはリモートの finger サーバーか ら送られてくるデータによってダメージが与えられる可能性を制限して る。これは標準の finger コマンドよりも優れた防御をもたらす。
%h (client host) と %d (service name) の展開については、shell commands のセクションで解説されている。
警告: finger の無限ループへの対処ができないなら、あなた自身の finger デーモンに対して、この booby-trap (引っかけ罠) を仕掛けな い事。
ネットワークファイヤーウォールにおいては、このトリックはさらに大 幅に拡張することができる。典型的なネットワークファイヤーウォール は、外部に対して限定されたサービスしか提供しない。それ以外のサー ビスは、上記の tftp の例のように "盗聴" することができる。その結 果、極めて優れた早期警戒装置となる。
/etc/hosts.allow, アクセスを許可する (daemon,client) のペア。 /etc/hosts.deny, アクセスを拒否する (daemon,client) のペア。
tcpd(8) tcp/ip daemon wrapper プログラム tcpdchk(8), tcpdmatch(8), test programs.
ドメインネームサーバーの問い合わせは、大文字小文字を同一視する。 一方 NIS (かつての YP) のネットグループは、大文字小文字を区別す る。
Wietse Venema (wietse@wzv.win.tue.nl) Department of Mathematics and Computing Science Eindhoven University of Technology Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
FUKUSHIMA Osamu/福島於修 <fuku@amorph.rim.or.jp>
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]