1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415
|
.TH HOSTS_ACCESS 5
.SH NAME
hosts_access \- ホストアクセスコントロールファイルの書式
.SH DESCRIPTION
このマニュアルページは、クライアント (ホストネーム/アドレス、ユー
ザー名) サーバー (プロセス名、ホストネーム/アドレス) 間の単純な
アクセス制御の記述法を解説するものである。具体的な設定例は末尾に
示すので、てっとりばやい設定を望むせっかちな読者は、"設定例" の
セクションへと進んで欲しい。
.PP
アクセスコントロール書法の拡張された部分に関しては、
\fIhosts_options\fR(5) の文書で解説する。この拡張は、プログラム
が -DPROCESS_OPTIONS を指定して作成されたかどうかに左右される。
.PP
以下の文章では、\fIdaemon\fR とはネットワークデーモンのプロセス
名を意味し、\fIclient\fR とは、サービスを要求するホストの名前、
もしくはホストのアドレスを意味している。ネットワークデーモンのプ
ロセス名は、inetd の設定ファイル中に明示されている。
.SH ACCESS CONTROL FILES
アクセスコントロールのソフトウェアは、二つのファイルを参照する。
最初に一致した時点で検索は終了する。
.IP \(bu
(daemon,client) の組合せが \fI/etc/hosts.allow\fR ファイルの中の
エントリと一致する場合、アクセスは承諾される。
.IP \(bu
もしくは、(daemon,client) の組合せが \fI/etc/hosts.deny\fR ファ
イルの中のエントリと一致する場合、アクセスは拒否される。
.IP \(bu
それ以外の場合、アクセスは承諾される。
.PP
アクセスコントロールのファイルが存在しない場合は、それらのファイ
ルが空であったとみなされる。したがって、アクセスコントロールは、
アクセスコントロールファイルを準備しない事によって停止する事がで
きる。
.SH ACCESS CONTROL RULES
どちらのアクセスコントロールファイルも、0 行以上のテキストで構成
されている。これらの行は出現順に処理される。検索はマッチする行が
現れた時点で終了となる。
.IP \(bu
改行文字は、バックスラッシュが前に置かれた場合は無視される。これ
によって、楽に編集するために長い行を分割することが許されている。
.IP \(bu
空行、または `#\' で始まる行は無視される。したがって、コメントを
挿入したり、ホワイトスペースを入れて読みやすく整える事が許されて
いる。
.IP \(bu
それ以外の行は、次に示すフォーマットに従わなければならない。ただ
し [] で囲まれる部分は任意である:
.sp
.ti +3
daemon_list : client_list [ : shell_command ]
.PP
\fIdaemon_list\fR は、ひとつ以上のデーモンプロセス名 (argv[0] の値)
または、ワイルドカード (後述) を使ったリストである。
.PP
\fIclient_list\fR は、ひとつ以上の、ホスト名、ホストアドレス、ま
たは、ワイルドカード (後述) を使った、クライアントのホスト名かア
ドレスにマッチするパターンのリストである。
.PP
複合化された \fIdaemon@host\fR や \fIuser@host\fR という形式は、
それぞれ SERVER ENDPOINT PATTERNS および CLIENT USERNAME LOOKUP
のセクションで解説する。
.PP
リストの各要素は空白、またはカンマで分けなければいけない。
.PP
NIS (かつての YP) の netgroup 問い合わせという例外を除いては、
全てのアクセスコントロールのチェックは大文字小文字を同一視して行
なわれる。
.ne 4
.SH PATTERNS
アクセスコントロールの書式は以下のようなパターンを満たすものであ
る。
.IP \(bu
`\.' で始まる語。もし、ホスト名の後ろの部分がこの書式で指定され
たパターンと一致すると、それはマッチとなる。例えば、`.tue.nl\'
というパターンは、`wzv.win.tue.nl\'. というホスト名とマッチして
いる。
.IP \(bu
`\.' で終わる語。もし、ホストアドレスの前部の数値フィールドが、
この語と一致するなら、それはマッチしている。例えば、`131.155.\'
というパターンは、Eind\%hoven University network (131.155.x.x)に
属する (ほぼ)全てのホストのアドレスにマッチしている。
.IP \(bu
`@\' で始まる語は、NIS (かつての YP) のネットグループ名として扱
われる。もし、ホストがそこで明示されたネットグループ名のメンバー
である場合は一致したものとなる。このネットグループのマッチは、デー
モンプロセス名やクライアントユーザー名のためにはサポートされてい
ない。
.IP \(bu
`n.n.n.n/m.m.m.m\' という形式は`net/mask\' の一対として解釈され
る。ホストアドレスは、`net\' から見て正ビット方向にあり、かつ
`mask\' でマスクされた範囲内にある場合に一致する。たとえば、
net/mask が `131.155.72.0/255.255.254.0\'となるパターンは、
`131.155.72.0\' から `131.155.73.255\'までの範囲にある全てのアド
レスにマッチする。
.SH WILDCARDS
アクセスコントロールの書式は、平易なワールドカード群をサポートし
ている:
.IP ALL
すべてに合致する万能なワイルドカード。
.IP LOCAL
ドット文字を持たない全てのホストにマッチ。
.IP UNKNOWN
名前の明らかでないユーザーにマッチ。そして名前 \fIまたは\fR アド
レスが不明な全てのホストにマッチ。
この形式は注意を持って使用すべきである:ホスト名は、一時的なネー
ムサーバーの問題により、使えない場合がありうる。また、ネットワー
クアドレスは、ソフトウェアから見て、どんなタイプのネットワークと
会話しているのか、特定できない場合は利用できなくなる。
.IP KNOWN
名前の明らかなユーザーにマッチする。さらに、名前 \fIと\fR アドレ
スの明らかなホストにマッチする。
この形式は注意を持って使用すべきである:ホスト名は、一時的なネー
ムサーバーの問題により、使えない場合がありうる。また、ネットワー
クアドレスは、ソフトウェアから見て、どんなタイプのネットワークと
会話しているのか、特定できない場合は利用できなくなる。
.IP PARANOID
名前とアドレスの一致しない全てのホストにマッチする。もし tcpd が
-DPARANOID (これはデフォルトである) で作成されているなら、アクセ
スコントロールテーブルが参照されるより前に、そのようなクライアン
トからの要求は落とされてしまう。そのような要求を、さらにコントロー
ルしたい場合は -DPARANOID を外して tcpd を構築する事。
.ne 6
.SH OPERATORS
.IP EXCEPT
基本的には、次に示すような形式で使用する: `list_1 EXCEPT
list_2\';これは \fIlist_2\fR にマッチするものを除く、
\fIlist_1\fR にマッチするもの全て、に合致する。この EXCEPT 演算
子は、daemon_lists と client_lists の中でも使用できる。EXCEPT 演
算子は、ネスト(入れ子に)して使う事もできる: もしコントロール書式
が丸括弧を使う事を許可していたなら、`a EXCEPT b EXCEPT c\'は、
`(a EXCEPT (b EXCEPT c))\' と解釈されるであろう。
.br
.ne 6
.SH SHELL COMMANDS
もし、最初にマッチしたアクセスコントロールのルールがシェルコマン
ドを含んでいるなら、そのコマンドは、%<letter> の置き換え(次のセ
クションを参照) があると仮定される。その結果、\fI/bin/sh\fR の子
プロセスが標準入力を伴って実行され、出力とエラーは
\fI/dev/null\fR へ送られる。もし、そのプロセスが終了するまで待ち
たくない場合には、コマンドの末尾に `&\' が明示すること。
.PP
シェルコマンドは、inetd の PATH 設定と関連させてはいけない。代わ
りに絶対パスを用いるか、冒頭で明示的に PATH=whatever を宣言する
べきである。
.PP
\fIhosts_options\fR(5) の文書では、互換性のない異なる方法でシェ
ルコマンドのフィールドを使うための、もうひとつの書式を解説してい
る。
.SH % EXPANSIONS
シェルコマンドの中では下記の拡張表記が利用できる:
.IP "%a (%A)"
クライアント (サーバー) ホストのアドレス。
.IP %c
クライアントの情報: user@host, user@address. ホスト名か単にアド
レスかは、利用できる情報に依存する。
.IP %d
デーモンプロセス名 (argv[0] の値)。
.IP "%h (%H)"
クライアント (サーバー) ホストの名前、もしホスト名が利用できない
場合には、そのアドレス。
.IP "%n (%N)"
クライアント (サーバー) ホストの名前 (もしくは、"unknown" あるい
は "paranoid")。
.IP %p
デーモンプロセスの id。
.IP %s
サーバーの情報: daemon@host, daemon@address, あるいは単にデーモ
ンの名前。これは利用できる情報に依存する。
.IP %u
クライアントのユーザー名 (もしくは、"unknown")。
.IP %%
文字 `%\' へ展開される。
.PP
% の展開が行なわれることによって、シェルを混乱させる可能性のある
文字群は、アンダースコアへと置き換えられる。
.SH SERVER ENDPOINT PATTERNS
接続されているネットワークアドレスによって、クライアントを厳密に
区別するためには、以下の形式でパターンを記述する:
.sp
.ti +3
process_name@host_pattern : client_list ...
.sp
このようなパターンは、マシンが複数の異なるインターネットのホスト
名とインターネットのアドレスを持っている場合に使用する。サービス
プロバイダは、異なる組織に属するようなインターネット上の名前を持
つFTP, GOPHER あるいは WWW を提供するために、この機能を利用でき
る。hosts_options(5) 文書の中の `twist' のオプションも参照する事。
あるシステム (Solaris, FreeBSD) では、ひとつの物理的なインターフェー
スが、複数のインターネットアドレスを持つ事ができる(それ以外のシ
ステムでは、専用のネットワークアドレス空間にあるSLIP や PPP など
の疑似インターフェースの助けを借りなければならないだろう )。
.sp
host_pattern は、client_lists の解説文にあった、ホスト名とアドレ
スのような、いくつかの文法に従うことになる。一般的には、server
endpoint information (サーバー側末端での情報)は、
connection-oriented serveices (コネクション指向の高いサービス)で
のみ利用する事ができる。
.SH CLIENT USERNAME LOOKUP
クライアントホストが RFC 931 か、そこから派生したプロトコル(TAP,
IDENT, RFC 1413) のどれかをサポートしている場合、ラッパープログ
ラムは接続の持ち主に関する、追加の情報を引き出す事が可能である。
クライアントユーザー名の情報が利用可能であるなら、それはクライア
ントのホスト名とともに記録され、次のようなパターンにマッチさせる
ために使う事ができる:
.PP
.ti +3
daemon_list : ... user_pattern@host_pattern ...
.PP
デーモンラッパーは、ルールに従う形でユーザー名を探査するように振
舞うか(デフォルト)、あるいは常にクライアントホストに問い合わせる
のか、コンパイル時に設定可能となっている。ルールに従う形式でユー
ザー名の探査を行なう場合には、上の記述ルールは \fIdaemon_list\fR
と \fIhost_pattern\fR の両方がマッチした場合にのみ、ユーザー名の
探査を行なうであろう。
.PP
user_pattern は、デーモンプロセスのパターンと同じ文法であり、す
なわち同じワイルドカード群が適用される(ただしネットグループのメ
ンバーシップはサポートされない)。しかしながら、これはユーザー名
の探査に独占されるべきではない。
.IP \(bu
クライアントのユーザー名に関する情報は、例えばクライアントシステ
ムが信用するに足りないものとなっている時には、信頼する事はできな
い。一般的には、ALL と (UN)KNOWN は意味のあるユーザー名のパター
ンのためにある。
.IP \(bu
ユーザー名の探査は TCP ベースのサービスで、そして、クライアント
ホストが適切なデーモンを起動している場合にのみ可能である。そして、
それ以外のケースは "unknown" の結果を得る事になる。
.IP \(bu
ユーザー名の探査がファイヤーウォールによって阻まれた場合、有名な
UNIX カーネルのバグがサービスに損害をもたらすかもしれない。
wrapper の README 文書には、あなたのカーネルに、このバグが存在す
るかどうかを調べる手順が紹介されている。
.IP \(bu
ユーザー名の探査は、non-UNIX ユーザーに対して行なわれた場合、著
しく遅くなるかも知れない。ユーザー名の探査がタイムアウトで終了す
るまでの既定値は10 秒となっている: これは遅いネットワークにとっ
ては短すぎるが、PC ユーザーをじらすには充分すぎる。
.PP
ユーザー名の探査を選択可能とすることにより、最後の問題を軽減する
ことができる。たとえば、こんなルール:
.PP
.ti +3
daemon_list : @pcnetgroup ALL@ALL
.PP
これはユーザー名の探査を行なわない PC ネットグループのメンバーに
もマッチするだろうし、それ以外のシステムに対してはユーザー名の探
査を行なうだろう。
.SH DETECTING ADDRESS SPOOFING ATTACKS
多くの TCP/IP の実装に見られる sequence number generator 中の欠
陥は、侵入者が信頼できるホストであることを簡単に装い、例えばリモー
トシェルサービスを通して押し入ることを許してしまう。IDENT
(RFC931 ほか) サービスはそのようなホストアドレスのペテンによる攻
撃を察知するために使う事ができる。
.PP
クライアントの要求に答える前に、TCP ラッパー群は本当のクライアン
トが実際には全く要求を送って来ていなかったことを発見する目的で、
IDENT サービスを使う事ができる。
クライアントホストが IDENT サービスを用意しているなら、IDENT の
問い合わせをして、返って来た結果が否定的(クライアントマシンが
`UNKNOWN@host') であれば、それはペテン攻撃の確固たる証拠となる。
.PP
肯定的な IDENT の問い合わせ結果 (クライアントマシンは
`KNOWN@host')でも、充分に信頼できるとは言い切れない。単にクライ
アントのコネクションを誤魔化すよりは難しいが、それでも侵入者はク
ライアントのコネクションと、IDENT の問い合わせの両方を偽っている
可能性がある。さらには、クライアントの IDENT サーバーそのものが
嘘をついていることさえ考えられる。
.PP
Note: IDENT の問い合わせは UDP サービスと共存して動作する事はできない。
.SH EXAMPLES
文法は最小限の苦労で、さまざまなタイプのアクセスコントロールが表
現可能な、柔軟なものである。この文法は二つのアクセスコントロール
のリストが必要なのだが、身もフタもない方策としては、片方のリスト
を極めて単純なものとするか、空にしておくことが挙げられる。
.PP
以下の記述例を読むにあたっては、allow の記述は deny の記述より先
に検索され、その検索は最初にマッチしたもので終了となり、マッチし
たものが全く見つからない場合には、アクセスは承認される、というこ
とをはっきりと理解しておくことが重要である。
.PP
記述例はホストとドメインの名前を使う。ネームサーバーへの問い合わ
せが一時的に失敗した場合の影響を軽減するためには、これらにアドレ
ス、かつ、あるいは network/netmask の情報を含めることで、改善す
る事ができる。
.SH MOSTLY CLOSED (ほぼ閉鎖)
この場合、アクセスはデフォルトで拒絶される。明示的に権限を授けら
れたホストのみがアクセスを許される。
.PP
デフォルトのポリシー(no access)は、単に deny file の中で記述され
る:
.PP
.ne 2
/etc/hosts.deny:
.in +3
ALL: ALL
.PP
これによって、allow file の中のエントリでアクセスが許可されない
限り、全てのホストへのサービスは拒否となる。
.PP
明示的に権限を授けるホストは、allow file の中でリストされる。記
述例:
.PP
.ne 2
/etc/hosts.allow:
.in +3
ALL: LOCAL @some_netgroup
.br
ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
.PP
最初のルールでは、ローカルドメイン(ホスト名に `.\'を必要としない)
と、\fIsome_netgroup\fP に属するホストからのアクセスが許可されて
いる。二番目のルールでは、\fIterminalserver.foobar.edu\fP. を除
く\fIfoobar.edu\fP ドメイン(ドットで始まることが宣言されている)
の、全てのホストからのアクセスが許可されている。
.SH MOSTLY OPEN (ほぼ解放)
明示的にサービスを拒否するホストを除き、アクセスはデフォルトで許
可となる。
.PP
デフォルトのポリシー(access granted) に従えば、どんな allow file
でも、まったく省略可能なほど冗長なものとなる。明示的に権限を与え
ないホストは、deny file にリストする。記述例:
.PP
/etc/hosts.deny:
.in +3
ALL: some.host.name, .some.domain
.br
ALL EXCEPT in.fingerd: other.host.name, .other.domain
.PP
最初のルールでは、いくつかのホストと、ドメインへの全てのサービス
が拒否される。二番目のルールでは、それ以外のホストとドメインから
の finger リクエストに限って許可が与えられている。
.SH BOOBY TRAPS (ひっかけ罠)
次のサンプルはローカルドメインのホスト(ドットで始まる事が宣言さ
れている)からの tftp リクエストを許可するものである。それ以外の
ホストからのリクエストは拒否される。そして要求されたファイルの代
わりに、finger の探り針がその無礼なるホストへと放たれる。結果は
スーパーユーザーへメイルで送られる。
.PP
.ne 2
/etc/hosts.allow:
.in +3
.nf
in.tftpd: LOCAL, .my.domain
.PP
.ne 2
/etc/hosts.deny:
.in +3
.nf
in.tftpd: ALL: (/some/where/safe_finger -l @%h | \\
/usr/ucb/mail -s %d-%h root) &
.fi
.PP
safe_finger コマンドは tcpd wrapper に付属しており、適切な場所に
インストールされるべきである。これはリモートの finger サーバーか
ら送られてくるデータによってダメージが与えられる可能性を制限して
る。これは標準の finger コマンドよりも優れた防御をもたらす。
.PP
%h (client host) と %d (service name) の展開については、shell
commands のセクションで解説されている。
.PP
警告: finger の無限ループへの対処ができないなら、あなた自身の
finger デーモンに対して、この booby-trap (引っかけ罠) を仕掛けな
い事。
.PP
ネットワークファイヤーウォールにおいては、このトリックはさらに大
幅に拡張することができる。典型的なネットワークファイヤーウォール
は、外部に対して限定されたサービスしか提供しない。それ以外のサー
ビスは、上記の tftp の例のように "盗聴" することができる。その結
果、極めて優れた早期警戒装置となる。
.br
.ne 4
.SH DIAGNOSTICS
以下の場合にエラーが報告される。ホストコントロールファイルに文法
エラーが見つかった場合。アクセスコントロールのルールの長さが内部
のバッファの容量を越えた場合。アクセスコントロールのルールが、改
行文字によって終わっていない場合。%<letter> 展開の結果、内部バッ
ファが溢れてしまった場合。期待に反して、システムコールが失敗した
場合。すべての問題は、syslog デーモンを通じて報告される。
.SH FILES
.na
.nf
/etc/hosts.allow, アクセスを許可する (daemon,client) のペア。
/etc/hosts.deny, アクセスを拒否する (daemon,client) のペア。
.ad
.fi
.SH SEE ALSO
.nf
tcpd(8) tcp/ip daemon wrapper プログラム
tcpdchk(8), tcpdmatch(8), test programs.
.SH BUGS
ネームサーバーの問い合わせがタイムアウトとなると、ホスト名は、た
とえ登録されていても、アクセスコントロールソフトからは利用できな
い。
.PP
ドメインネームサーバーの問い合わせは、大文字小文字を同一視する。
一方 NIS (かつての YP) のネットグループは、大文字小文字を区別す
る。
.SH AUTHOR
.na
.nf
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
.SH 翻訳者
.na
.nf
FUKUSHIMA Osamu/福島於修 <fuku@amorph.rim.or.jp>
\" @(#) hosts_access.5 1.20 95/01/30 19:51:46
|