日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.3-RELEASE-K, 13.0-RELEASE-K から 13.2-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
HOSTS_ACCESS(5) HOSTS_ACCESS(5) 名称 hosts_access - ホストアクセス制御ファイルの書式 解説 本マニュアルページは、クライアント (ホストの名前/アドレス、ユーザ名) と サーバ (プロセス名、ホストの名前/アドレス) のパターンをベースとする、単 純なアクセス制御言語を解説します。最後に使用例を示しています。我慢でき ない方は、てっとり早い導入のために、使用例の節へ進んでください。 拡張バージョンのアクセス制御言語は、hosts_options(5) 文書で解説していま す。プログラム構築時に -DPROCESS_OPTIONS 付きで構築することにより、拡張 機能はオンになります。 以降の文章においては、daemon はネットワークデーモンプロセスのプロセス名 であり、client はサービスを要求しているホストの名前やアドレスです。ネッ トワークデーモンプロセスの名前は、inetd 設定ファイルにおいて指定されま す。 アクセス制御ファイル アクセス制御ソフトウェアは、2 つのファイルを参照します。検索は、最初の マッチで終了します。つまり、 • (daemon,client) の組が /etc/hosts.allow ファイルのエントリにマッ チするとき、アクセスは許可されます。 • そうでない場合、(daemon,client) の組が /etc/hosts.deny ファイル のエントリにマッチするとき、アクセスは拒否されます。 • そうでない場合、アクセスは許可されます。 存在しないアクセス制御ファイルは、そのファイルが空であるものとして扱わ れます。よって、アクセス制御ファイルをなにも用意しないことにより、アク セス制御をオフにすることが可能です。 アクセス制御ルール 各アクセス制御ファイルは、0 個以上のテキスト行を持ちます。これらの行 は、出現順に処理されます。マッチが検出されたときに、検索が終了します。 • 改行文字は、前にバックスラッシュ文字がある場合、無視されます。こ れにより、長い行の分割が可能となり、編集が容易になります。 • 空行または `#' 文字で開始する行は無視されます。これにより、コメ ントや空白の挿入が可能となり、表が読み易くなります。 • 他のすべての行は、次の書式を満たす必要があります。[] の間のもの は省略可能です。 daemon_list : client_list [ : shell_command ] daemon_list は、1 個以上のデーモンプロセス名 (argv[0] 値) またはワイル ドカード (後述) からなるリストです。 client_list は、1 個以上のホスト名、ホストアドレス、パターン、またはワ イルドカード (後述) からなるリストです。これが、クライアントホストの名 前またはアドレスに対してマッチされます。 より複雑な形式である、daemon@host と user@host は、それぞれサーバ終点パ ターンとクライアントユーザ名検索の節で説明します。 リストの要素は、空白やコンマで区切ります。 すべてのアクセス制御チェックは大文字小文字の違いは影響ありません。ただ し、NIS (YP) の netgroup の検索は例外です。 パターン アクセス制御言語は、次のパターンを実装しています。 • `.' 文字で開始する文字列。ホスト名は、その最後の部分が指定された パターンにマッチする場合、マッチします。例えば、パターン `.tue.nl' は、ホスト名 `wzv.win.tue.nl' にマッチします。 • `.' 文字で終了する文字列。ホストアドレスは、その最初の数値フィー ルドが指定された文字列にマッチする場合、マッチします。例えば、パ ターン `131.155.' は、Eindhoven University ネットワーク (131.155.x.x) の (ほぼ) すべてのホストのアドレスにマッチします。 • `@' 文字で開始する文字列は、NIS (以前の YP) の netgroup 名として 扱われます。ホスト名は、指定された netgroup のメンバである場合、 マッチします。デーモンプロセス名およびクライアントユーザ名では、 netgroup のマッチはサポートされていません。 • `n.n.n.n/m.m.m.m' 書式の表現は、`net/mask' ペアとして解釈されま す。`net' が、アドレスと `mask' とをビットごとに AND したものに 等しい場合、ホストアドレスはマッチします。例えば、net/mask パ ターン `131.155.72.0/255.255.254.0' は、`131.155.72.0' から `131.155.73.255' までの範囲のすべてのアドレスにマッチします。 • `[n:n:n:n:n:n:n:n]/m' 書式の表現は `[net]/prefixlen' ペアとして 解釈されます。`net' の `prefixlen' ビットが、アドレスの `prefixlen' ビットと等しい場合、IPv6 ホストアドレスはマッチしま す。例えば [net]/prefixlen パターン `[3ffe:505:2:1::]/64' は、 `3ffe:505:2:1::' から `3ffe:505:2:1:ffff:ffff:ffff:ffff' までの 範囲のすべてのアドレスにマッチします。 • 文字 `/' で開始する文字列はファイル名として扱われます。ホスト名 またはアドレスは、指定されたファイル中のホスト名またはアドレスの パターンのいずれかにマッチするとき、マッチします。ファイルの書式 は、ホスト名またはアドレスのパターンを空白で区切って 0 個以上指 定した行が、0 個以上存在するというものです。ファイル名パターン は、ホスト名またはアドレスのパターンを使用可能な場所であればどこ でも使用可能です。 ワイルドカード アクセス制御言語は、明示的なワイルドカードをサポートします。 ALL 普遍的なワイルドカードであり、常にマッチします。 LOCAL 名前にドット文字を含まない、すべてのホストにマッチします。 UNKNOWN 名前が未知のすべてのユーザにマッチします。また、名前またはアドレ スのいずれか一方でも未知であるすべてのホストにマッチします。この パターンの使用には注意してください。というのは、一時的なネーム サーバの問題により、ホスト名を得られなくなる場合があるからです。 また、どのタイプのネットワークに対して話しているのかをソフトウェ アが分っていない場合、ネットワークアドレスを得られなくなるからで す。 KNOWN 名前が既知のすべてのユーザにマッチします。また、名前およびアドレ スがともに既知のすべてのホストにマッチします。このパターンの使用 には注意してください。というのは、一時的なネームサーバの問題によ り、ホスト名を得られなくなる場合があるからです。また、どのタイプ のネットワークに対して話しているのかソフトウェアが分かっていない 場合、ネットワークアドレスを得られなくなるからです。 PARANOID 名前がアドレスにマッチしないすべてのホストにマッチします。tcpd が -DPARANOID (デフォルトモードです) 付きで構築された場合、アク セス制御表を検索する前に、このようなクライアントからの要求を落と します。このような要求に対して更に制御を行いたい場合、-DPARANOID なしで構築してください。 オペレータ EXCEPT `list_1 EXCEPT list_2' という形式で使用することを意図していま す。list_1 にマッチするもので、list_2 にマッチしないものに、この 構造はマッチします。EXCEPT オペレータは、daemon_lists と client_lists で使用可能です。EXCEPT オペレータは、入れ子 (ネス ト) にすることが可能です。これは、仮に制御言語が括弧の使用を許す として表記するならば、`a EXCEPT b EXCEPT c' は `(a EXCEPT (b EXCEPT c))' のように解釈されます。 シェルコマンド 最初にマッチしたアクセス制御ルールがシェルコマンドを含む場合、このコマ ンドは %<letter> 置換 (次節参照) の対象になります。置換結果は、標準入出 力とエラー出力が /dev/null に接続される /bin/sh 子プロセスにより実行さ れます。実行完了を待ちたくない場合、コマンドの最後に `&' を指定してくだ さい。 シェルコマンドは inetd の PATH の設定に依存してはなりません。かわりに、 絶対パス名を使用するか、明示的な PATH=whatever という文で開始すべきで す。 シェルコマンドフィールドを、これとは異なる互換性のない方法で扱う別の言 語については、hosts_options(5) 文書に解説してあります。 % の展開 シェルコマンド中で、次の展開を使用可能です。 %a (%A) クライアント (サーバ) のホストアドレス。 %c クライアントの情報。これは、user@host か、user@address か、ホス ト名か、単にアドレスかのいずれかです。このうちのどれが使えるか は、得られる情報量に依存します。 %d デーモンプロセスの名前 (argv[0] 値)。 %h (%H) クライアント (サーバ) ホストの名前、または名前が得られない場合ア ドレス。 %n (%N) クライアント (サーバ) ホストの名前 (または "unknown" または "paranoid")。 %p デーモンプロセス id。 %s サーバの情報。これは、daemon@host か、daemon@address か、単に デーモン名かのいずれかです。このうちのどれが使えるかは、得られる 情報量に依存します。 %u クライアントユーザの名前 (または "unknown")。 %% 単一の `%' 文字に展開されます。 % 展開中の文字でシェルを混乱させ得るものは、アンダスコアに置き換えられ ます。 サーバ終点パターン クライアントの区別のために、クライアントが接続しているネットワークアド レスを使用するには、次の形式のパターンを使用します。 process_name@host_pattern : client_list ... 異なったインターネットアドレスに異なったインターネットホスト名をマシン が持つ場合、このようなパターンを使用可能です。サービス提供者がこの機構 を使用することにより、複数のインターネットの名前を使用して、FTP, GOPHER, WWW といったアーカイブを提供可能です。この場合、インターネット の名前は、異なった組織に属することも可能です。hosts_options(5) 文書の `twist' オプションも参照してください。単一の物理インタフェースに 1 個以 上のインターネットアドレスを持てるシステムがあります (Solaris や FreeBSD)。他のシステムでは、専用のネットワークアドレス空間で、SLIP や PPP といった擬似インタフェースを使用する必要があるかもしれません。 host_pattern は、client_list の文脈におけるホストの名前およびアドレスの ものと同じ文法ルールに従います。通常、サーバ終点情報は、コネクション指 向の (connection-oriented) サービスにおいてのみ使用可能です。 クライアントユーザ名検索 クライアントホストが RFC 931 プロトコルまたはその後継 (TAP, IDENT, RFC 1413) をサポートする場合、コネクションの所有者に関する追加の情報を、 ラッパプログラムが引き出せるようになります。クライアントのユーザ名情報 が得られると、クライアントホスト名とともに記録され、次のようなパターン マッチに使用可能です。 daemon_list : ... user_pattern@host_pattern ... ルールにもとづいてユーザ名を検索 (デフォルト) するか、常にクライアント ホストに問い合わせるかの設定は、デーモンラッパのコンパイル時に設定可能 です。ルールにもとづいてユーザ名を検索する場合、前述のルールがユーザ名 検索を行うのは、daemon_list と host_pattern がともにマッチする場合のみ です。 ユーザパターンは、デーモンプロセスパターンと同じ文法であり、同じワイル ドカードが使用可能です (netgroup のメンバはサポートされません)。しか し、ユーザ名検索に夢中になって理性を失ってはなりません。 • クライアントのユーザ名情報がもっとも必要とされるとき、すなわちク ライアントシステムが危なくなっているときこそ、クライアントのユー ザ名情報は信用できません。一般的には、ALL と (UN)KNOWN のみが意 味のあるユーザ名パターンです。 • TCP ベースのサービスにおいてのみ、かつクライアントホストが適切な デーモンを実行しているときのみ、ユーザ名検索を使用可能です。他の 場合には、結果は "unknown" になります。 • ユーザ名検索がファイアウォールにブロックされると、UNIX カーネル の良く知られた (well-known) バグにより、サービスを失うことがあり ます。カーネルにこのバグがあるかを判断するための手順は、ラッパの README 文書に解説しています。 • ユーザ名検索により、非 UNIX ユーザに対する顕著な遅延を生じること があります。ユーザ名検索のデフォルトのタイムアウトは 10 秒です。 これは、遅いネットワークに対しては短か過ぎますが、PC ユーザをい らいらさせるには十分長いです。 最後の問題は、選択的なユーザ名検索により、緩和可能です。例えば、次のよ うにします。 daemon_list : @pcnetgroup ALL@ALL これは、ユーザ名検索を行わずに、pc netgroup のメンバにマッチします。し かし、他のシステムに対しては、ユーザ名検索を行います。 アドレス詐称攻撃の検出 多くの TCP/IP 実装にあるシーケンス番号生成器の欠陥により、侵入者が信頼 されたホストになりすました上で、例えばリモートシェルサービスを介して侵 入することができます。IDENT (RFC931 等) のサービスを使用することによ り、このような攻撃や別のホストアドレス詐称攻撃を検出可能となります。 クライアントの要求を受け付ける前に、ラッパが IDENT サービスを使用するこ とにより、そのクライアントが要求をまったく送っていなかったことを検出可 能です。クライアントホストが IDENT サービスを提供している場合、否定的な IDENT 検索結果 (クライアントが `UNKNOWN@host' にマッチ) は、ホスト詐称 攻撃の有力な証拠となります。 肯定的な IDENT 検索結果 (クライアントが `KNOWN@host' にマッチ) は、これ より信頼性が低いです。クライアントの接続のみを詐称するよりは難しいです が、侵入者がクライアントの接続と IDENT 検索の両方を詐称することが可能で す。クライアントの IDENT サーバが嘘をついている可能性もあります。 注: IDENT 検索は、UDP サービスでは動作しません。 使用例 この言語は十分柔軟性があるので、ほとんど手間もかけずに、異なったタイプ のアクセス制御方針を表現可能です。またこの言語は 2 つのアクセス制御表を 使用しますが、一方の表は単純にしつつ、場合によっては空にしても、一般的 な方針のほとんどを実装可能です。 次に示す使用例を読むときには、許可表が拒否表の前にスキャンされること、 検索はマッチが検出されたときに終了すること、マッチが検出されない場合に はアクセスが許可されることを認識することが重要です。 使用例では、ホストとドメインの名前を使用します。アドレスや network/netmask の情報を含めることにより、これらの例を改良して、一時的 なネームサーバの検索失敗による影響を減じることが可能となります。 ほとんど閉じている状態 この場合、デフォルトではアクセスは拒否されます。明示的に権限を与えられ たホストのみが、アクセスを許可されます。 デフォルトの方針 (アクセスを拒否) は、簡単な拒否ファイルにより実装され ます: /etc/hosts.deny: ALL: ALL これにより、全ホストに対する全サービスが拒否されます。ただし、許可ファ イルのエントリにより許可されたアクセスである場合は例外です。 明示的に権限を与えられるホストは、許可ファイルにリストします。例えば次 のようにします: /etc/hosts.allow: ALL: LOCAL @some_netgroup ALL: .foobar.edu EXCEPT terminalserver.foobar.edu 最初のルールは、ローカルドメインの (ホスト名に `.' を含まない) ホストか らのアクセスと、some_netgroup のメンバからのアクセスを、許可します。2 番目のルールは、foobar.edu ドメイン (先頭のドットに注意) の全ホストから のアクセスを、許可します。ただし、terminalserver.foobar.edu は例外で す。 ほとんど開いている状態 今度は、デフォルトではアクセスは許可されます。明示的に指定されたホスト のみが、サービスを拒否されます。 デフォルトの方針 (アクセスを許可) では許可ファイルは冗長であり、省略可 能です。明示的に権限を与えられないホストは、拒否ファイルにリストしま す。例えば次のようにします: /etc/hosts.deny: ALL: some.host.name, .some.domain ALL EXCEPT in.fingerd: other.host.name, .other.domain 最初のルールは、あるホストとあるドメインに対する全サービスを拒否しま す。2 番目のルールは、別のホストと別のドメインからの finger 要求は許可 しています。 ブービートラップ 次の使用例は、ローカルドメイン (先頭のドットに注意) からの tftp 要求を 許可します。他のホストからの要求は拒否されます。要求されたファイルの代 りに、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 は back-finger での使用を意図しており、適切な場所にインス トールすべきです。これは、リモートの finger サーバから送られるデータに 起因して発生し得るダメージを限定します。通常の finger コマンドよりも、 より良い防御となります。 %h (クライアントホスト) と %d (サービス名) のシーケンスの展開について は、シェルコマンドの節に記述してあります。 警告: 自己の finger デーモンをブービートラップにかけないでください。か けてしまうと、finger の無限ループになります。 ネットワークファイアウォールシステムでは、このトリックをさらに幅広く活 用できます。典型的なネットワークファイアウォールでは、外部の世界に対し て限定されたサービスのみを提供します。他の全サービスは、前述の tftp の 使用例と同様の方法で「監視」可能です。その結果、素晴しい早期警戒システ ムができます。 診断 次の場合、エラーが報告されます。ホストアクセス制御ルールに文法エラーが ある場合、アクセス制御ルールが内部バッファの容量を越えた場合、アクセス 制御ルールが改行文字で終端されなかった場合、%<letter> の展開結果が内部 バッファを溢れさせた場合、失敗すべきでないシステムコールが失敗した場合 です。すべての問題は、syslog デーモンを介して報告されます。 実装に関する注 オペレーティングシステムによっては、TCP Wrappers を基本システムの一部と して配布されているものがあります。このようなシステムでは、ネットワーク ユーティリティにラッピング機能を組み込むのが一般的です。特に、システム によっては、tcpd(8) が不要な inetd(8) を提供しているものがあります。詳 細については、システムの文書を確認してください。 関連ファイル /etc/hosts.allow, アクセスを許可された (daemon,client) のペア。 /etc/hosts.deny, アクセスを拒否された (daemon,client) のペア。 関連項目 tcpd(8) tcp/ip デーモンラッパプログラム。 tcpdchk(8), tcpdmatch(8), テストプログラム。 バグ ネームサーバの検索がタイムアウトすると、ホスト名が登録されていたとして も、アクセス制御ソフトウェアはホスト名を使用できなくなります。 ドメインネームサーバの検索は大文字小文字を区別しません。一方、NIS (以前 の YP) の netgroup の検索は大文字小文字を区別します。 作者 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 HOSTS_ACCESS(5)