Fix typos.

Reviewed by:	Japanese Online Manual Project <man-jp@jp.FreeBSD.ORG>
Submitted by:	Kazuo Horikawa <k-horik@yk.rim.or.jp>
This commit is contained in:
Jun Kuriyama 1999-03-07 09:27:11 +00:00
parent fe79ecbe4d
commit 1c05a644f3
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=4468
18 changed files with 602 additions and 576 deletions

View file

@ -57,7 +57,7 @@
.Nm
への入力は、
.Tn RPC
言語 (リモートプロシージャコール言語) として知られる、
言語 (遠隔手続き呼び出し言語; Remote Procedure Call Language) として知られる、
C 言語に類似した言語です。
.Pp
.Nm rpcgen
@ -158,7 +158,7 @@ XDR
ディスパッチテーブルのエントリには以下のものがあります:
.Bl -bullet -offset indent -compact
.It
そのプロシージャに対応するサービスルーチンへのポインタ
その手続きに対応するサービスルーチンへのポインタ
.It
入出力引数へのポインタ
.It
@ -379,9 +379,9 @@ rpcgen
はまだ MT-safe にはなっていません。
つまり rpcgen が生成したサーバ側コードは MT-safe ではありません。
.It Fl N
プロシージャが複数の引数を持てるようにします。
手続きが複数の引数を持てるようにします。
これはまた、C 言語に大変似たパラメータ渡し方法を用います。
ですからリモートプロシージャにある引数を渡す場合、
ですから遠隔手続きにある引数を渡す場合、
その引数へのポインタを渡す必要はなく、引数そのものを渡せます。
この動作は
.Nm
@ -430,13 +430,13 @@ netconfig
このオプションは複数回指定できます。
注: トランスポートはコンパイル時ではなく実行時に選択されます。
.It Fl \&Sc
リモートプロシージャ呼び出しを用いるサンプルクライアントコードを生成します。
遠隔手続き呼び出しを用いるサンプルクライアントコードを生成します。
.It Fl \&Sm
アプリケーションをコンパイルする際に用いるサンプル
.Pa Makefile
を生成します。
.It Fl \&Ss
リモートプロシージャ呼び出しを用いるサンプルサーバコードを生成します。
遠隔手続き呼び出しを用いるサンプルサーバコードを生成します。
.It Fl t
.Tn RPC
ディスパッチテーブルをコンパイル出力します。

View file

@ -397,14 +397,14 @@ here-doc-text
.Er ENOEXEC
を返す場合)、
サブシェルの中でそのプログラムを解釈実行します。この場合、あたかも新た
シェルが起動されたかのような効果を得るために、子シェルは自分自身を
初期化します。ただし、子プロセスは、親シェル中のハッシュされたコマンド
サブシェルの中でそのプログラムを解釈実行します。この場合、あたかも新た
シェルが起動されたかのような効果を得るために、子シェルは自分自身を
初期化します。ただし、子プロセスは、親シェル中のハッシュされたコマンド
位置情報を憶えており、これは再初期化されません。
.Pp
本ドキュメントの古いバージョンや古いソースコードでは、ときおり、マジッ
クナンバのないシェルスクリプトのことを「シェルプロシージャ」と呼んでい
て、まぎらわしい場合がありますので注意して下さい。
本ドキュメントの古いバージョンや古いソースコードでは、ときおり、
マジックナンバのないシェルスクリプトのことを「シェル手続き」と呼んでいて、
まぎらわしい場合がありますので注意して下さい。
.Ss パス検索
コマンドを検索するとき、シェルは、まず、その名前のシェル関数があるかどうかを
調べます。次に、その名前の組み込みコマンドがあるかどうかを調べます。
@ -470,9 +470,9 @@ here-doc-text
.Ed
.Pp
command1 の標準出力は command2 の標準入力に接続されます。コマンドの標
準入出力がパイプラインによって割り当てられるのは、各コマンドに属する
ダイレクト演算子で指定されたリダイレクトを処理する前のことだと考えて
さい。
準入出力がパイプラインによって割り当てられるのは、各コマンドに属する
ダイレクト演算子で指定されたリダイレクトを処理する前のことだと考えて
さい。
.Pp
パイプラインがバックグラウンド (後述) でなければ、シェルはすべての
コマンドが終了するのを待ちます。
@ -515,12 +515,11 @@ command1 & [command2 & ...]
接続されます。
.Ss リスト -- 一般的な話
リストは 0 個またはそれ以上のコマンドを改行文字、セミコロン文字、アン
パーサント文字 (&) で区切った列です。リストは、これら 3 つの記号のいず
れかで終了させることもできます。リスト中のコマンドは並べられた順に実行
パーサント文字 (&) で区切った列です。リストは、これら 3 つの記号のいずれかで
終了させることもできます。リスト中のコマンドは並べられた順に実行
されます。もし、コマンドに続けてアンパーサント文字が置かれている場合、
シェルはそのコマンドを起動したあと、すぐに次のコマンドの処理を開始しま
す。その他の場合、そのコマンドの終了を待ってから次のコマンドの処理を開
始します。
シェルはそのコマンドを起動したあと、すぐに次のコマンドの処理を開始します。
その他の場合、そのコマンドの終了を待ってから次のコマンドの処理を開始します。
.Ss 短絡リスト演算子(Short-Circuit List Operators)
``&&'' と ``||'' は AND-OR リスト演算子です。 ``&&'' は最初のコマンド
を実行し、もし最初のコマンドの終了ステータスが 0 ならば次のコマンドを
@ -586,7 +585,7 @@ esac
pattern は、1 つあるいは複数のパターン (後述の「シェルパターン」を参照
のこと) を ``|'' で接続したものです。
.Ss 複数のコマンドのグループ化
コマンドは、以下のいずれかの方法によりグループ化することができます
コマンドは、以下のいずれかの方法によりグループ化することができます
.Bd -literal -offset indent
(list)
.Ed
@ -624,10 +623,10 @@ local [ variable | - ] ...
local コマンドは、組み込みコマンドとして実装されています。
.Pp
変数を局所変数にする場合、関数を呼び出した環境に同じ名前の変数があれば、
新しい局所変数は値と export、readonly フラグを引き継ぎます。もし同じ名
前の変数がなければ、局所変数は初期値を持ちません。シェルは動的スコープ
を用います。すなわち、関数 f に局所的な変数 x を作成し、関数 f から
数 g を呼び出した場合、関数 g 内部での変数 x に対する操作は大域変数 x
新しい局所変数は値と export、readonly フラグを引き継ぎます。もし同じ名前の
変数がなければ、局所変数は初期値を持ちません。シェルは動的スコープ
を用います。すなわち、関数 f に局所的な変数 x を作成し、関数 f から
数 g を呼び出した場合、関数 g 内部での変数 x に対する操作は大域変数 x
ではなく、関数 f で宣言された変数 x への操作となります。
.Pp
特殊パラメータのうち局所宣言できるのは ``-'' だけです。 ``-'' を
@ -672,8 +671,8 @@ name=value
される場合、各位置パラメータは別々の引数となります。
もし、位置パラメータが設定されていない場合には、
@ の展開結果は 0 個の引数となります (ダブルクォート引用の内部であっても)。
すなわち、$1 が ``abc''、$2 が ``def ghi'' であっ
た場合、"$@" は次の 2 つの引数に展開されます。
すなわち、$1 が ``abc''、$2 が ``def ghi'' であった場合、"$@" は
次の 2 つの引数に展開されます。
.Bd -literal -offset indent
"abc" "def ghi"
.Ed
@ -1032,8 +1031,8 @@ hash
.Pp
引数を指定した場合、hash コマンドは指定したコマンドをハッシュテーブル
から削除し (command が関数ではない場合)、その後でそのコマンドを検索します。
-v オプションを指定した場合、発見したコマンドの位置を表示します。-r オ
プションを指定した場合、関数以外のすべてのエントリをハッシュテーブルから
-v オプションを指定した場合、発見したコマンドの位置を表示します。-r オプション
を指定した場合、関数以外のすべてのエントリをハッシュテーブルから
削除します。
.It jobid [ job ]
ジョブ job 中の各プロセスのプロセス ID を表示します。引数 job が
@ -1117,8 +1116,8 @@ trap
れる結果は以下のものがあります。シェルのキーワード、エイリアス、シェル
の組み込みコマンド、コマンド、痕跡つきエイリアス(tracked alias)、最後に
not found (見つからず)があります。エイリアスについては、エイリアス展開
の結果が出力されます。コマンドと痕跡つきエイリアスについては、そのコマ
ンドの完全なパス名が印刷されます。
の結果が出力されます。コマンドと痕跡つきエイリアスについては、そのコマンドの
完全なパス名が印刷されます。
.It ulimit [ -HSacdflmnust ] [ limit ]
リソースのリミット値 (リミット値については
.Xr getrlimit 2

View file

@ -878,7 +878,7 @@ TCP
ヘッダ長によりオプションが存在することが分かるが、
IP データグラム長がオプションがそこにあるために十分な長さではない場合に、
tcpdump は ``[\fIbad hdr length\fP]'' を表示します。
HD
.HD
.B
UDP パケット
.LP

View file

@ -144,8 +144,8 @@ struct nlist {
は、以下の n_type 値を使います。
.Bd -literal
#define N_GSYM 0x20 /* グローバルシンボル : name,,0,type,0 */
#define N_FNAME 0x22 /* プロシジャ名 (f77 kludge): name,,0 */
#define N_FUN 0x24 /* プロシジャ: name,,0,linenumber,address */
#define N_FNAME 0x22 /* 手続き名 (f77 kludge): name,,0 */
#define N_FUN 0x24 /* 手続き: name,,0,linenumber,address */
#define N_STSYM 0x26 /* 静的シンボル: name,,0,type,address */
#define N_LCSYM 0x28 /* .lcomm シンボルl: name,,0,type,address */
#define N_RSYM 0x40 /* レジスタシンボル: name,,0,type,register */

View file

@ -55,7 +55,7 @@
.Bx
システムでは、
.Nm
の使用を大いに非としており、代わりに、それより表現力に富んだ
の使用は非推奨とされており、代わりに、それより表現力に富んだ
.Nm mdoc
パッケージが推奨されています。
.Sh 使用法
@ -64,19 +64,19 @@
で使用するマクロは、1 文字か 2 文字のアルファベット大文字を用いて名前が
付けられています。
.Xr troff 1
普通に用いられる慣習に従い、各マクロリクエストは、
通常使われる慣習に従い、各マクロリクエストは、行の先頭に
.Li "."
行の先頭の文字として始まります。
印字可能テキストを期待するマクロリクエストの引数は、0 個から 6 個までの単語
(word) からなります。マクロによっては、引数が与えられない場合は次の入力行を
処理するものもあります。例えば、
つけて始まります。
マクロリクエストの引数には、印字可能なテキストをとることが期待されています。
マクロリクエストの引数は、0 個から 6 個までの単語 (word) からなります。マクロリクエスト
によっては、引数をとらないときに次の入力行を処理するものもあります。例えば、
.Li ".I"
リクエストがそれだけで 1 行になっている場合、次の入力行が斜体 (italic) に
なります。
空白類文字 (whitespace characters) は、クォート文字で囲むことで引数に
含めることができます。各パラグラフが始まる直前
そして、フォントサイズ・フォントフェース変更マクロの処理が完了した直後に
フォントとサイズはデフォルト値にリセットされます。
空白やタブ文字 (whitespace characters) は、クォートで囲むことで引数に
含めることができます。各パラグラフが始まる直前
およびフォントサイズ・フォントフェース変更マクロが処理された後では
フォントとサイズはデフォルト値にされます。
.Ss インデント
.\" WORD: prevailing indent 通常インデント[man.7]
通常インデント (prevailing indent) の間隔は、その後インデント状態の
@ -88,14 +88,14 @@
.Ss 前処理 (Preprocessing)
伝統的に、マニュアルページの書式整形と表示には
.Xr man 1
プログラムが用いられます。マニュアルソースページの最初の行が、
プログラムが用いられます。マニュアルページのソースコードの1行目が、
文字列
.Li \&\'\e"
.\" " bring emacs's font-lock mode back in sync ...
で始まる場合、
その行の残りの文字は、
.Xr troff 1
に掛ける前に通す必要があるプリプロセッサを表します。
で文書を整形する前に実行する必要があるプリプロセッサを表します。
サポートしているプリプロセッサ指示子は次のとおりです。
.Bl -column "文字" "プリプロセッサ" -offset indent
.It Em 文字 Ta Em プリプロセッサ
@ -112,31 +112,31 @@
.Bl -column "文字列" "XXXXXXXXXXXXXXXXXXXXXXXXXXXX" -offset indent
.It Em 文字列 Ta Em 説明
.It "\e*R" Ta "登録商標のシンボル(registration symbol)"
.It "\e*S" Ta "デフォルトフォントサイズに戻す"
.It "\e*S" Ta "フォントサイズをデフォルトに戻す"
.It "\e*(Tm" Ta "商標のシンボル(trademark symbol)"
.It "\e*(lq" Ta "左引用符(left quote)"
.It "\e*(rq" Ta "右引用符(right quote)"
.El
.Pp
.Ss 利用可能なマクロ
利用可能なマクロをアルファベット順で説明しておきます。
利用可能なマクロをアルファベット順に説明します。
.Bl -tag -width "XXX XX"
.It ".B" Op Ar words
.Ar words
.\" WORD: typeset 版組みする[man.7]
.\" WORD: line break (行を)分割する[man.7]
をボールド体で版組みします。行分割は生じません。引数が与えられない
をボールド体で版組みします。行分割は生じません。引数を与えない
場合、次の行が処理の対象になります。
.It ".BI" Op Ar words
ボールド体と斜体で交代しながら
ボールド体と斜体を交互にして
.Ar words
を結合します。行分割は生じません。
引数が与えられない場合、次の行が処理の対象になります。
引数を与えない場合、次の行が処理の対象になります。
.It ".BR" Op Ar words
ボールド体とローマン体で交代しながら
ボールド体とローマン体を交互にして
.Ar words
を結合します。行分割は生じません。
引数が与えられない場合、次の行が処理の対象になります。
引数を与えない場合、次の行が処理の対象になります。
.It ".DT"
デフォルトのタブ間隔を 0.5 インチに戻します。
行分割は生じません。
@ -144,89 +144,94 @@
パラグラフを、ハンギングインデント (hanging indent) で始め、
以後の通常インデント幅を
.Ar indent
に設定します。このリクエストは強制的に行分割を引き起こします。
に設定します。このリクエストが実行されると、強制的に行分割が
生じます。
.Ar indent
が指定されない場合、通常インデント幅が使用されます。
.It ".I" Op Ar words
.Ar words
を斜体で版組みします。行分割は生じません。
引数が指定されない場合、次の行が処理の対象になります。
引数を与えない場合、次の行が処理の対象になります。
.It ".IB" Op Ar words
斜体とボールド体で交代しながら
斜体とボールド体を交互にして
.Ar words
を結合します。行分割は生じません。
引数が与えられない場合、次の行が処理の対象になります。
引数を与えない場合、次の行が処理の対象になります。
.It ".IP" Op Ar tag Op Ar indent
インデントされたパラグラフを、タグ
.Ar tag
を付けて始めます。
以後の通常インデント幅を
また、以後の通常インデント幅を
.Ar indent
に設定します。
.Ar tag
が指定されない場合、空文字列
が指定されていない場合、
.Ar tag
は空文字列
.Qq ""
と見なされます。
.Ar indent
が指定されない場合、
通常インデント幅と見なされます。
.It ".IR" Op Ar words
斜体とローマン体で交代しながら
斜体とローマン体を交互にして
.Ar words
を結合します。行分割は生じません。
引数が与えられない場合、次の行が処理の対象となります。
引数を与えない場合、次の行が処理の対象となります。
.It ".LP"
左整列 (left-aligned) パラグラフを開始します。
通常インデント幅はデフォルト値に設定されます。このリクエストは強制的に
行分割を引き起こします。
通常インデント幅はデフォルト値に設定されます。このリクエスト
が実行されると、強制的に行分割が生じます。
.It "\&.P"
\&.LP と同様に使用できる別名です。
\&.LP 別名です。
.It ".PD" Op Ar distance
パラグラフ間の垂直間隔を
パラグラフ間の垂直方向の間隔を
.Ar distance
に設定します。
.Ar distance
が指定されない場合、値 0.4v が使用されます。
.It ".PP"
\&.LP と同様に使用できる別名です。
\&.LP 別名です。
.It ".RE"
相対インデント (以下の \&.RS を参照して下さい) を終了します。
このリクエストは強制的に行分割を引き起こし
通常インデント値を以前の値に戻します。
このリクエストが実行されると強制的に行分割が生じ
通常インデント値が、以前使用されていた値に戻されます。
.It ".RB" Op Ar words
ローマン体とボールド体で交代しながら
ローマン体とボールド体を交互にして
.Ar words
を結合します。行分割は生じません。
引数が与えられない場合、次の行が処理の対象となります。
引数を与えない場合、次の行が処理の対象となります。
.It ".RI" Op Ar words
ローマン体と斜体で交代しながら
ローマン体と斜体を交互にして
.Ar words
を結合します。行分割は生じません。
引数が与えられない場合、次の行が処理の対象となります。
引数を与えない場合、次の行が処理の対象となります。
.It ".RS" Op Ar indent
相対インデントを開始します。インデント幅を
.Ar indent
だけ増加させます。
引数
.Ar indent
が指定されない場合、通常インデント幅の値が使用されます。
が指定されていない場合、通常インデント幅の値が使用されます。
.It ".SB" Op Ar words
フォントサイズを 1 ポイント減らしてからボールド体を用いて
フォントサイズを 1 ポイント小さくしてからボールド体で
.Ar words
を版組みします。行分割は生じません。引数が指定されない場合、
次の行が処理の対象となります。
.It ".SH" Op Ar words
セクション表題 (section heading) を指定します。このリクエストは
強制的に行分割を引き起こします。また、通常インデント幅とマージンを
デフォルト値にリセットします。
セクションの表題 (section heading) を指定します。このリクエストが
実行されると、
強制的に行分割が生じます。また、通常インデント幅とマージンを
デフォルト値に戻します。
.It ".SM" Op Ar words
フォントサイズを 1 ポイント減らしてから
フォントサイズを 1 ポイント小さくしてから
.Ar words
を版組みします。行分割は生じません。引数が指定されない場合、
次の行が処理の対象となります。
.It ".SS" Op Ar words
セクション副表題 (section subheading) を指定します。このリクエストは
強制的に行分割を引き起こします。引数が与えられない場合、次の行が
セクション副表題 (section subheading) を指定します。このリクエストが
実行されると、
強制的に行分割が生じます。引数が指定されない場合、次の行が
処理の対象となります。このリクエストは、通常インデント幅とマージンを
デフォルト値に戻します。
.It ".TH" Ar name Ar section Ar date Xo
@ -239,57 +244,57 @@
を開始します。
第 3 引数
.Ar date
は、最近の変更日付です。
は、最終更新日です。
.Ar footer
が存在する場合、
これは左ページフッタテキストを指定します。さらに、
これは左側に表示されるページフッタテキストを指定します。さらに、
.Ar center
が存在する場合、
これはページ中央のヘッダテキストを指定します。このリクエストは、
マニュアルページのまさに最初のリクエストでなければなりません。
マニュアルページの一番最初のリクエストでなければなりません。
.It ".TP" Op Ar indent
次の行のテキストで指定するタグを持つタグ付きインデント状態のパラグラフを
開始します。引数
タグ付きのインデントされたパラグラフを
開始します。付加するタグはこのリクエストの次の行で指定します。引数
.Ar indent
が指定されると、これは通常インデント幅の新しい値を指定します。
このリクエストは強制的に行分割を引き起こします。
を指定すると、通常インデント幅の値を新しく指定できます。
このリクエストが実行されると、強制的に行分割が生じます。
.El
.Sh ページ構造
マニュアルページのほとんどは、以下に説明する概略に従うことが一般的です。
マニュアルページは、一般的に以下に説明する構造の概略に従うことがほとんどです。
.Bl -tag -width ".SH 名称"
.It ".TH" Ar title Op Ar section-number
マニュアルページの最初のマクロリクエストは、\&.TH である必要があります
このリクエストは、そのマニュアルページのタイトルと名称を確定します。
\&.TH リクエストは、マニュアルページのセクション番号も確定します。
マニュアルページの最初のマクロリクエストは、\&.TH でなくてはなりません
このリクエストを使用することで、マニュアルページのタイトルと名称が決定できます。
\&.TH リクエストは、マニュアルページのセクション番号も決定できます。
.It ".SH NAME"
コマンドを呼び出す際の名前、または名前のリストを置き、その後ろにダッシュ
コマンドを呼び出す名前、または名前のリストの後には、ダッシュ
.Pq Dq -
とコマンドの動作の要約を一行で続けます。このセクションには
.Nm troff
コマンド、エスケープシーケンス、マクロリクエストを一切置いてはいけません。
このセクションは
この部分は、
.Xr whatis 1
コマンドが使用するデータベースを生成するために使用されます。
.It ".SH SYNOPSIS"
説明するコマンドや関数の用法の簡単な要約を書きます。
.Bl -tag -width "Commands"
.Bl -tag -width "コマンド"
.It コマンド
コマンドと引数の構文を、コマンド行で入力するように記述します。その通りに
入力しなければならない語はボールド体で表します。引数は斜体で
コマンドと引数の構文を、コマンド行で入力するように記述します。書かれた通りに
入力しなければならない語はボールド体で表します。引数は斜体で
表します。このように引数とコマンド名を表す場合、たとえ文の始まりで
あっても、大文字にしてはいけません。
.Pp
構文上のシンボルとして使用するものはローマン体で表さねばなりません。
構文上のシンボルとして使用するものはローマン体で表さなくてはなりません。
.Bl -tag -width "XXX"
.It "[]"
角括弧は、オプション扱いの引数を表す際に使用します。
.It "|"
垂直バーは、複数から一つの排他的選択を表す際に使用します。垂直バーで区切った
垂直バーは、複数の選択肢から一つだけ選択することを表す際に使用します。垂直バーで区切った
リストの中の項目一つだけを選択すべきということです。
.It "..."
引数の後ろに省略符号を続ける場合、その引数が繰り返し指定可能で
あることを表します。括弧で囲んだ式の後ろに省略符号を続ける場合、
の式が繰り返し指定可能であることを表します。
あることを表します。括弧で囲んだ式の後ろに省略符号を続ける場合、
角括弧内の式が繰り返し指定可能であることを表します。
.El
.It 関数
必要なデータの宣言もしくは
@ -297,9 +302,9 @@
指示子を最初に置きます。その後ろに関数宣言を置きます。
.El
.It ".SH DESCRIPTION"
コマンドや関数の外部挙動の概要を記述します。そには、ファイルや
データとの相互作用、標準入力、標準出力、標準エラー出力がどのように
扱われるかが含まれます。通、内部挙動や実装の詳細をここでは示しません。
コマンドや関数の外部挙動の概要を記述します。そには、ファイルや
データとのやりとりや、標準入力、標準出力、標準エラー出力がどのように
扱われるかが含まれます。通、内部挙動や実装の詳細をここでは示しません。
このセクションで解くべき疑問は、「これはなにをするのか?」もしくは、
「これは何のためのものか?」です。
.Pp
@ -308,21 +313,21 @@
表さねばなりません。
.It ".SH OPTIONS"
オプションの一覧を、各オプションがコマンドの挙動にどのような
影響を与えるかの説明と共に与えます。
影響を与えるかの説明と共に与えます。
.It ".SH USAGE"
このセクションはオプションであり、サブコマンドの詳細な説明や、その
コマンドが理解する入力の文法を含めます。
.It ".SH RETURN VALUES"
あるライブラリルーチンが呼び出し元へ返しうる戻り値の一覧と、それらの
ライブラリルーチンが呼び出し元へ返しうる戻り値の一覧と、それらの
値が返る原因となる条件を記述します。
.It ".SH EXIT STATUS"
.\" WORD: exit status 終了状態
そのコマンドが終了状態 (exit status) として返す値の一覧と、それらの
.\" WORD: exit status 終了ステータス
そのコマンドが終了ステータス (exit status) として返す値の一覧と、それらの
値が返る原因となる条件を記述します。
.It ".SH FILES"
そのコマンドや関数に関連するファイルの一覧です。
.It ".SH SEE ALSO"
関連マニュアルページの一覧に続けて、他の刊行物への参照の一覧を、
関連マニュアルページの一覧に続けて、他の参考となる刊行物の一覧を、
コンマで区切って並べます。
.It ".SH DIAGNOSTICS"
診断メッセージと対応する説明の一覧です。

View file

@ -14,20 +14,20 @@
.Sh 解説
.Pp
セキュリティは、システム管理者とともに始まり、システム管理者と
ともに終る機能です。すべての
ともに終る機能です。
.Bx
システムは昔からマルチユーザに対応しています。セキュリティの仕組みを
システムは昔からすべてマルチユーザに対応しています。セキュリティの仕組みを
組み込んで維持することで、ユーザを
.Sq 正直に
し続ける仕事は、システム管理者の最も大きな責務の一つでしょう。マシンは、
管理者が設定しただけのセキュリティしか示しません。セキュリティに関する
問題は、むしろ、便利さを求める人間との競合問題です。一般に、
.Ux
システムは莫大な数のプロセスを同時に実行させることも、また、その多くを
サーバとして動作させることもできます。これは、外部の何者かが
接続してきて、サーバプロセスと会話することができるということ
意味します。昨日までのミニコンピュータとメインフレームは、今日では
デスクトップコンピュータとなり、かつ、それらはネットワークで結ばれて
システムは莫大な数のプロセスを同時に実行させることができ、
それも、サーバとして動作するものが多いのです。つまり、外部の何者かが
接続してきて、サーバプロセスと会話することができるということなのです。
昨日まで使われていたミニコンピュータやメインフレームは、今日では
デスクトップコンピュータが取って代わり、しかも、それらはネットワークで結ばれて
インターネットと接続されるようになりました。これにより、セキュリティは
昔と比べてはるかに大きな問題となっています。
.Pp
@ -45,33 +45,34 @@
.Pp
サービス不能攻撃とは、マシンから必要な資源を奪う行為です。
サービス不能攻撃は、普通は、そのマシンで実行されるサーバや
ネットワークスタックを圧倒して、マシンを使えなくしたりクラッシュさせようと
するような力任せの仕組みです。サービス不能攻撃のいくつかは、
ネットワークスタックを圧倒して、マシンをクラッシュさせたり、
さもなければマシンを使えなくしたりするような力任せの方法です。
サービス不能攻撃のいくつかは、
ネットワークスタックのバグを利用して、パケット一つでマシンを
クラッシュさせようとします。後者は、
カーネルにバグ修正を施すことによってのみ修正することができます。
サーバプロセスに対する攻撃は、サーバのオプションを適切に指定して、
逆境状況のシステムにおいて、サーバプロセスが引き起こす負荷に限界を設けることで
不利な状況にあるシステムにおいて、サーバプロセスが引き起こす負荷に限界を設けることで
修正することができます。これらに比べると、ネットワークへの力任せの攻撃への
対応はずっと難しくなります。たとえば、偽造パケットによる攻撃
.Pq spoof-packet attack
は、インターネットからシステムを切り離す以外の方法では、抑止することは
は、インターネットからシステムを切り離す以外の方法で防ぐことは
ほとんど不可能です。
.Pp
ユーザアカウントを危険に晒すことは、サービス不能攻撃よりは多少はありふれた
ものです。このご時勢でも、システム管理者の多くは、自分たちのマシンで
標準の telnetd, rlogind, rshd, ftpd サーバを実行させています。これらの
ユーザアカウントを危険に晒してしまう問題は、サービス不能攻撃よりもずっとよくある
問題です。このご時勢でも、自分たちのマシンで標準の telnetd, rlogind, rshd, ftpd
サーバを実行させているシステム管理者は多いのです。これらの
サーバは、デフォルトでは、暗号化されたコネクション上で動作していません。
その結果、抱えているユーザ数が標準的な大きさならば、リモート
.Pq そのシステムにログインするのに最も普通で便利な場所
からログインしているユーザのうち一人以上は、パスワードを覗き見られて
その結果、抱えているユーザ数が標準くらいであれば、リモートログイン
.Pq そのシステムにログインするには最も普通で便利な方法です
しているユーザのうち一人以上は、パスワードを覗き見られて
しまうでしょう。
システム管理者が注意深いならば、たとえログインが成功していたとしても、
システム管理者が注意深いならば、たとえログインが成功していたとしても、
リモートアクセスログをときどき解析して、疑わしいソースアドレスを探すものです。
.Pp
ひとたび攻撃者がユーザアカウントへのアクセス権を入手すると、攻撃者が
root の権限を破る可能性があることを仮定するべきです。しかし、
セキュリティを十分保ち、手入れの行き届いたシステムにおいては、
セキュリティを十分維持し、手入れの行き届いたシステムにおいては、
あるユーザアカウントへのアクセスが可能となっても、攻撃者に必ずしも
root へのアクセス権を与えるとは限らないのが現実です。この違いは重要です。
というのは、root へのアクセス権がなければ、一般的に、攻撃者は自分の
@ -84,7 +85,7 @@ root
しれません。攻撃者が root の権限で実行されるサーバのバグを見つけ、
ネットワークからそのサーバへ接続して root の権限を破ることができるかも
しれません。ひとたびユーザアカウントを破ると、ユーザアカウントから
root の権限を破ることが可能であるバグを持つ suid-root プログラムの
root の権限を破ることが可能であるというバグを持つ suid-root プログラムの
存在を、攻撃者は知っているかもしれません。
.Pp
セキュリティを改善する方法は、常に、
@ -117,10 +118,10 @@ root
危険に晒されていると仮定することです。root アカウントの安全性を確保する
ためには、ネットワーク越しに、あるいはどれか一般ユーザのアカウントから、
root のパスワードを使って root アカウントにログインすることが決して
できないことを確実にすることです。正しいパスワードが与えられようが
できないことを確することです。正しいパスワードが与えられようが
与えられまいが、telnetd, rlogind, その他ログイン処理を行なうサーバ
すべてで root でのログインを拒絶するように設定していないとするなら
今すぐそういうふうに設定して下さい。直接 root でログインできるのは、
すべてで root でのログインを拒絶するように設定していないのであれば
今すぐ必ず設定して下さい。直接 root でログインできるのは、
システムコンソールからだけにして下さい。ここで役に立つのが
.Sq /etc/ttys
ファイルです。ほとんどのシステムでは、デフォルトで安全ですが、
@ -141,11 +142,11 @@ wheel
与えてはいけません。スタッフは、
.Sq staff
かその類のグループに置き、その中で本当に root になる必要がある人
だけを wheel グループに加えるようにします。残念ながら、wheel の
仕組みだけだと、侵入者がパスワードファイルを手に入れると、攻撃者が
破る必要があるのは root のパスワードか、wheel グループにたまたま属す
staff アカウントの一つのパスワードだけです。wheel の仕組みは有益
ですが、wheel グループがまったく存在しない状況と比べてそれほど
だけを wheel グループに加えるようにします。しかし、残念ながら、wheel の
仕組みだけだと、侵入者は、パスワードファイルを手に入れるとルート権限を
破ることができてしまいます。攻撃者が破る必要があるのは root のパスワード
か、wheel グループにたまたま属するstaff アカウントのパスワードどれかひとつだけだからです。
wheel の仕組みは有益ですが、wheel グループがまったく存在しない状況と比べてそれほど
安全なわけではありません。
.Pp
root アカウントの安全性を高める間接的な方法として、別のログインアクセス
@ -167,96 +168,102 @@ root
安全性の高いログインの仕組みを使います。kerberos のような仕掛けを使う場合、
一般に、kerberos サーバを実行するマシンと自分のデスクトップ
ワークステーションとの安全性を確保しなければなりません。ssh で
公開鍵 / 秘密鍵の鍵の組を使う場合、一般に、ログイン元マシン
公開鍵 / 秘密鍵の組を使う場合、一般に、ログイン元マシン
.Pq 通常は自分のワークステーション
の安全性を確保しなければなりません。ここで、
.Xr ssh-keygen 1
で鍵の組を生成する際、鍵の組をパスワードで防御することにより、
鍵の組を防護するための層を追加することもできます。スタッフアカウントの
パスワードを\ * で外すことができることにより、スタッフメンバが
管理者自身が設定した安全性の高い方法でのみログインできることも保証
できます。かくして、多くの侵入者が使う重大なセキュリティの穴
公開鍵 / 秘密鍵の組を生成する際、鍵の組をパスワードで防御することにより、
鍵の組への防御層を追加することもできます。スタッフアカウントの
パスワードを\ * で外すことができると、管理者自身が設定
した安全性の高い方法でしかスタッフメンバがログインできないことも保証
できます。こうして、多くの侵入者が使う重大なセキュリティの穴
.Pq 安全性の低い無関係なマシンからネットワークを覗き見る方法
のないセッションを提供する、安全性の高い暗号化されたコネクションを
使うことを、すべてのスタッフメンバに強制することができるのです。
を塞ぐようなセッションを提供する、安全性の高い暗号化されたコ
ネクションを使うことを、スタッフメンバ全員に強制することができ
るのです。
.Pp
より間接的なセキュリティの仕組みは、より制限の強いサーバから制限の弱い
サーバへログインすることを前提としています。例えば、主マシンで、
すべての種類のサーバを実行させている場合、ワークステーションではそれらの
サーバを実行させてはなりません。ワークステーションの安全性を比較的
高めておくためには、実行するサーバの数を、果てはサーバなしまで、
できるだけ減らしておくべきです。また、パスワード防護された
スクリーンセーバを走らせておくべきです。
ワークステーションへの物理的アクセスが与えられたとすると、攻撃者は
管理者が設定したいかなる種類のセキュリティをもうち破ることができるのは
もちろんのことです。これは、管理者として考えておかねばならない決定的な
問題ですが、システム破りの大多数は、ネットワーク経由でリモートから、
ワークステーションやサーバへの物理的アクセス手段を持たない人々によって
行なわれるという事実も、また、念頭に置いておく必要があります。
より間接的なセキュリティの仕組みでは、制限の強いサーバから制限の弱い
サーバへログインすることを前提としています。例えば、メインマシンで、
様々な種類のサーバを実行させている場合、ワークステーションではそれらの
サーバを実行させてはなりません。ワークステーションを十分に
安全にしておくためには、実行するサーバの数を、一つもサーバ
が実行されていないというくらいにまでできる限り減らすべきです。
また、パスワードで保護されたスクリーンセーバを走らせておくべきです。
ワークステーションへの物理的アクセスが与えられたとすると、もちろん
言うまでもなく、攻撃者は管理者が設定したいかなる種類のセキュリティ
をもうち破ることができるのです。これは、管理者として必ず考えておか
ねばならない問題ですが、システム破りの大多数は、ネットワーク経由で
リモートから、ワークステーションやサーバへの物理的アクセス手段を持
たない人々によって行われるという事実もまた、念頭に置いておく必要
があります。
.Pp
kerberos のような方法を使うことで、スタッフアカウントのパスワードの変更
もしくは停止を一箇所で行なうことと、スタッフメンバがアカウントを持つ
すべてのマシンに即時にその効果を及ぼすことが可能となります。スタッフメンバの
アカウントが危険に晒されたときに、すべてのマシンでその人のパスワードを
即座に変更する機能を甘く見てはいけません。パスワードが分散されていると
N 台のマシンでパスワードを変更することは、てんやわんやの事態を招く可能性が
あります。kerberos による再パスワード制限
アカウントが危険に晒されたときに、すべてのマシンでスタッフメンバのパスワードを
即座に変更する能力を過小評価してはいけません。パスワードが分散されている状況では
N 台のマシンでパスワードを変更する、てんやわんやの事態を招く可能性が
あります。kerberos を使用すると、パスワードの再発行に制限
.Pq re-passwording restriction
を課することもできます。これを使うことにより可能となることは
ある kerberos チケットをしばらくしてからタイムアウトにすることだけでなく、
kerberos システムがユーザに一定期間
を課することもできます。この機能を使うことにより
ある kerberos チケットをしばらく経つとタイムアウトにすることが
できるだけでなく、一定期間
.Pq 例えば、1 ヶ月に 1
の後に新しいパスワードを選ぶことを要求することもできます。
経つと、ユーザに新しいパスワードを選ぶように要求することもできます。
.Sh root の安全性を高める - root 権限のサーバと suid/sgid バイナリ
.Pp
用心深いシステム管理者は、自分に必要なサーバプロセスだけを過不足なく
実行させるものです。第三者製のサーバはしばしばバグの温床であることに
注意して下さい。例えば、古いバージョンの imapd や popper を実行させ
ておくということは、全世界に共通の root の切符を与えているようなものです。
実行させるものです。第三者製のサーバは、よくバグを持っていがちだと
いうことに注意して下さい。例えば、古いバージョンの imapd や popper
を実行させておくのは、全世界に共通の root の切符を与えてい
るようなものです。
自分で注意深くチェックしていないサーバは、決して実行してはいけません。
サーバの多くは root で実行させる必要はありません。例えば、ntalk, comsat,
root で実行させる必要のあるサーバはほとんどありません。例えば、ntalk, comsat,
finger デーモンを、特別の「砂場
.Pq sandbox
」ユーザで実行させることができます。
.\"kuma hellofalot of trouble って何や?
.\" hell of a lot of trouble みたいですね。;-) (金ん田 '99.02.11)
管理者が膨大な数の問題に直面しない限り、砂場は完璧では
管理者が膨大な数の問題に直面していないのなら、この「砂場」は完璧では
ありませんが、セキュリティに関するタマネギ的アプローチはここでも
成り立ちます。砂場で実行されているサーバプロセスを経由して侵入を
果たすことができたとしても、攻撃者はさらに砂場から外に脱出しなければ
なりません。攻撃者が通過せねばならない層の数が増えれば増えるほど、
それだけ攻撃者が侵入に成功する確率が減ります。root の抜け穴は
歴史的に、基本システムサーバも含め、
root 権限で実行されるほとんどすべてのサーバプロセス発見されています。
root 権限で実行されるほとんどすべてのサーバプロセス発見されています。
ユーザが sshd 経由でのみログインし、
telnetd, rshd, rlogind 経由でログインすること
が決してないマシンをお使いなら、それらのサービスを停止させて下さい。
が決してないマシンを稼働させているのであれば、それらのサービスを停止させて下さい。
.Pp
.Bx Free
では、今では ntalkd, comsat, finger は砂場で実行させることが
デフォルトになっています。次に砂場で実行させるべきプログラムの候補として、
.Xr named 8
があります。デフォルトの rc.conf ファイルには、named を砂場で実行する
ために必要な引数がコメントアウトされた形式で含められています。新しい
ために必要な引数がコメントアウトされた形式で含れています。新しい
システムをインストールしているか、それとも既存のシステムを
アップグレードして使っているかに依存しますが、砂場として使用する
特別のユーザアカウントがインストールされていないかもしれません。用心深い
システム管理者は研究を怠らず、可能なところではつねにサーバに砂場を仕込む
ものです
特別のユーザアカウントがインストールされていないかもしれません。
用心深いシステム管理者であれば、できるだけいつでも研究を怠らず、
サーバに砂場を仕込むものでしょう
.Pp
通常、砂場で実行しないサーバが他にいくつかあります。sendmail, popper,
imapd, ftpd などです。これらのうちいくつかには代わりがありますが、
imapd, ftpd などです。これらのうちいくつかのサーバには代わりとなるも
のがありますが、
代わりのものをインストールするには、それだけ多くの仕事が必要になるので、
結局これらを喜んで入れてしまいます
.Pq 簡単度がまたも勝利を収めるわけです
.Pq 便利さという要素がまたも勝利を収めるわけです
これらのサーバは、root 権限で実行せねばならず、これら経由で生じる侵入の
検出のためには、他の仕組みに依存せねばならないかもしれません。
これらのサーバは、root 権限で実行せねばならいかもしれません。また、
これらのサーバ経由で生じる侵入
を検出するためには、他の仕組みに頼らなくてはならないかもしれません。
.Pp
システムの root 権限の潜在的な穴で他に大きなものとして、システムに
インストールされた suid-root/sgid バイナリがあります。rlogin など、
これらのバイナリのほとんどは、/bin, /sbin, /usr/bin, /usr/sbin に
存在します。100% 安全なものは存在しないとはいえ、システムデフォルトの
インストールされた suid-root/sgid バイナリがあります。
これらのバイナリは、rloginのように、
/bin, /sbin, /usr/bin, /usr/sbin に
存在するものがほとんどです。100% 安全なものは存在しないとはいえ、システムデフォルトの
siud/sgid バイナリは比較的安全といえます。それでもなお、root の穴が
これらのバイナリにときおり発見されています。1998 年に Xlib で見つかった
root の穴は、xterm
@ -265,10 +272,11 @@ root
安全である方がよいので、用心深いシステム管理者は残念に思いながらも、
スタッフのみが実行する必要がある suid バイナリは、スタッフのみが
アクセス可能な特別なグループに含めるように制限を加え、
誰も使わない suid バイナリは chmod 000 して片付けてしまうでしょう。
誰も使わない suid バイナリは chmod 000 を実行して片付けてしまうで
しょう。
ディスプレイを持たないサーバは、一般的に xterm のバイナリを必要としません。
sgid バイナリもほとんど同様の危険な存在になり得ます。
侵入者が sgid-kmem のバイナリを破ることができた場合、
侵入者が kmem に sgid されたバイナリを破ることができた場合、
その侵入者は /dev/kmem を読み出すことができるようになります。
つまり、暗号化されたパスワードファイルを読み出すことができる
ようになるので、パスワードを持つどのアカウントをも、
@ -286,11 +294,12 @@ tty
スタッフに対して、アテナイのドラコのような厳格なアクセス制限を課し、
スタッフのパスワードを\ * で外すことができるとはいえ、管理者が持ちうる
一般ユーザすべてのアカウントに対して同じことはできないかも知れません。
十分な管理を保つならば、管理者は勝利し、ユーザの
アカウントを適切な状態で安全を確保できるかもしれません。それが
保てないならば、一般ユーザのアカウントをモニタしていっそう気を配るように
するしかありません。一般ユーザアカウントでの ssh や kerberos の利用は、
いろいろ問題をはらんでいます。それでも、暗号化パスワードと比較すると、
管理者が十分に統率をとることができるなら、管理者は勝利し、ユーザの
アカウントの安全を適切に確保できるかもしれません。それが
できないならば、よりいっそう気を配って一般ユーザのアカウントを
監視するよりほかありません。一般ユーザアカウントに対し
ssh や kerberos を利用することには、いろいろと問題があります。
それでも、暗号化パスワードと比較すると、
はるかに良い解です。
.Sh パスワードファイルの安全性を高める
.Pp
@ -299,31 +308,31 @@ ssh
パスワードファイル
.Pq /etc/spwd.db
が root でのみ読み出し可能だとしても、
たとえ root の書き込み権限が得られないにしても、侵入者がそのファイルの
読み出しアクセス権限を得ることは可能かも知れません。
侵入者がそのファイルの読み出しアクセス権限を得ることは可能かもしれません。たとえ root の書き込み権限が得られないにしてもです。
.Pp
セキュリティスクリプトは常にパスワードファイルの変更をチェックし、報告
するようにすべきです (後述の「ファイルの完全性のチェック」を参照して下さい)。
するようにすべきです。
.Pq 後述の「ファイルの完全性のチェック」を参照して下さい。
.Sh カーネルのコア、raw デバイス、ファイルシステムの安全性を高める
.Pp
root の権限を破ると、攻撃者はほとんど何でもできますが、
もっと簡便なこともいくつかあります。例えば、最近のカーネルのほとんどでは、
root の権限を破ると、攻撃者は何でもできますが、
もっと簡便なこともいくつかあります。例えば、最近のカーネルは、
組み込みのパケット覗き見デバイス
.Pq packet sniffing device
ドライバを備えていす。
ドライバを備えているものがほとんどです。
.Bx Free
では
.Sq bpf
デバイスと呼ばれています。侵入者は普通、危険に晒された
マシンでパケット覗き見プログラムを実行させようと試みます。侵入者に
わざわざそういう機能を提供する必要はないので、ほとんどのシステムで bpf
デバイスを組み込むべきではありません。不幸なことに、ローダブルカーネル
デバイスを組み込むべきではありません。しかし、不幸なことに、最近のカーネルのもう一つの特徴として、ローダブルカーネル
モジュール
.Pq Loadable Kernel Module:LKM
インタフェースと呼ばれる
カーネル機能があります。やる気まんまんの侵入者は、LKM を使って
機能があります。やる気まんまんの侵入者は、LKM を使って
自分独自の bpf もしくはその他覗き見デバイスを動作中のカーネルに
インストールすることが可能です。
インストールすることができます。
モジュールローダを使う必要がないのであれば、カーネル設定で
NO_LKM オプションを設定してこの機能を無効にして下さい。
.Pp
@ -339,7 +348,7 @@ raw
.Sq schg
のような
特別な chflags フラグが効果を発揮します。これに加えて、
起動において重要なバイナリ・ディレクトリ・スクリプトファイルなど、
起動において重要なバイナリ・ディレクトリ・スクリプトファイルなど、
安全レベルが設定されるまでの間に実行されるものすべてに対しても
.Sq schg
フラグを確実に on にしておく必要があります。この設定をやり過ぎても
@ -349,8 +358,8 @@ raw
ディレクトリに schg フラグを設定しないという妥協をする方法もあります。
.Sh ファイルの完全性のチェック: バイナリ、設定ファイルなど
.Pp
ことここに至るとシステム管理者にできることは、
便利がその醜い頭を上げない程度に、
ことこの問題に至ると、システム管理者にできることは、
便利さという要素がその醜い頭を上げない程度に、
コアシステムの設定 / 制御ファイルを防御することだけです。
セキュリティのタマネギの最後の層はおそらく最も重要なもの、すなわち探知です。
.Pp
@ -358,7 +367,7 @@ raw
システム経由で行なう方法だけです。
.Sq 安全
なシステムを準備することは比較的
容易です。単に、サービスを一切実行しないようにするだけです。安全なシステム
容易です。単にそのシステム上で、サービスを一切実行しないようにするだけです。安全なシステム
を用いて、ssh 経由で他のシステムの root 空間にアクセスします。これは
セキュリティの末端のように見えるかもしれません。しかし、管理者には信頼を
どこかに置く必要があります。いきあたりばったりでサーバプロセスを
@ -366,8 +375,7 @@ raw
ことは本当に可能です。ここで
.Sq 安全
という場合、物理アクセスに対する
セキュリティをも含めて仮定していることはもちろんです。安全なマシンで、
他のすべてのマシンに root のアクセス権限を持つものが得られると、
セキュリティをも含めて仮定していることはもちろんです。他のすべてのマシンに root のアクセス権限を持つ、安全なマシンがあれば、
「安全なマシンの上で」システムの他のマシンをチェックする
セキュリティスクリプトを書くことができるようになります。
最も普通のチェック方法は、セキュリティスクリプトで、
@ -378,75 +386,76 @@ raw
.Pq もしくは、少なくとも /, /var, /usr パーティション!
に対して md5 を適用するシェルコマンドを
ssh を使ってリモートマシンで実行するものです。
安全なマシンは、チェック結果をファイルにコピーし、前回のチェック結果と
diff を取り
.Pq または、安全なマシン自身のバイナリと比較する
違いを
毎日のレポートとしてスタッフメンバひとりひとりにメールを送ります。
安全なマシンは、チェック結果をファイルにコピーし、前回のチェック結果との差分を取り
.Pq または、安全なマシン自身が持っているバイナリと比較する
、その差分を
毎日のレポートとしてスタッフメンバひとりひとりにメールで送ります。
.Pp
この種のチェックを行なうもう一つの方法として、安全なマシンに対して、
他のマシンの主なファイルシステムを NFS export する方法があります。
この種のチェックを行うもう一つの方法として、
他のマシンから主なファイルシステムを 安全なマシンにNFS export
する方法があります。
このやり方はいくらかネットワークに負荷を掛けることになりますが、
侵入者がチェックを探知したり偽造したりすることは、
事実上不可能になります。
.Pp
優れたセキュリティスクリプトは、一般ユーザやスタッフメンバのアクセス制御
ファイル: .rhosts, .shosts, .ssh/authorized_keys など、MD5 での精細な
チェックから洩れそうなファイルの変更をチェックします。
チェックから洩れそうなファイルの変更もチェックするようにします。
.Pp
優れたセキュリティスクリプトは、すべてのファイルシステム上で suid/sgid
バイナリに対してチェックを行ない、前回のチェック結果もしくは何らかの
バイナリのチェックを行い、前回のチェック結果もしくは何らかの
基準
.Pq "例えば、基準を週 1 回にする"
.Pq 例えば、その基準を週 1 回作成する。
からの差分だけでなく、
それらの存在そのものを報告するものです。
それらバイナリの存在そのものを報告するものです。
.Sq nosuid
オプションを
fstab/mount で指定することで、あるファイルシステム上の suid/sgid
バイナリの実行機能をオフにすることができますが、root によるこれら
実行をオフにすることはできません。さらに、root 権限を破った者は誰でも
バイナリの実行機能をオフにすることができますが、root によるこれら
バイナリの実行をオフにすることはできません。さらに、root 権限を破った者は誰でも
自分自身で用意したバイナリをインストールすることだってできます。
しかしながら、ユーザのディスク空間を大量に持つ場合、
ユーザパーティションで suid バイナリとデバイス
.Po
.Sq nodev
オプション
.Pc
を不許可にしておき、スキャンしないで済ませることも有益かもしれません。
それでも、私ならば、少なくとも週に 1 回はスキャンする
でしょう。というのは、タマネギのこの層の目的は侵入の検知だからです。
ユーザパーティション上で suid されたバイナリとデバイスを不許可に
しておき
('nodev' オプション)、
そのパーティションをスキャンしないで済ませることも有益かもしれません。
それでも私ならば、ともかく、少なくとも週に 1 回はスキャンする
でしょう。というのは、タマネギのこの層の目的は侵入を検知すること
だからです。
.Pp
プロセスアカウンティング
.Po
.Xr accton 1
参照
.Pc
は、侵入後の評価の仕組みとして利用をお勧めする、
比較的オーバヘッドの低いオペレーティングシステムの機能です。
侵入を受けた後でも当該ファイルが無傷であるとするなら、
侵入者が実際のところどのようにしてシステムの root を破ったかを
追跡するのに際して特に有益です。
は、比較的オーバヘッドの低いオペレーティングシステムの機能で、
マシンに侵入されてしまった後の評価の仕組みとして使用することをお勧め
します。
侵入を受けた後でも当該ファイルが無傷である場合に、
侵入者が実際にどのようにしてシステムの root を破ったかを
追跡するのに特に有益です。
.Pp
最後に、セキュリティスクリプトはログファイルを処理するようにし
ログファイル自体できるだけ安全性の高い方法で
(リモート syslog は極めて有益になり得ます)
最後に、セキュリティスクリプトはログファイルを処理するようにし、
ログファイル自体できるだけ安全性の高い方法で
.Sq リモート syslog は極めて有益になり得ます
生成するようにすべきです。侵入者は自分の侵入の痕跡を覆い隠そう
としますし、ログファイルはシステム管理者が最初の侵入の時刻と方法を
追跡してゆくために極めて重要です。
としますし、また、ログファイルはシステム管理者が最初の侵入の時
刻と方法を追跡してゆくために極めて重要です。
.Sh 偏執狂的方法
.Pp
多少偏執狂的になっても決して悪いことにはなりません。原則的に、
システム管理者は、便利さに影響を与えない範囲でいくつでもセキュリティ
機能を追加することができます。また、いくらか考慮した結果、便利さに
影響を与えるセキュリティ機能を追加することもできます。
.Sh サービス不能攻撃 (D.O.S attack) についての特記事項
.Sh サービス不能攻撃 (D.O.S. attack) についての特記事項
.Pp
このセクションではサービス不能攻撃を扱います。サービス不能攻撃は、普通は、
パケット攻撃です。ネットワークを飽和させる最先端の偽造パケット
.Pq spoofed packet
攻撃に対してシステム管理者が打てる手はそれほど多く
ありませんが、一般的に、その種の攻撃がサーバをダウンさせないことを
確実にすることで、被害を制限することはできます。
ありませんが、一般的に、その種の攻撃によってサーバがダウン
しないことを確実にすることで、被害をある限度に食い止める
ことはできます。
.Bl -enum -offset indent
.It
サーバの fork の制限
@ -467,8 +476,8 @@ inetd
.Pc
には、この種の攻撃を制限するオプションがいくつかあります。マシンが
ダウンすることを防止することは可能ですが、この種の攻撃によりサービスが
崩壊することを防止することは一般的に可能とは限らないことに注意する必要が
あります。inetd のマニュアルページを注意深く読んで下さい。とくに、
崩壊することを防止することは一般的に言ってできないことに注意する必要が
あります。inetd のマニュアルページを注意深く読んで下さい。に、
.Fl c ,
.Fl C ,
.Fl R
@ -476,9 +485,9 @@ inetd
.Pq spoofed-IP attack
は inetd の
.Fl C
オプションを出し抜くので、普通はオプションを
オプションの裏をかけるので、一般にオプションを
組み合わせて使用するべきであることに注意して下さい。スタンドアロンサーバ
いくつかは、自己の fork 上限のパラメータを持っています。
中には、自分自身で fork を制限するパラメータを持っているものがあります。
.Pp
sendmail には、
.Fl OMaxDaemonChildren
@ -494,21 +503,21 @@ sendmail
sendmail をキュー処理モード
.Pq Fl ODeliveryMode=queued
で実行することや、
デーモン
sendmail デーモン
.Pq Cm sendmail -bd
をキュー処理用
をキュー処理用プロセス
.Pq Cm sendmail -q15m
と別に実行すること用心深いことと言えます。それでもなおリアルタイムでの
と別に実行することも、用心深いことと言えます。それでもなおリアルタイムでの
配送を望むのであれば、
.Fl q1m
のように、キュー処理をはるかに短い時間間隔で
うことができます。いずれにしても、
のようにすることで、キュー処理をはるかに短い時間間隔で
行うことができます。いずれにしても、
.Cm MaxDaemonChildren
オプションに
合理的な値を確実に指定して、sendmail がなだれをうって失敗することが
ないようにして下さい。
.Pp
syslogd は直接攻撃される可能性があるので、可能ならば
syslogd は直接攻撃される可能性があるので、可能ならばいつでも
.Fl s
オプションを用いることを強く推奨します。これができないなら、
.Fl a
@ -516,15 +525,15 @@ syslogd
.Pp
tcpwrapper の逆 identd などの接続返し
.Pq connect-back
を行うサービスに
ついては十分注意を払うようにするべきです。これらは直接攻撃を食らう可能性が
を行うサービスに
ついては十分注意を払うようにするべきです。これらは直接攻撃を受ける可能性が
あります。こういう事情があるので、tcpwrapper の逆 ident 機能を使おうとは
思わないのが一般的なところです。
思わないのが一般的です。
.Pp
境界ルータのところでファイアウォールを設けて、外部からのアクセスに対して
内部サービスを防御することは実によい考えです。この考え方は、LAN の外
からの飽和攻撃を防ぐことにあり、root からのネットワークベースの root
権限への攻撃から内部サービスを防御することに、あまり考慮を払って
内部サービスを防御するという考えは実によいものです。この考えは、LAN の外部
からの飽和攻撃を防ぐことにあり、root ネットワークベースの root
権限への攻撃から内部サービスを防御することに、あまり考慮を払って
いません。ファイアウォールは常に排他的に設定して下さい。つまり、
「ポート A, B, C, D と M から Z まで
.Eo *
@ -532,16 +541,15 @@ tcpwrapper
.Ec *
のすべてに防火壁を設ける」というふうにです。
このようにすることで、named
.Pq そこがゾーンのプライマリである場合 ,
.Pq ゾーンのプライマリである場合 ,
ntalkd, sendmail など、インターネットにアクセスを提供するサービス
として特に指定するもの以外の、すべての低めのポートをファイアウォールで
停止することができます。ファイアウォールをこの他のやり方、つまり
として特に指定するもの以外の、小さい番号のポートすべてをファイアウォールで
防御することができます。ファイアウォールをこの他のやり方、つまり
包含的もしくは受容的なファイアウォールとして設定しようとする場合、
いくつかのサービスを
.Sq close
することを忘れたり、新しい内部サービスを
追加してファイアウォールの更新を忘れたりすることはよくあります。
ファイアウォールの高めの範囲のポートを開けておいて、低めのポートを
することを忘れてしまうサービスがいくつか出てきたり、新しい内部サービスを
追加したのにファイアウォールの更新を忘れたりする可能性がよく出てきます。
ファイアウォール上の大きい番号のポートを開けておいて、小さい番号のポートを
危険に晒すことなく受容的な動作を許すことができます。
.Bx Free
では、net.inet.ip.portrange への sysctl
@ -549,23 +557,22 @@ ntalkd, sendmail
をいろいろ使用することで、
動的バインドに使用されるポート番号の範囲を制御できることを記憶にとどめて
おいて下さい。これによりファイアウォールの設定の複雑性を緩和できます。
私は、ファイアウォールに通常の範囲として、first/last が 4000 から 5000 を、
高位ポートの範囲として、49152 から 65535 を使用しています。さらに
.Pq いくつかのインターネットアクセス可能なポートを除くのはもちろんですが
私は、ファイアウォールに通常のfirst/last の範囲として、 4000 から 5000 を、
高位ポートの範囲として、49152 から 65535 を使用しています。そして
.Pq いくつかのインターネットアクセス可能なポートをブロックから除外するのはもちろんですが
4000 より下のすべてをブロックしています。
.Pp
また別のありふれたサービス不能攻撃として、踏み台攻撃
.Pq springboard attack
と呼ばれるものがあります。これは、サーバが自分自身、ローカルネットワーク、
他のマシンを過負荷に追い込むような応答を生成させる方法でサーバを
そして他のマシンを過負荷に追い込むような応答を生成させる方法でサーバを
攻撃します。この種の攻撃の中で最もありふれたものは、ICMP PING BROADCAST
攻撃があります。攻撃者は、実際に攻撃したいマシンのアドレスをソース
アドレスに設定した ping パケットを偽造して、対象の LAN の
ブロードキャストアドレスに対して送信します。境界にあるルータが
ブロードキャストアドレスに対する ping を握り潰すように設定されていない
場合、犠牲者を飽和させるのに十分な応答が、詐称されたソースアドレスに
対して生成され、LAN に嵐がまき起こります。攻撃者が同じトリックを
多くの異なるネットワークにまたがる多くのブロードキャスト
ブロードキャストアドレスに向けてパケットを送信します。境界にあるルータが
ブロードキャストアドレスに対する ping パケットを握り潰すように設定されていない
場合、LANは、詐称されたソースアドレスに向けて応答パケットを生成するはめになり、犠牲となるマシンが飽和するところまで行ってしまいます。攻撃者が同じトリックを
異なるネットワーク上のいくつものブロードキャスト
アドレスに対して同時に使用した場合、とくにひどいことになります。
これまでに、120 メガビット以上のブロードキャスト攻撃が観測されています。
2 番目の踏み台攻撃は、ICMP エラー報告の仕掛けを狙うものです。ICMP エラー
@ -574,17 +581,17 @@ ntalkd, sendmail
ネットワークを ICMP 応答で飽和させるようにすることができます。
mbuf を消費し尽くさせることにより、この種の攻撃でサーバを
クラッシュさせることも可能です。サーバの ICMP 応答生成が速過ぎて、
ICMP 応答を送信し尽くすことができない場合、とくにひどいことになります。
ICMP 応答の送信が追い付かない場合、とくにひどいことになります。
.Bx Free
カーネルには、この種の攻撃の効果を抑制する ICMP_BANDLIM と
呼ばれる新しいコンパイルオプションがあります。
3つめの主要なクラスに属す踏み台攻撃は、udp echo サービスのよう
ある種の内部 inetd サービスに関連するものです。攻撃者は単に
3つめの主要なクラスに属す踏み台攻撃は、udp echo サービスのような、
ある種の内部 inetd サービスに関連するものです。攻撃者は単に
ソースアドレスがサーバ A の echo ポートであり、ディスティネーション
アドレスがサーバ B の echo ポートであるかのように UDP パケットを
偽造します。ここでサーバ A, B はともに自分の LAN に接続されています。
この 2 つのサーバは、この一つのパケットを両者の間で互いに相手に対して
打ち返しあいます。このようにしていくつかのパケットを注入することで、
打ち返しあいます。このようにしてパケットをいくつか注入するだけで、
攻撃者は両方のサーバと LAN を過負荷状態にすることができます。
同様の問題が内部 chargen ポートにも存在します。有能なシステム管理者は
この手の inetd 内部テストサービスのすべてを無効にしておくものです。
@ -600,15 +607,16 @@ ICMP
検知すると、カーネルは動的に rtexpire を減らしますが、rtminexpire より
小さくなるようには決して減らしません。ここに問題が 2 つあります。
(1) 負荷の軽いサーバが突然攻撃された場合、カーネルが十分素早く反応
しないこと。(2) カーネルが攻撃に耐え生き延びられるほど十分
rtminexpire が低くなっていないこと。自分のサーバが T3 もしくはそれより
できないこと。(2) カーネルが攻撃に耐え生き延びられるほど十分
rtminexpire が低く設定されていないこと。の2つです。
自分のサーバが T3 もしくはそれより
良質の回線でインターネットに接続されている場合、
.Xr sysctl 8
を用いて rtexpire と rtminexpire とを手動で上書きしておくことが思慮深いこと
といえます。
.Pq 自分のマシンをクラッシュさせたくない限りは:-
どちらか 0 に
するようなことは決してしないで下さい。両パラメータを 2 秒に設定すれば、
.Pq 自分のマシンをクラッシュさせたくないのであれば:-)
どちらか一方でも 0 に
は決してしないで下さい。両パラメータを 2 秒に設定すれば、
攻撃から経路情報テーブルを守るには十分でしょう。
.Sh 関連項目

View file

@ -121,6 +121,6 @@ ernie::25:30::0:0:Ernie Kovacs,508 Evans Hall,x7925,
記憶するべきです。
.Sh 歴史
.Nm
プロシージャ
手続き
.Bx 3.0
から導入されました.

View file

@ -70,7 +70,8 @@ NIS
.Pp
.Nm
は、普通の NIS ユーザが、自分の NIS パスワード・
('GECOS'フィールドとして知られている)フルネーム・シェルを変更することを許します。
('GECOS'フィールドとして知られている) フルネーム・
シェルを変更することを許します。
これらの更新は、典型的には
.Xr yppasswd 1 ,
.Xr ypchfn 1 ,
@ -89,7 +90,7 @@ NIS
.Nm
サーバは、
.Xr ypserv 8
と同じアクセス制御機構を使います。)に照らして、
と同じアクセス制御機構を使います。) に照らして、
要求を行ったクライアントのアドレスを比較します。
.Pp
サーバは、その後ユーザが入力した '古い' パスワードが有効かどうかを
@ -100,7 +101,7 @@ NIS
.Pa /var/yp/master.passwd
です) を更新し、その後 NIS マップを再構築するために
.Pa /usr/libexec/yppwupdate
スクリプトを実行します。(このスクリプトは、つの引数を受け取ります:
スクリプトを実行します。(このスクリプトは、2 つの引数を受け取ります:
それらは変更されたパスワードテンプレートの相対パス名と更新された
ドメインの名前です。これらは、
.Pa /var/yp/Makefile
@ -151,7 +152,7 @@ NIS
を呼び出します。
.It Fl d Ar domain
.Nm
サーバは複数のドメインを扱うことができますが、つのドメインを
サーバは複数のドメインを扱うことができますが、1 つのドメインを
デフォルトとして選ばなければなりません。
.Xr domainname 1
コマンドによって設定されたシステムデフォルトのドメイン名を
@ -187,7 +188,7 @@ NIS
.Xr ypserv 8
は同時にいくつかのドメインを扱うことができますが、ほとんどの
.Nm
実装では、つの NIS ドメインだけしか扱うことができません。
実装では、1 つの NIS ドメインだけしか扱うことができません。
これは、一般に NIS マスタサーバのシステムデフォルトドメインと同じです。
.Bx Free
@ -303,7 +304,7 @@ NIS
.Xr ypxfr 8
.Sh バグ
yppasswd.x プロトコル定義で記述されているように、
YPPASSWDPROC_UPDATE プロシジャは二つの引数を取ります。
YPPASSWDPROC_UPDATE 手続きは 2 つの引数を取ります。
更新するユーザ情報を含む V7 形式のパスワード構造および、
ユーザの暗号化されない (クリアテキスト) パスワードです。
.Nm

View file

@ -141,7 +141,7 @@ domain/server
にブロードキャストではなく、
「メニーキャスト(many-cast)」を使用させます。
メニーキャストモードでは、制限されたリストで指定されるサーバの
YPPROC_DOMAIN_NONACK プロシジャに対して直接通信し、
YPPROC_DOMAIN_NONACK 手続きに対して直接通信し、
最も速く返答したサーバに対してバインドします。
NIS サーバがローカルにない NIS クライアントにおいて、
このモードが有用です。

View file

@ -57,7 +57,7 @@
.Nm
への入力は、
.Tn RPC
言語 (リモートプロシージャコール言語) として知られる、
言語 (遠隔手続き呼び出し言語; Remote Procedure Call Language) として知られる、
C 言語に類似した言語です。
.Pp
.Nm rpcgen
@ -158,7 +158,7 @@ XDR
ディスパッチテーブルのエントリには以下のものがあります:
.Bl -bullet -offset indent -compact
.It
そのプロシージャに対応するサービスルーチンへのポインタ
その手続きに対応するサービスルーチンへのポインタ
.It
入出力引数へのポインタ
.It
@ -379,9 +379,9 @@ rpcgen
はまだ MT-safe にはなっていません。
つまり rpcgen が生成したサーバ側コードは MT-safe ではありません。
.It Fl N
プロシージャが複数の引数を持てるようにします。
手続きが複数の引数を持てるようにします。
これはまた、C 言語に大変似たパラメータ渡し方法を用います。
ですからリモートプロシージャにある引数を渡す場合、
ですから遠隔手続きにある引数を渡す場合、
その引数へのポインタを渡す必要はなく、引数そのものを渡せます。
この動作は
.Nm
@ -430,13 +430,13 @@ netconfig
このオプションは複数回指定できます。
注: トランスポートはコンパイル時ではなく実行時に選択されます。
.It Fl \&Sc
リモートプロシージャ呼び出しを用いるサンプルクライアントコードを生成します。
遠隔手続き呼び出しを用いるサンプルクライアントコードを生成します。
.It Fl \&Sm
アプリケーションをコンパイルする際に用いるサンプル
.Pa Makefile
を生成します。
.It Fl \&Ss
リモートプロシージャ呼び出しを用いるサンプルサーバコードを生成します。
遠隔手続き呼び出しを用いるサンプルサーバコードを生成します。
.It Fl t
.Tn RPC
ディスパッチテーブルをコンパイル出力します。

View file

@ -397,14 +397,14 @@ here-doc-text
.Er ENOEXEC
を返す場合)、
サブシェルの中でそのプログラムを解釈実行します。この場合、あたかも新た
シェルが起動されたかのような効果を得るために、子シェルは自分自身を
初期化します。ただし、子プロセスは、親シェル中のハッシュされたコマンド
サブシェルの中でそのプログラムを解釈実行します。この場合、あたかも新た
シェルが起動されたかのような効果を得るために、子シェルは自分自身を
初期化します。ただし、子プロセスは、親シェル中のハッシュされたコマンド
位置情報を憶えており、これは再初期化されません。
.Pp
本ドキュメントの古いバージョンや古いソースコードでは、ときおり、マジッ
クナンバのないシェルスクリプトのことを「シェルプロシージャ」と呼んでい
て、まぎらわしい場合がありますので注意して下さい。
本ドキュメントの古いバージョンや古いソースコードでは、ときおり、
マジックナンバのないシェルスクリプトのことを「シェル手続き」と呼んでいて、
まぎらわしい場合がありますので注意して下さい。
.Ss パス検索
コマンドを検索するとき、シェルは、まず、その名前のシェル関数があるかどうかを
調べます。次に、その名前の組み込みコマンドがあるかどうかを調べます。
@ -470,9 +470,9 @@ here-doc-text
.Ed
.Pp
command1 の標準出力は command2 の標準入力に接続されます。コマンドの標
準入出力がパイプラインによって割り当てられるのは、各コマンドに属する
ダイレクト演算子で指定されたリダイレクトを処理する前のことだと考えて
さい。
準入出力がパイプラインによって割り当てられるのは、各コマンドに属する
ダイレクト演算子で指定されたリダイレクトを処理する前のことだと考えて
さい。
.Pp
パイプラインがバックグラウンド (後述) でなければ、シェルはすべての
コマンドが終了するのを待ちます。
@ -515,12 +515,11 @@ command1 & [command2 & ...]
接続されます。
.Ss リスト -- 一般的な話
リストは 0 個またはそれ以上のコマンドを改行文字、セミコロン文字、アン
パーサント文字 (&) で区切った列です。リストは、これら 3 つの記号のいず
れかで終了させることもできます。リスト中のコマンドは並べられた順に実行
パーサント文字 (&) で区切った列です。リストは、これら 3 つの記号のいずれかで
終了させることもできます。リスト中のコマンドは並べられた順に実行
されます。もし、コマンドに続けてアンパーサント文字が置かれている場合、
シェルはそのコマンドを起動したあと、すぐに次のコマンドの処理を開始しま
す。その他の場合、そのコマンドの終了を待ってから次のコマンドの処理を開
始します。
シェルはそのコマンドを起動したあと、すぐに次のコマンドの処理を開始します。
その他の場合、そのコマンドの終了を待ってから次のコマンドの処理を開始します。
.Ss 短絡リスト演算子(Short-Circuit List Operators)
``&&'' と ``||'' は AND-OR リスト演算子です。 ``&&'' は最初のコマンド
を実行し、もし最初のコマンドの終了ステータスが 0 ならば次のコマンドを
@ -586,7 +585,7 @@ esac
pattern は、1 つあるいは複数のパターン (後述の「シェルパターン」を参照
のこと) を ``|'' で接続したものです。
.Ss 複数のコマンドのグループ化
コマンドは、以下のいずれかの方法によりグループ化することができます
コマンドは、以下のいずれかの方法によりグループ化することができます
.Bd -literal -offset indent
(list)
.Ed
@ -624,10 +623,10 @@ local [ variable | - ] ...
local コマンドは、組み込みコマンドとして実装されています。
.Pp
変数を局所変数にする場合、関数を呼び出した環境に同じ名前の変数があれば、
新しい局所変数は値と export、readonly フラグを引き継ぎます。もし同じ名
前の変数がなければ、局所変数は初期値を持ちません。シェルは動的スコープ
を用います。すなわち、関数 f に局所的な変数 x を作成し、関数 f から
数 g を呼び出した場合、関数 g 内部での変数 x に対する操作は大域変数 x
新しい局所変数は値と export、readonly フラグを引き継ぎます。もし同じ名前の
変数がなければ、局所変数は初期値を持ちません。シェルは動的スコープ
を用います。すなわち、関数 f に局所的な変数 x を作成し、関数 f から
数 g を呼び出した場合、関数 g 内部での変数 x に対する操作は大域変数 x
ではなく、関数 f で宣言された変数 x への操作となります。
.Pp
特殊パラメータのうち局所宣言できるのは ``-'' だけです。 ``-'' を
@ -672,8 +671,8 @@ name=value
される場合、各位置パラメータは別々の引数となります。
もし、位置パラメータが設定されていない場合には、
@ の展開結果は 0 個の引数となります (ダブルクォート引用の内部であっても)。
すなわち、$1 が ``abc''、$2 が ``def ghi'' であっ
た場合、"$@" は次の 2 つの引数に展開されます。
すなわち、$1 が ``abc''、$2 が ``def ghi'' であった場合、"$@" は
次の 2 つの引数に展開されます。
.Bd -literal -offset indent
"abc" "def ghi"
.Ed
@ -1032,8 +1031,8 @@ hash
.Pp
引数を指定した場合、hash コマンドは指定したコマンドをハッシュテーブル
から削除し (command が関数ではない場合)、その後でそのコマンドを検索します。
-v オプションを指定した場合、発見したコマンドの位置を表示します。-r オ
プションを指定した場合、関数以外のすべてのエントリをハッシュテーブルから
-v オプションを指定した場合、発見したコマンドの位置を表示します。-r オプション
を指定した場合、関数以外のすべてのエントリをハッシュテーブルから
削除します。
.It jobid [ job ]
ジョブ job 中の各プロセスのプロセス ID を表示します。引数 job が
@ -1117,8 +1116,8 @@ trap
れる結果は以下のものがあります。シェルのキーワード、エイリアス、シェル
の組み込みコマンド、コマンド、痕跡つきエイリアス(tracked alias)、最後に
not found (見つからず)があります。エイリアスについては、エイリアス展開
の結果が出力されます。コマンドと痕跡つきエイリアスについては、そのコマ
ンドの完全なパス名が印刷されます。
の結果が出力されます。コマンドと痕跡つきエイリアスについては、そのコマンドの
完全なパス名が印刷されます。
.It ulimit [ -HSacdflmnust ] [ limit ]
リソースのリミット値 (リミット値については
.Xr getrlimit 2

View file

@ -878,7 +878,7 @@ TCP
ヘッダ長によりオプションが存在することが分かるが、
IP データグラム長がオプションがそこにあるために十分な長さではない場合に、
tcpdump は ``[\fIbad hdr length\fP]'' を表示します。
HD
.HD
.B
UDP パケット
.LP

View file

@ -144,8 +144,8 @@ struct nlist {
は、以下の n_type 値を使います。
.Bd -literal
#define N_GSYM 0x20 /* グローバルシンボル : name,,0,type,0 */
#define N_FNAME 0x22 /* プロシジャ名 (f77 kludge): name,,0 */
#define N_FUN 0x24 /* プロシジャ: name,,0,linenumber,address */
#define N_FNAME 0x22 /* 手続き名 (f77 kludge): name,,0 */
#define N_FUN 0x24 /* 手続き: name,,0,linenumber,address */
#define N_STSYM 0x26 /* 静的シンボル: name,,0,type,address */
#define N_LCSYM 0x28 /* .lcomm シンボルl: name,,0,type,address */
#define N_RSYM 0x40 /* レジスタシンボル: name,,0,type,register */

View file

@ -55,7 +55,7 @@
.Bx
システムでは、
.Nm
の使用を大いに非としており、代わりに、それより表現力に富んだ
の使用は非推奨とされており、代わりに、それより表現力に富んだ
.Nm mdoc
パッケージが推奨されています。
.Sh 使用法
@ -64,19 +64,19 @@
で使用するマクロは、1 文字か 2 文字のアルファベット大文字を用いて名前が
付けられています。
.Xr troff 1
普通に用いられる慣習に従い、各マクロリクエストは、
通常使われる慣習に従い、各マクロリクエストは、行の先頭に
.Li "."
行の先頭の文字として始まります。
印字可能テキストを期待するマクロリクエストの引数は、0 個から 6 個までの単語
(word) からなります。マクロによっては、引数が与えられない場合は次の入力行を
処理するものもあります。例えば、
つけて始まります。
マクロリクエストの引数には、印字可能なテキストをとることが期待されています。
マクロリクエストの引数は、0 個から 6 個までの単語 (word) からなります。マクロリクエスト
によっては、引数をとらないときに次の入力行を処理するものもあります。例えば、
.Li ".I"
リクエストがそれだけで 1 行になっている場合、次の入力行が斜体 (italic) に
なります。
空白類文字 (whitespace characters) は、クォート文字で囲むことで引数に
含めることができます。各パラグラフが始まる直前
そして、フォントサイズ・フォントフェース変更マクロの処理が完了した直後に
フォントとサイズはデフォルト値にリセットされます。
空白やタブ文字 (whitespace characters) は、クォートで囲むことで引数に
含めることができます。各パラグラフが始まる直前
およびフォントサイズ・フォントフェース変更マクロが処理された後では
フォントとサイズはデフォルト値にされます。
.Ss インデント
.\" WORD: prevailing indent 通常インデント[man.7]
通常インデント (prevailing indent) の間隔は、その後インデント状態の
@ -88,14 +88,14 @@
.Ss 前処理 (Preprocessing)
伝統的に、マニュアルページの書式整形と表示には
.Xr man 1
プログラムが用いられます。マニュアルソースページの最初の行が、
プログラムが用いられます。マニュアルページのソースコードの1行目が、
文字列
.Li \&\'\e"
.\" " bring emacs's font-lock mode back in sync ...
で始まる場合、
その行の残りの文字は、
.Xr troff 1
に掛ける前に通す必要があるプリプロセッサを表します。
で文書を整形する前に実行する必要があるプリプロセッサを表します。
サポートしているプリプロセッサ指示子は次のとおりです。
.Bl -column "文字" "プリプロセッサ" -offset indent
.It Em 文字 Ta Em プリプロセッサ
@ -112,31 +112,31 @@
.Bl -column "文字列" "XXXXXXXXXXXXXXXXXXXXXXXXXXXX" -offset indent
.It Em 文字列 Ta Em 説明
.It "\e*R" Ta "登録商標のシンボル(registration symbol)"
.It "\e*S" Ta "デフォルトフォントサイズに戻す"
.It "\e*S" Ta "フォントサイズをデフォルトに戻す"
.It "\e*(Tm" Ta "商標のシンボル(trademark symbol)"
.It "\e*(lq" Ta "左引用符(left quote)"
.It "\e*(rq" Ta "右引用符(right quote)"
.El
.Pp
.Ss 利用可能なマクロ
利用可能なマクロをアルファベット順で説明しておきます。
利用可能なマクロをアルファベット順に説明します。
.Bl -tag -width "XXX XX"
.It ".B" Op Ar words
.Ar words
.\" WORD: typeset 版組みする[man.7]
.\" WORD: line break (行を)分割する[man.7]
をボールド体で版組みします。行分割は生じません。引数が与えられない
をボールド体で版組みします。行分割は生じません。引数を与えない
場合、次の行が処理の対象になります。
.It ".BI" Op Ar words
ボールド体と斜体で交代しながら
ボールド体と斜体を交互にして
.Ar words
を結合します。行分割は生じません。
引数が与えられない場合、次の行が処理の対象になります。
引数を与えない場合、次の行が処理の対象になります。
.It ".BR" Op Ar words
ボールド体とローマン体で交代しながら
ボールド体とローマン体を交互にして
.Ar words
を結合します。行分割は生じません。
引数が与えられない場合、次の行が処理の対象になります。
引数を与えない場合、次の行が処理の対象になります。
.It ".DT"
デフォルトのタブ間隔を 0.5 インチに戻します。
行分割は生じません。
@ -144,89 +144,94 @@
パラグラフを、ハンギングインデント (hanging indent) で始め、
以後の通常インデント幅を
.Ar indent
に設定します。このリクエストは強制的に行分割を引き起こします。
に設定します。このリクエストが実行されると、強制的に行分割が
生じます。
.Ar indent
が指定されない場合、通常インデント幅が使用されます。
.It ".I" Op Ar words
.Ar words
を斜体で版組みします。行分割は生じません。
引数が指定されない場合、次の行が処理の対象になります。
引数を与えない場合、次の行が処理の対象になります。
.It ".IB" Op Ar words
斜体とボールド体で交代しながら
斜体とボールド体を交互にして
.Ar words
を結合します。行分割は生じません。
引数が与えられない場合、次の行が処理の対象になります。
引数を与えない場合、次の行が処理の対象になります。
.It ".IP" Op Ar tag Op Ar indent
インデントされたパラグラフを、タグ
.Ar tag
を付けて始めます。
以後の通常インデント幅を
また、以後の通常インデント幅を
.Ar indent
に設定します。
.Ar tag
が指定されない場合、空文字列
が指定されていない場合、
.Ar tag
は空文字列
.Qq ""
と見なされます。
.Ar indent
が指定されない場合、
通常インデント幅と見なされます。
.It ".IR" Op Ar words
斜体とローマン体で交代しながら
斜体とローマン体を交互にして
.Ar words
を結合します。行分割は生じません。
引数が与えられない場合、次の行が処理の対象となります。
引数を与えない場合、次の行が処理の対象となります。
.It ".LP"
左整列 (left-aligned) パラグラフを開始します。
通常インデント幅はデフォルト値に設定されます。このリクエストは強制的に
行分割を引き起こします。
通常インデント幅はデフォルト値に設定されます。このリクエスト
が実行されると、強制的に行分割が生じます。
.It "\&.P"
\&.LP と同様に使用できる別名です。
\&.LP 別名です。
.It ".PD" Op Ar distance
パラグラフ間の垂直間隔を
パラグラフ間の垂直方向の間隔を
.Ar distance
に設定します。
.Ar distance
が指定されない場合、値 0.4v が使用されます。
.It ".PP"
\&.LP と同様に使用できる別名です。
\&.LP 別名です。
.It ".RE"
相対インデント (以下の \&.RS を参照して下さい) を終了します。
このリクエストは強制的に行分割を引き起こし
通常インデント値を以前の値に戻します。
このリクエストが実行されると強制的に行分割が生じ
通常インデント値が、以前使用されていた値に戻されます。
.It ".RB" Op Ar words
ローマン体とボールド体で交代しながら
ローマン体とボールド体を交互にして
.Ar words
を結合します。行分割は生じません。
引数が与えられない場合、次の行が処理の対象となります。
引数を与えない場合、次の行が処理の対象となります。
.It ".RI" Op Ar words
ローマン体と斜体で交代しながら
ローマン体と斜体を交互にして
.Ar words
を結合します。行分割は生じません。
引数が与えられない場合、次の行が処理の対象となります。
引数を与えない場合、次の行が処理の対象となります。
.It ".RS" Op Ar indent
相対インデントを開始します。インデント幅を
.Ar indent
だけ増加させます。
引数
.Ar indent
が指定されない場合、通常インデント幅の値が使用されます。
が指定されていない場合、通常インデント幅の値が使用されます。
.It ".SB" Op Ar words
フォントサイズを 1 ポイント減らしてからボールド体を用いて
フォントサイズを 1 ポイント小さくしてからボールド体で
.Ar words
を版組みします。行分割は生じません。引数が指定されない場合、
次の行が処理の対象となります。
.It ".SH" Op Ar words
セクション表題 (section heading) を指定します。このリクエストは
強制的に行分割を引き起こします。また、通常インデント幅とマージンを
デフォルト値にリセットします。
セクションの表題 (section heading) を指定します。このリクエストが
実行されると、
強制的に行分割が生じます。また、通常インデント幅とマージンを
デフォルト値に戻します。
.It ".SM" Op Ar words
フォントサイズを 1 ポイント減らしてから
フォントサイズを 1 ポイント小さくしてから
.Ar words
を版組みします。行分割は生じません。引数が指定されない場合、
次の行が処理の対象となります。
.It ".SS" Op Ar words
セクション副表題 (section subheading) を指定します。このリクエストは
強制的に行分割を引き起こします。引数が与えられない場合、次の行が
セクション副表題 (section subheading) を指定します。このリクエストが
実行されると、
強制的に行分割が生じます。引数が指定されない場合、次の行が
処理の対象となります。このリクエストは、通常インデント幅とマージンを
デフォルト値に戻します。
.It ".TH" Ar name Ar section Ar date Xo
@ -239,57 +244,57 @@
を開始します。
第 3 引数
.Ar date
は、最近の変更日付です。
は、最終更新日です。
.Ar footer
が存在する場合、
これは左ページフッタテキストを指定します。さらに、
これは左側に表示されるページフッタテキストを指定します。さらに、
.Ar center
が存在する場合、
これはページ中央のヘッダテキストを指定します。このリクエストは、
マニュアルページのまさに最初のリクエストでなければなりません。
マニュアルページの一番最初のリクエストでなければなりません。
.It ".TP" Op Ar indent
次の行のテキストで指定するタグを持つタグ付きインデント状態のパラグラフを
開始します。引数
タグ付きのインデントされたパラグラフを
開始します。付加するタグはこのリクエストの次の行で指定します。引数
.Ar indent
が指定されると、これは通常インデント幅の新しい値を指定します。
このリクエストは強制的に行分割を引き起こします。
を指定すると、通常インデント幅の値を新しく指定できます。
このリクエストが実行されると、強制的に行分割が生じます。
.El
.Sh ページ構造
マニュアルページのほとんどは、以下に説明する概略に従うことが一般的です。
マニュアルページは、一般的に以下に説明する構造の概略に従うことがほとんどです。
.Bl -tag -width ".SH 名称"
.It ".TH" Ar title Op Ar section-number
マニュアルページの最初のマクロリクエストは、\&.TH である必要があります
このリクエストは、そのマニュアルページのタイトルと名称を確定します。
\&.TH リクエストは、マニュアルページのセクション番号も確定します。
マニュアルページの最初のマクロリクエストは、\&.TH でなくてはなりません
このリクエストを使用することで、マニュアルページのタイトルと名称が決定できます。
\&.TH リクエストは、マニュアルページのセクション番号も決定できます。
.It ".SH NAME"
コマンドを呼び出す際の名前、または名前のリストを置き、その後ろにダッシュ
コマンドを呼び出す名前、または名前のリストの後には、ダッシュ
.Pq Dq -
とコマンドの動作の要約を一行で続けます。このセクションには
.Nm troff
コマンド、エスケープシーケンス、マクロリクエストを一切置いてはいけません。
このセクションは
この部分は、
.Xr whatis 1
コマンドが使用するデータベースを生成するために使用されます。
.It ".SH SYNOPSIS"
説明するコマンドや関数の用法の簡単な要約を書きます。
.Bl -tag -width "Commands"
.Bl -tag -width "コマンド"
.It コマンド
コマンドと引数の構文を、コマンド行で入力するように記述します。その通りに
入力しなければならない語はボールド体で表します。引数は斜体で
コマンドと引数の構文を、コマンド行で入力するように記述します。書かれた通りに
入力しなければならない語はボールド体で表します。引数は斜体で
表します。このように引数とコマンド名を表す場合、たとえ文の始まりで
あっても、大文字にしてはいけません。
.Pp
構文上のシンボルとして使用するものはローマン体で表さねばなりません。
構文上のシンボルとして使用するものはローマン体で表さなくてはなりません。
.Bl -tag -width "XXX"
.It "[]"
角括弧は、オプション扱いの引数を表す際に使用します。
.It "|"
垂直バーは、複数から一つの排他的選択を表す際に使用します。垂直バーで区切った
垂直バーは、複数の選択肢から一つだけ選択することを表す際に使用します。垂直バーで区切った
リストの中の項目一つだけを選択すべきということです。
.It "..."
引数の後ろに省略符号を続ける場合、その引数が繰り返し指定可能で
あることを表します。括弧で囲んだ式の後ろに省略符号を続ける場合、
の式が繰り返し指定可能であることを表します。
あることを表します。括弧で囲んだ式の後ろに省略符号を続ける場合、
角括弧内の式が繰り返し指定可能であることを表します。
.El
.It 関数
必要なデータの宣言もしくは
@ -297,9 +302,9 @@
指示子を最初に置きます。その後ろに関数宣言を置きます。
.El
.It ".SH DESCRIPTION"
コマンドや関数の外部挙動の概要を記述します。そには、ファイルや
データとの相互作用、標準入力、標準出力、標準エラー出力がどのように
扱われるかが含まれます。通、内部挙動や実装の詳細をここでは示しません。
コマンドや関数の外部挙動の概要を記述します。そには、ファイルや
データとのやりとりや、標準入力、標準出力、標準エラー出力がどのように
扱われるかが含まれます。通、内部挙動や実装の詳細をここでは示しません。
このセクションで解くべき疑問は、「これはなにをするのか?」もしくは、
「これは何のためのものか?」です。
.Pp
@ -308,21 +313,21 @@
表さねばなりません。
.It ".SH OPTIONS"
オプションの一覧を、各オプションがコマンドの挙動にどのような
影響を与えるかの説明と共に与えます。
影響を与えるかの説明と共に与えます。
.It ".SH USAGE"
このセクションはオプションであり、サブコマンドの詳細な説明や、その
コマンドが理解する入力の文法を含めます。
.It ".SH RETURN VALUES"
あるライブラリルーチンが呼び出し元へ返しうる戻り値の一覧と、それらの
ライブラリルーチンが呼び出し元へ返しうる戻り値の一覧と、それらの
値が返る原因となる条件を記述します。
.It ".SH EXIT STATUS"
.\" WORD: exit status 終了状態
そのコマンドが終了状態 (exit status) として返す値の一覧と、それらの
.\" WORD: exit status 終了ステータス
そのコマンドが終了ステータス (exit status) として返す値の一覧と、それらの
値が返る原因となる条件を記述します。
.It ".SH FILES"
そのコマンドや関数に関連するファイルの一覧です。
.It ".SH SEE ALSO"
関連マニュアルページの一覧に続けて、他の刊行物への参照の一覧を、
関連マニュアルページの一覧に続けて、他の参考となる刊行物の一覧を、
コンマで区切って並べます。
.It ".SH DIAGNOSTICS"
診断メッセージと対応する説明の一覧です。

View file

@ -14,20 +14,20 @@
.Sh 解説
.Pp
セキュリティは、システム管理者とともに始まり、システム管理者と
ともに終る機能です。すべての
ともに終る機能です。
.Bx
システムは昔からマルチユーザに対応しています。セキュリティの仕組みを
システムは昔からすべてマルチユーザに対応しています。セキュリティの仕組みを
組み込んで維持することで、ユーザを
.Sq 正直に
し続ける仕事は、システム管理者の最も大きな責務の一つでしょう。マシンは、
管理者が設定しただけのセキュリティしか示しません。セキュリティに関する
問題は、むしろ、便利さを求める人間との競合問題です。一般に、
.Ux
システムは莫大な数のプロセスを同時に実行させることも、また、その多くを
サーバとして動作させることもできます。これは、外部の何者かが
接続してきて、サーバプロセスと会話することができるということ
意味します。昨日までのミニコンピュータとメインフレームは、今日では
デスクトップコンピュータとなり、かつ、それらはネットワークで結ばれて
システムは莫大な数のプロセスを同時に実行させることができ、
それも、サーバとして動作するものが多いのです。つまり、外部の何者かが
接続してきて、サーバプロセスと会話することができるということなのです。
昨日まで使われていたミニコンピュータやメインフレームは、今日では
デスクトップコンピュータが取って代わり、しかも、それらはネットワークで結ばれて
インターネットと接続されるようになりました。これにより、セキュリティは
昔と比べてはるかに大きな問題となっています。
.Pp
@ -45,33 +45,34 @@
.Pp
サービス不能攻撃とは、マシンから必要な資源を奪う行為です。
サービス不能攻撃は、普通は、そのマシンで実行されるサーバや
ネットワークスタックを圧倒して、マシンを使えなくしたりクラッシュさせようと
するような力任せの仕組みです。サービス不能攻撃のいくつかは、
ネットワークスタックを圧倒して、マシンをクラッシュさせたり、
さもなければマシンを使えなくしたりするような力任せの方法です。
サービス不能攻撃のいくつかは、
ネットワークスタックのバグを利用して、パケット一つでマシンを
クラッシュさせようとします。後者は、
カーネルにバグ修正を施すことによってのみ修正することができます。
サーバプロセスに対する攻撃は、サーバのオプションを適切に指定して、
逆境状況のシステムにおいて、サーバプロセスが引き起こす負荷に限界を設けることで
不利な状況にあるシステムにおいて、サーバプロセスが引き起こす負荷に限界を設けることで
修正することができます。これらに比べると、ネットワークへの力任せの攻撃への
対応はずっと難しくなります。たとえば、偽造パケットによる攻撃
.Pq spoof-packet attack
は、インターネットからシステムを切り離す以外の方法では、抑止することは
は、インターネットからシステムを切り離す以外の方法で防ぐことは
ほとんど不可能です。
.Pp
ユーザアカウントを危険に晒すことは、サービス不能攻撃よりは多少はありふれた
ものです。このご時勢でも、システム管理者の多くは、自分たちのマシンで
標準の telnetd, rlogind, rshd, ftpd サーバを実行させています。これらの
ユーザアカウントを危険に晒してしまう問題は、サービス不能攻撃よりもずっとよくある
問題です。このご時勢でも、自分たちのマシンで標準の telnetd, rlogind, rshd, ftpd
サーバを実行させているシステム管理者は多いのです。これらの
サーバは、デフォルトでは、暗号化されたコネクション上で動作していません。
その結果、抱えているユーザ数が標準的な大きさならば、リモート
.Pq そのシステムにログインするのに最も普通で便利な場所
からログインしているユーザのうち一人以上は、パスワードを覗き見られて
その結果、抱えているユーザ数が標準くらいであれば、リモートログイン
.Pq そのシステムにログインするには最も普通で便利な方法です
しているユーザのうち一人以上は、パスワードを覗き見られて
しまうでしょう。
システム管理者が注意深いならば、たとえログインが成功していたとしても、
システム管理者が注意深いならば、たとえログインが成功していたとしても、
リモートアクセスログをときどき解析して、疑わしいソースアドレスを探すものです。
.Pp
ひとたび攻撃者がユーザアカウントへのアクセス権を入手すると、攻撃者が
root の権限を破る可能性があることを仮定するべきです。しかし、
セキュリティを十分保ち、手入れの行き届いたシステムにおいては、
セキュリティを十分維持し、手入れの行き届いたシステムにおいては、
あるユーザアカウントへのアクセスが可能となっても、攻撃者に必ずしも
root へのアクセス権を与えるとは限らないのが現実です。この違いは重要です。
というのは、root へのアクセス権がなければ、一般的に、攻撃者は自分の
@ -84,7 +85,7 @@ root
しれません。攻撃者が root の権限で実行されるサーバのバグを見つけ、
ネットワークからそのサーバへ接続して root の権限を破ることができるかも
しれません。ひとたびユーザアカウントを破ると、ユーザアカウントから
root の権限を破ることが可能であるバグを持つ suid-root プログラムの
root の権限を破ることが可能であるというバグを持つ suid-root プログラムの
存在を、攻撃者は知っているかもしれません。
.Pp
セキュリティを改善する方法は、常に、
@ -117,10 +118,10 @@ root
危険に晒されていると仮定することです。root アカウントの安全性を確保する
ためには、ネットワーク越しに、あるいはどれか一般ユーザのアカウントから、
root のパスワードを使って root アカウントにログインすることが決して
できないことを確実にすることです。正しいパスワードが与えられようが
できないことを確することです。正しいパスワードが与えられようが
与えられまいが、telnetd, rlogind, その他ログイン処理を行なうサーバ
すべてで root でのログインを拒絶するように設定していないとするなら
今すぐそういうふうに設定して下さい。直接 root でログインできるのは、
すべてで root でのログインを拒絶するように設定していないのであれば
今すぐ必ず設定して下さい。直接 root でログインできるのは、
システムコンソールからだけにして下さい。ここで役に立つのが
.Sq /etc/ttys
ファイルです。ほとんどのシステムでは、デフォルトで安全ですが、
@ -141,11 +142,11 @@ wheel
与えてはいけません。スタッフは、
.Sq staff
かその類のグループに置き、その中で本当に root になる必要がある人
だけを wheel グループに加えるようにします。残念ながら、wheel の
仕組みだけだと、侵入者がパスワードファイルを手に入れると、攻撃者が
破る必要があるのは root のパスワードか、wheel グループにたまたま属す
staff アカウントの一つのパスワードだけです。wheel の仕組みは有益
ですが、wheel グループがまったく存在しない状況と比べてそれほど
だけを wheel グループに加えるようにします。しかし、残念ながら、wheel の
仕組みだけだと、侵入者は、パスワードファイルを手に入れるとルート権限を
破ることができてしまいます。攻撃者が破る必要があるのは root のパスワード
か、wheel グループにたまたま属するstaff アカウントのパスワードどれかひとつだけだからです。
wheel の仕組みは有益ですが、wheel グループがまったく存在しない状況と比べてそれほど
安全なわけではありません。
.Pp
root アカウントの安全性を高める間接的な方法として、別のログインアクセス
@ -167,96 +168,102 @@ root
安全性の高いログインの仕組みを使います。kerberos のような仕掛けを使う場合、
一般に、kerberos サーバを実行するマシンと自分のデスクトップ
ワークステーションとの安全性を確保しなければなりません。ssh で
公開鍵 / 秘密鍵の鍵の組を使う場合、一般に、ログイン元マシン
公開鍵 / 秘密鍵の組を使う場合、一般に、ログイン元マシン
.Pq 通常は自分のワークステーション
の安全性を確保しなければなりません。ここで、
.Xr ssh-keygen 1
で鍵の組を生成する際、鍵の組をパスワードで防御することにより、
鍵の組を防護するための層を追加することもできます。スタッフアカウントの
パスワードを\ * で外すことができることにより、スタッフメンバが
管理者自身が設定した安全性の高い方法でのみログインできることも保証
できます。かくして、多くの侵入者が使う重大なセキュリティの穴
公開鍵 / 秘密鍵の組を生成する際、鍵の組をパスワードで防御することにより、
鍵の組への防御層を追加することもできます。スタッフアカウントの
パスワードを\ * で外すことができると、管理者自身が設定
した安全性の高い方法でしかスタッフメンバがログインできないことも保証
できます。こうして、多くの侵入者が使う重大なセキュリティの穴
.Pq 安全性の低い無関係なマシンからネットワークを覗き見る方法
のないセッションを提供する、安全性の高い暗号化されたコネクションを
使うことを、すべてのスタッフメンバに強制することができるのです。
を塞ぐようなセッションを提供する、安全性の高い暗号化されたコ
ネクションを使うことを、スタッフメンバ全員に強制することができ
るのです。
.Pp
より間接的なセキュリティの仕組みは、より制限の強いサーバから制限の弱い
サーバへログインすることを前提としています。例えば、主マシンで、
すべての種類のサーバを実行させている場合、ワークステーションではそれらの
サーバを実行させてはなりません。ワークステーションの安全性を比較的
高めておくためには、実行するサーバの数を、果てはサーバなしまで、
できるだけ減らしておくべきです。また、パスワード防護された
スクリーンセーバを走らせておくべきです。
ワークステーションへの物理的アクセスが与えられたとすると、攻撃者は
管理者が設定したいかなる種類のセキュリティをもうち破ることができるのは
もちろんのことです。これは、管理者として考えておかねばならない決定的な
問題ですが、システム破りの大多数は、ネットワーク経由でリモートから、
ワークステーションやサーバへの物理的アクセス手段を持たない人々によって
行なわれるという事実も、また、念頭に置いておく必要があります。
より間接的なセキュリティの仕組みでは、制限の強いサーバから制限の弱い
サーバへログインすることを前提としています。例えば、メインマシンで、
様々な種類のサーバを実行させている場合、ワークステーションではそれらの
サーバを実行させてはなりません。ワークステーションを十分に
安全にしておくためには、実行するサーバの数を、一つもサーバ
が実行されていないというくらいにまでできる限り減らすべきです。
また、パスワードで保護されたスクリーンセーバを走らせておくべきです。
ワークステーションへの物理的アクセスが与えられたとすると、もちろん
言うまでもなく、攻撃者は管理者が設定したいかなる種類のセキュリティ
をもうち破ることができるのです。これは、管理者として必ず考えておか
ねばならない問題ですが、システム破りの大多数は、ネットワーク経由で
リモートから、ワークステーションやサーバへの物理的アクセス手段を持
たない人々によって行われるという事実もまた、念頭に置いておく必要
があります。
.Pp
kerberos のような方法を使うことで、スタッフアカウントのパスワードの変更
もしくは停止を一箇所で行なうことと、スタッフメンバがアカウントを持つ
すべてのマシンに即時にその効果を及ぼすことが可能となります。スタッフメンバの
アカウントが危険に晒されたときに、すべてのマシンでその人のパスワードを
即座に変更する機能を甘く見てはいけません。パスワードが分散されていると
N 台のマシンでパスワードを変更することは、てんやわんやの事態を招く可能性が
あります。kerberos による再パスワード制限
アカウントが危険に晒されたときに、すべてのマシンでスタッフメンバのパスワードを
即座に変更する能力を過小評価してはいけません。パスワードが分散されている状況では
N 台のマシンでパスワードを変更する、てんやわんやの事態を招く可能性が
あります。kerberos を使用すると、パスワードの再発行に制限
.Pq re-passwording restriction
を課することもできます。これを使うことにより可能となることは
ある kerberos チケットをしばらくしてからタイムアウトにすることだけでなく、
kerberos システムがユーザに一定期間
を課することもできます。この機能を使うことにより
ある kerberos チケットをしばらく経つとタイムアウトにすることが
できるだけでなく、一定期間
.Pq 例えば、1 ヶ月に 1
の後に新しいパスワードを選ぶことを要求することもできます。
経つと、ユーザに新しいパスワードを選ぶように要求することもできます。
.Sh root の安全性を高める - root 権限のサーバと suid/sgid バイナリ
.Pp
用心深いシステム管理者は、自分に必要なサーバプロセスだけを過不足なく
実行させるものです。第三者製のサーバはしばしばバグの温床であることに
注意して下さい。例えば、古いバージョンの imapd や popper を実行させ
ておくということは、全世界に共通の root の切符を与えているようなものです。
実行させるものです。第三者製のサーバは、よくバグを持っていがちだと
いうことに注意して下さい。例えば、古いバージョンの imapd や popper
を実行させておくのは、全世界に共通の root の切符を与えてい
るようなものです。
自分で注意深くチェックしていないサーバは、決して実行してはいけません。
サーバの多くは root で実行させる必要はありません。例えば、ntalk, comsat,
root で実行させる必要のあるサーバはほとんどありません。例えば、ntalk, comsat,
finger デーモンを、特別の「砂場
.Pq sandbox
」ユーザで実行させることができます。
.\"kuma hellofalot of trouble って何や?
.\" hell of a lot of trouble みたいですね。;-) (金ん田 '99.02.11)
管理者が膨大な数の問題に直面しない限り、砂場は完璧では
管理者が膨大な数の問題に直面していないのなら、この「砂場」は完璧では
ありませんが、セキュリティに関するタマネギ的アプローチはここでも
成り立ちます。砂場で実行されているサーバプロセスを経由して侵入を
果たすことができたとしても、攻撃者はさらに砂場から外に脱出しなければ
なりません。攻撃者が通過せねばならない層の数が増えれば増えるほど、
それだけ攻撃者が侵入に成功する確率が減ります。root の抜け穴は
歴史的に、基本システムサーバも含め、
root 権限で実行されるほとんどすべてのサーバプロセス発見されています。
root 権限で実行されるほとんどすべてのサーバプロセス発見されています。
ユーザが sshd 経由でのみログインし、
telnetd, rshd, rlogind 経由でログインすること
が決してないマシンをお使いなら、それらのサービスを停止させて下さい。
が決してないマシンを稼働させているのであれば、それらのサービスを停止させて下さい。
.Pp
.Bx Free
では、今では ntalkd, comsat, finger は砂場で実行させることが
デフォルトになっています。次に砂場で実行させるべきプログラムの候補として、
.Xr named 8
があります。デフォルトの rc.conf ファイルには、named を砂場で実行する
ために必要な引数がコメントアウトされた形式で含められています。新しい
ために必要な引数がコメントアウトされた形式で含れています。新しい
システムをインストールしているか、それとも既存のシステムを
アップグレードして使っているかに依存しますが、砂場として使用する
特別のユーザアカウントがインストールされていないかもしれません。用心深い
システム管理者は研究を怠らず、可能なところではつねにサーバに砂場を仕込む
ものです
特別のユーザアカウントがインストールされていないかもしれません。
用心深いシステム管理者であれば、できるだけいつでも研究を怠らず、
サーバに砂場を仕込むものでしょう
.Pp
通常、砂場で実行しないサーバが他にいくつかあります。sendmail, popper,
imapd, ftpd などです。これらのうちいくつかには代わりがありますが、
imapd, ftpd などです。これらのうちいくつかのサーバには代わりとなるも
のがありますが、
代わりのものをインストールするには、それだけ多くの仕事が必要になるので、
結局これらを喜んで入れてしまいます
.Pq 簡単度がまたも勝利を収めるわけです
.Pq 便利さという要素がまたも勝利を収めるわけです
これらのサーバは、root 権限で実行せねばならず、これら経由で生じる侵入の
検出のためには、他の仕組みに依存せねばならないかもしれません。
これらのサーバは、root 権限で実行せねばならいかもしれません。また、
これらのサーバ経由で生じる侵入
を検出するためには、他の仕組みに頼らなくてはならないかもしれません。
.Pp
システムの root 権限の潜在的な穴で他に大きなものとして、システムに
インストールされた suid-root/sgid バイナリがあります。rlogin など、
これらのバイナリのほとんどは、/bin, /sbin, /usr/bin, /usr/sbin に
存在します。100% 安全なものは存在しないとはいえ、システムデフォルトの
インストールされた suid-root/sgid バイナリがあります。
これらのバイナリは、rloginのように、
/bin, /sbin, /usr/bin, /usr/sbin に
存在するものがほとんどです。100% 安全なものは存在しないとはいえ、システムデフォルトの
siud/sgid バイナリは比較的安全といえます。それでもなお、root の穴が
これらのバイナリにときおり発見されています。1998 年に Xlib で見つかった
root の穴は、xterm
@ -265,10 +272,11 @@ root
安全である方がよいので、用心深いシステム管理者は残念に思いながらも、
スタッフのみが実行する必要がある suid バイナリは、スタッフのみが
アクセス可能な特別なグループに含めるように制限を加え、
誰も使わない suid バイナリは chmod 000 して片付けてしまうでしょう。
誰も使わない suid バイナリは chmod 000 を実行して片付けてしまうで
しょう。
ディスプレイを持たないサーバは、一般的に xterm のバイナリを必要としません。
sgid バイナリもほとんど同様の危険な存在になり得ます。
侵入者が sgid-kmem のバイナリを破ることができた場合、
侵入者が kmem に sgid されたバイナリを破ることができた場合、
その侵入者は /dev/kmem を読み出すことができるようになります。
つまり、暗号化されたパスワードファイルを読み出すことができる
ようになるので、パスワードを持つどのアカウントをも、
@ -286,11 +294,12 @@ tty
スタッフに対して、アテナイのドラコのような厳格なアクセス制限を課し、
スタッフのパスワードを\ * で外すことができるとはいえ、管理者が持ちうる
一般ユーザすべてのアカウントに対して同じことはできないかも知れません。
十分な管理を保つならば、管理者は勝利し、ユーザの
アカウントを適切な状態で安全を確保できるかもしれません。それが
保てないならば、一般ユーザのアカウントをモニタしていっそう気を配るように
するしかありません。一般ユーザアカウントでの ssh や kerberos の利用は、
いろいろ問題をはらんでいます。それでも、暗号化パスワードと比較すると、
管理者が十分に統率をとることができるなら、管理者は勝利し、ユーザの
アカウントの安全を適切に確保できるかもしれません。それが
できないならば、よりいっそう気を配って一般ユーザのアカウントを
監視するよりほかありません。一般ユーザアカウントに対し
ssh や kerberos を利用することには、いろいろと問題があります。
それでも、暗号化パスワードと比較すると、
はるかに良い解です。
.Sh パスワードファイルの安全性を高める
.Pp
@ -299,31 +308,31 @@ ssh
パスワードファイル
.Pq /etc/spwd.db
が root でのみ読み出し可能だとしても、
たとえ root の書き込み権限が得られないにしても、侵入者がそのファイルの
読み出しアクセス権限を得ることは可能かも知れません。
侵入者がそのファイルの読み出しアクセス権限を得ることは可能かもしれません。たとえ root の書き込み権限が得られないにしてもです。
.Pp
セキュリティスクリプトは常にパスワードファイルの変更をチェックし、報告
するようにすべきです (後述の「ファイルの完全性のチェック」を参照して下さい)。
するようにすべきです。
.Pq 後述の「ファイルの完全性のチェック」を参照して下さい。
.Sh カーネルのコア、raw デバイス、ファイルシステムの安全性を高める
.Pp
root の権限を破ると、攻撃者はほとんど何でもできますが、
もっと簡便なこともいくつかあります。例えば、最近のカーネルのほとんどでは、
root の権限を破ると、攻撃者は何でもできますが、
もっと簡便なこともいくつかあります。例えば、最近のカーネルは、
組み込みのパケット覗き見デバイス
.Pq packet sniffing device
ドライバを備えていす。
ドライバを備えているものがほとんどです。
.Bx Free
では
.Sq bpf
デバイスと呼ばれています。侵入者は普通、危険に晒された
マシンでパケット覗き見プログラムを実行させようと試みます。侵入者に
わざわざそういう機能を提供する必要はないので、ほとんどのシステムで bpf
デバイスを組み込むべきではありません。不幸なことに、ローダブルカーネル
デバイスを組み込むべきではありません。しかし、不幸なことに、最近のカーネルのもう一つの特徴として、ローダブルカーネル
モジュール
.Pq Loadable Kernel Module:LKM
インタフェースと呼ばれる
カーネル機能があります。やる気まんまんの侵入者は、LKM を使って
機能があります。やる気まんまんの侵入者は、LKM を使って
自分独自の bpf もしくはその他覗き見デバイスを動作中のカーネルに
インストールすることが可能です。
インストールすることができます。
モジュールローダを使う必要がないのであれば、カーネル設定で
NO_LKM オプションを設定してこの機能を無効にして下さい。
.Pp
@ -339,7 +348,7 @@ raw
.Sq schg
のような
特別な chflags フラグが効果を発揮します。これに加えて、
起動において重要なバイナリ・ディレクトリ・スクリプトファイルなど、
起動において重要なバイナリ・ディレクトリ・スクリプトファイルなど、
安全レベルが設定されるまでの間に実行されるものすべてに対しても
.Sq schg
フラグを確実に on にしておく必要があります。この設定をやり過ぎても
@ -349,8 +358,8 @@ raw
ディレクトリに schg フラグを設定しないという妥協をする方法もあります。
.Sh ファイルの完全性のチェック: バイナリ、設定ファイルなど
.Pp
ことここに至るとシステム管理者にできることは、
便利がその醜い頭を上げない程度に、
ことこの問題に至ると、システム管理者にできることは、
便利さという要素がその醜い頭を上げない程度に、
コアシステムの設定 / 制御ファイルを防御することだけです。
セキュリティのタマネギの最後の層はおそらく最も重要なもの、すなわち探知です。
.Pp
@ -358,7 +367,7 @@ raw
システム経由で行なう方法だけです。
.Sq 安全
なシステムを準備することは比較的
容易です。単に、サービスを一切実行しないようにするだけです。安全なシステム
容易です。単にそのシステム上で、サービスを一切実行しないようにするだけです。安全なシステム
を用いて、ssh 経由で他のシステムの root 空間にアクセスします。これは
セキュリティの末端のように見えるかもしれません。しかし、管理者には信頼を
どこかに置く必要があります。いきあたりばったりでサーバプロセスを
@ -366,8 +375,7 @@ raw
ことは本当に可能です。ここで
.Sq 安全
という場合、物理アクセスに対する
セキュリティをも含めて仮定していることはもちろんです。安全なマシンで、
他のすべてのマシンに root のアクセス権限を持つものが得られると、
セキュリティをも含めて仮定していることはもちろんです。他のすべてのマシンに root のアクセス権限を持つ、安全なマシンがあれば、
「安全なマシンの上で」システムの他のマシンをチェックする
セキュリティスクリプトを書くことができるようになります。
最も普通のチェック方法は、セキュリティスクリプトで、
@ -378,75 +386,76 @@ raw
.Pq もしくは、少なくとも /, /var, /usr パーティション!
に対して md5 を適用するシェルコマンドを
ssh を使ってリモートマシンで実行するものです。
安全なマシンは、チェック結果をファイルにコピーし、前回のチェック結果と
diff を取り
.Pq または、安全なマシン自身のバイナリと比較する
違いを
毎日のレポートとしてスタッフメンバひとりひとりにメールを送ります。
安全なマシンは、チェック結果をファイルにコピーし、前回のチェック結果との差分を取り
.Pq または、安全なマシン自身が持っているバイナリと比較する
、その差分を
毎日のレポートとしてスタッフメンバひとりひとりにメールで送ります。
.Pp
この種のチェックを行なうもう一つの方法として、安全なマシンに対して、
他のマシンの主なファイルシステムを NFS export する方法があります。
この種のチェックを行うもう一つの方法として、
他のマシンから主なファイルシステムを 安全なマシンにNFS export
する方法があります。
このやり方はいくらかネットワークに負荷を掛けることになりますが、
侵入者がチェックを探知したり偽造したりすることは、
事実上不可能になります。
.Pp
優れたセキュリティスクリプトは、一般ユーザやスタッフメンバのアクセス制御
ファイル: .rhosts, .shosts, .ssh/authorized_keys など、MD5 での精細な
チェックから洩れそうなファイルの変更をチェックします。
チェックから洩れそうなファイルの変更もチェックするようにします。
.Pp
優れたセキュリティスクリプトは、すべてのファイルシステム上で suid/sgid
バイナリに対してチェックを行ない、前回のチェック結果もしくは何らかの
バイナリのチェックを行い、前回のチェック結果もしくは何らかの
基準
.Pq "例えば、基準を週 1 回にする"
.Pq 例えば、その基準を週 1 回作成する。
からの差分だけでなく、
それらの存在そのものを報告するものです。
それらバイナリの存在そのものを報告するものです。
.Sq nosuid
オプションを
fstab/mount で指定することで、あるファイルシステム上の suid/sgid
バイナリの実行機能をオフにすることができますが、root によるこれら
実行をオフにすることはできません。さらに、root 権限を破った者は誰でも
バイナリの実行機能をオフにすることができますが、root によるこれら
バイナリの実行をオフにすることはできません。さらに、root 権限を破った者は誰でも
自分自身で用意したバイナリをインストールすることだってできます。
しかしながら、ユーザのディスク空間を大量に持つ場合、
ユーザパーティションで suid バイナリとデバイス
.Po
.Sq nodev
オプション
.Pc
を不許可にしておき、スキャンしないで済ませることも有益かもしれません。
それでも、私ならば、少なくとも週に 1 回はスキャンする
でしょう。というのは、タマネギのこの層の目的は侵入の検知だからです。
ユーザパーティション上で suid されたバイナリとデバイスを不許可に
しておき
('nodev' オプション)、
そのパーティションをスキャンしないで済ませることも有益かもしれません。
それでも私ならば、ともかく、少なくとも週に 1 回はスキャンする
でしょう。というのは、タマネギのこの層の目的は侵入を検知すること
だからです。
.Pp
プロセスアカウンティング
.Po
.Xr accton 1
参照
.Pc
は、侵入後の評価の仕組みとして利用をお勧めする、
比較的オーバヘッドの低いオペレーティングシステムの機能です。
侵入を受けた後でも当該ファイルが無傷であるとするなら、
侵入者が実際のところどのようにしてシステムの root を破ったかを
追跡するのに際して特に有益です。
は、比較的オーバヘッドの低いオペレーティングシステムの機能で、
マシンに侵入されてしまった後の評価の仕組みとして使用することをお勧め
します。
侵入を受けた後でも当該ファイルが無傷である場合に、
侵入者が実際にどのようにしてシステムの root を破ったかを
追跡するのに特に有益です。
.Pp
最後に、セキュリティスクリプトはログファイルを処理するようにし
ログファイル自体できるだけ安全性の高い方法で
(リモート syslog は極めて有益になり得ます)
最後に、セキュリティスクリプトはログファイルを処理するようにし、
ログファイル自体できるだけ安全性の高い方法で
.Sq リモート syslog は極めて有益になり得ます
生成するようにすべきです。侵入者は自分の侵入の痕跡を覆い隠そう
としますし、ログファイルはシステム管理者が最初の侵入の時刻と方法を
追跡してゆくために極めて重要です。
としますし、また、ログファイルはシステム管理者が最初の侵入の時
刻と方法を追跡してゆくために極めて重要です。
.Sh 偏執狂的方法
.Pp
多少偏執狂的になっても決して悪いことにはなりません。原則的に、
システム管理者は、便利さに影響を与えない範囲でいくつでもセキュリティ
機能を追加することができます。また、いくらか考慮した結果、便利さに
影響を与えるセキュリティ機能を追加することもできます。
.Sh サービス不能攻撃 (D.O.S attack) についての特記事項
.Sh サービス不能攻撃 (D.O.S. attack) についての特記事項
.Pp
このセクションではサービス不能攻撃を扱います。サービス不能攻撃は、普通は、
パケット攻撃です。ネットワークを飽和させる最先端の偽造パケット
.Pq spoofed packet
攻撃に対してシステム管理者が打てる手はそれほど多く
ありませんが、一般的に、その種の攻撃がサーバをダウンさせないことを
確実にすることで、被害を制限することはできます。
ありませんが、一般的に、その種の攻撃によってサーバがダウン
しないことを確実にすることで、被害をある限度に食い止める
ことはできます。
.Bl -enum -offset indent
.It
サーバの fork の制限
@ -467,8 +476,8 @@ inetd
.Pc
には、この種の攻撃を制限するオプションがいくつかあります。マシンが
ダウンすることを防止することは可能ですが、この種の攻撃によりサービスが
崩壊することを防止することは一般的に可能とは限らないことに注意する必要が
あります。inetd のマニュアルページを注意深く読んで下さい。とくに、
崩壊することを防止することは一般的に言ってできないことに注意する必要が
あります。inetd のマニュアルページを注意深く読んで下さい。に、
.Fl c ,
.Fl C ,
.Fl R
@ -476,9 +485,9 @@ inetd
.Pq spoofed-IP attack
は inetd の
.Fl C
オプションを出し抜くので、普通はオプションを
オプションの裏をかけるので、一般にオプションを
組み合わせて使用するべきであることに注意して下さい。スタンドアロンサーバ
いくつかは、自己の fork 上限のパラメータを持っています。
中には、自分自身で fork を制限するパラメータを持っているものがあります。
.Pp
sendmail には、
.Fl OMaxDaemonChildren
@ -494,21 +503,21 @@ sendmail
sendmail をキュー処理モード
.Pq Fl ODeliveryMode=queued
で実行することや、
デーモン
sendmail デーモン
.Pq Cm sendmail -bd
をキュー処理用
をキュー処理用プロセス
.Pq Cm sendmail -q15m
と別に実行すること用心深いことと言えます。それでもなおリアルタイムでの
と別に実行することも、用心深いことと言えます。それでもなおリアルタイムでの
配送を望むのであれば、
.Fl q1m
のように、キュー処理をはるかに短い時間間隔で
うことができます。いずれにしても、
のようにすることで、キュー処理をはるかに短い時間間隔で
行うことができます。いずれにしても、
.Cm MaxDaemonChildren
オプションに
合理的な値を確実に指定して、sendmail がなだれをうって失敗することが
ないようにして下さい。
.Pp
syslogd は直接攻撃される可能性があるので、可能ならば
syslogd は直接攻撃される可能性があるので、可能ならばいつでも
.Fl s
オプションを用いることを強く推奨します。これができないなら、
.Fl a
@ -516,15 +525,15 @@ syslogd
.Pp
tcpwrapper の逆 identd などの接続返し
.Pq connect-back
を行うサービスに
ついては十分注意を払うようにするべきです。これらは直接攻撃を食らう可能性が
を行うサービスに
ついては十分注意を払うようにするべきです。これらは直接攻撃を受ける可能性が
あります。こういう事情があるので、tcpwrapper の逆 ident 機能を使おうとは
思わないのが一般的なところです。
思わないのが一般的です。
.Pp
境界ルータのところでファイアウォールを設けて、外部からのアクセスに対して
内部サービスを防御することは実によい考えです。この考え方は、LAN の外
からの飽和攻撃を防ぐことにあり、root からのネットワークベースの root
権限への攻撃から内部サービスを防御することに、あまり考慮を払って
内部サービスを防御するという考えは実によいものです。この考えは、LAN の外部
からの飽和攻撃を防ぐことにあり、root ネットワークベースの root
権限への攻撃から内部サービスを防御することに、あまり考慮を払って
いません。ファイアウォールは常に排他的に設定して下さい。つまり、
「ポート A, B, C, D と M から Z まで
.Eo *
@ -532,16 +541,15 @@ tcpwrapper
.Ec *
のすべてに防火壁を設ける」というふうにです。
このようにすることで、named
.Pq そこがゾーンのプライマリである場合 ,
.Pq ゾーンのプライマリである場合 ,
ntalkd, sendmail など、インターネットにアクセスを提供するサービス
として特に指定するもの以外の、すべての低めのポートをファイアウォールで
停止することができます。ファイアウォールをこの他のやり方、つまり
として特に指定するもの以外の、小さい番号のポートすべてをファイアウォールで
防御することができます。ファイアウォールをこの他のやり方、つまり
包含的もしくは受容的なファイアウォールとして設定しようとする場合、
いくつかのサービスを
.Sq close
することを忘れたり、新しい内部サービスを
追加してファイアウォールの更新を忘れたりすることはよくあります。
ファイアウォールの高めの範囲のポートを開けておいて、低めのポートを
することを忘れてしまうサービスがいくつか出てきたり、新しい内部サービスを
追加したのにファイアウォールの更新を忘れたりする可能性がよく出てきます。
ファイアウォール上の大きい番号のポートを開けておいて、小さい番号のポートを
危険に晒すことなく受容的な動作を許すことができます。
.Bx Free
では、net.inet.ip.portrange への sysctl
@ -549,23 +557,22 @@ ntalkd, sendmail
をいろいろ使用することで、
動的バインドに使用されるポート番号の範囲を制御できることを記憶にとどめて
おいて下さい。これによりファイアウォールの設定の複雑性を緩和できます。
私は、ファイアウォールに通常の範囲として、first/last が 4000 から 5000 を、
高位ポートの範囲として、49152 から 65535 を使用しています。さらに
.Pq いくつかのインターネットアクセス可能なポートを除くのはもちろんですが
私は、ファイアウォールに通常のfirst/last の範囲として、 4000 から 5000 を、
高位ポートの範囲として、49152 から 65535 を使用しています。そして
.Pq いくつかのインターネットアクセス可能なポートをブロックから除外するのはもちろんですが
4000 より下のすべてをブロックしています。
.Pp
また別のありふれたサービス不能攻撃として、踏み台攻撃
.Pq springboard attack
と呼ばれるものがあります。これは、サーバが自分自身、ローカルネットワーク、
他のマシンを過負荷に追い込むような応答を生成させる方法でサーバを
そして他のマシンを過負荷に追い込むような応答を生成させる方法でサーバを
攻撃します。この種の攻撃の中で最もありふれたものは、ICMP PING BROADCAST
攻撃があります。攻撃者は、実際に攻撃したいマシンのアドレスをソース
アドレスに設定した ping パケットを偽造して、対象の LAN の
ブロードキャストアドレスに対して送信します。境界にあるルータが
ブロードキャストアドレスに対する ping を握り潰すように設定されていない
場合、犠牲者を飽和させるのに十分な応答が、詐称されたソースアドレスに
対して生成され、LAN に嵐がまき起こります。攻撃者が同じトリックを
多くの異なるネットワークにまたがる多くのブロードキャスト
ブロードキャストアドレスに向けてパケットを送信します。境界にあるルータが
ブロードキャストアドレスに対する ping パケットを握り潰すように設定されていない
場合、LANは、詐称されたソースアドレスに向けて応答パケットを生成するはめになり、犠牲となるマシンが飽和するところまで行ってしまいます。攻撃者が同じトリックを
異なるネットワーク上のいくつものブロードキャスト
アドレスに対して同時に使用した場合、とくにひどいことになります。
これまでに、120 メガビット以上のブロードキャスト攻撃が観測されています。
2 番目の踏み台攻撃は、ICMP エラー報告の仕掛けを狙うものです。ICMP エラー
@ -574,17 +581,17 @@ ntalkd, sendmail
ネットワークを ICMP 応答で飽和させるようにすることができます。
mbuf を消費し尽くさせることにより、この種の攻撃でサーバを
クラッシュさせることも可能です。サーバの ICMP 応答生成が速過ぎて、
ICMP 応答を送信し尽くすことができない場合、とくにひどいことになります。
ICMP 応答の送信が追い付かない場合、とくにひどいことになります。
.Bx Free
カーネルには、この種の攻撃の効果を抑制する ICMP_BANDLIM と
呼ばれる新しいコンパイルオプションがあります。
3つめの主要なクラスに属す踏み台攻撃は、udp echo サービスのよう
ある種の内部 inetd サービスに関連するものです。攻撃者は単に
3つめの主要なクラスに属す踏み台攻撃は、udp echo サービスのような、
ある種の内部 inetd サービスに関連するものです。攻撃者は単に
ソースアドレスがサーバ A の echo ポートであり、ディスティネーション
アドレスがサーバ B の echo ポートであるかのように UDP パケットを
偽造します。ここでサーバ A, B はともに自分の LAN に接続されています。
この 2 つのサーバは、この一つのパケットを両者の間で互いに相手に対して
打ち返しあいます。このようにしていくつかのパケットを注入することで、
打ち返しあいます。このようにしてパケットをいくつか注入するだけで、
攻撃者は両方のサーバと LAN を過負荷状態にすることができます。
同様の問題が内部 chargen ポートにも存在します。有能なシステム管理者は
この手の inetd 内部テストサービスのすべてを無効にしておくものです。
@ -600,15 +607,16 @@ ICMP
検知すると、カーネルは動的に rtexpire を減らしますが、rtminexpire より
小さくなるようには決して減らしません。ここに問題が 2 つあります。
(1) 負荷の軽いサーバが突然攻撃された場合、カーネルが十分素早く反応
しないこと。(2) カーネルが攻撃に耐え生き延びられるほど十分
rtminexpire が低くなっていないこと。自分のサーバが T3 もしくはそれより
できないこと。(2) カーネルが攻撃に耐え生き延びられるほど十分
rtminexpire が低く設定されていないこと。の2つです。
自分のサーバが T3 もしくはそれより
良質の回線でインターネットに接続されている場合、
.Xr sysctl 8
を用いて rtexpire と rtminexpire とを手動で上書きしておくことが思慮深いこと
といえます。
.Pq 自分のマシンをクラッシュさせたくない限りは:-
どちらか 0 に
するようなことは決してしないで下さい。両パラメータを 2 秒に設定すれば、
.Pq 自分のマシンをクラッシュさせたくないのであれば:-)
どちらか一方でも 0 に
は決してしないで下さい。両パラメータを 2 秒に設定すれば、
攻撃から経路情報テーブルを守るには十分でしょう。
.Sh 関連項目

View file

@ -121,6 +121,6 @@ ernie::25:30::0:0:Ernie Kovacs,508 Evans Hall,x7925,
記憶するべきです。
.Sh 歴史
.Nm
プロシージャ
手続き
.Bx 3.0
から導入されました.

View file

@ -70,7 +70,8 @@ NIS
.Pp
.Nm
は、普通の NIS ユーザが、自分の NIS パスワード・
('GECOS'フィールドとして知られている)フルネーム・シェルを変更することを許します。
('GECOS'フィールドとして知られている) フルネーム・
シェルを変更することを許します。
これらの更新は、典型的には
.Xr yppasswd 1 ,
.Xr ypchfn 1 ,
@ -89,7 +90,7 @@ NIS
.Nm
サーバは、
.Xr ypserv 8
と同じアクセス制御機構を使います。)に照らして、
と同じアクセス制御機構を使います。) に照らして、
要求を行ったクライアントのアドレスを比較します。
.Pp
サーバは、その後ユーザが入力した '古い' パスワードが有効かどうかを
@ -100,7 +101,7 @@ NIS
.Pa /var/yp/master.passwd
です) を更新し、その後 NIS マップを再構築するために
.Pa /usr/libexec/yppwupdate
スクリプトを実行します。(このスクリプトは、つの引数を受け取ります:
スクリプトを実行します。(このスクリプトは、2 つの引数を受け取ります:
それらは変更されたパスワードテンプレートの相対パス名と更新された
ドメインの名前です。これらは、
.Pa /var/yp/Makefile
@ -151,7 +152,7 @@ NIS
を呼び出します。
.It Fl d Ar domain
.Nm
サーバは複数のドメインを扱うことができますが、つのドメインを
サーバは複数のドメインを扱うことができますが、1 つのドメインを
デフォルトとして選ばなければなりません。
.Xr domainname 1
コマンドによって設定されたシステムデフォルトのドメイン名を
@ -187,7 +188,7 @@ NIS
.Xr ypserv 8
は同時にいくつかのドメインを扱うことができますが、ほとんどの
.Nm
実装では、つの NIS ドメインだけしか扱うことができません。
実装では、1 つの NIS ドメインだけしか扱うことができません。
これは、一般に NIS マスタサーバのシステムデフォルトドメインと同じです。
.Bx Free
@ -303,7 +304,7 @@ NIS
.Xr ypxfr 8
.Sh バグ
yppasswd.x プロトコル定義で記述されているように、
YPPASSWDPROC_UPDATE プロシジャは二つの引数を取ります。
YPPASSWDPROC_UPDATE 手続きは 2 つの引数を取ります。
更新するユーザ情報を含む V7 形式のパスワード構造および、
ユーザの暗号化されない (クリアテキスト) パスワードです。
.Nm

View file

@ -141,7 +141,7 @@ domain/server
にブロードキャストではなく、
「メニーキャスト(many-cast)」を使用させます。
メニーキャストモードでは、制限されたリストで指定されるサーバの
YPPROC_DOMAIN_NONACK プロシジャに対して直接通信し、
YPPROC_DOMAIN_NONACK 手続きに対して直接通信し、
最も速く返答したサーバに対してバインドします。
NIS サーバがローカルにない NIS クライアントにおいて、
このモードが有用です。