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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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