diff --git a/ja/man/man1/rpcgen.1 b/ja/man/man1/rpcgen.1 index 5aab4e10ee..d961ad9529 100644 --- a/ja/man/man1/rpcgen.1 +++ b/ja/man/man1/rpcgen.1 @@ -1,506 +1,506 @@ .\" @(#)rpcgen.1 1.35 93/06/02 SMI .\" Copyright 1985-1993 Sun Microsystems, Inc. .\" jpman %Id: rpcgen.1,v 1.2 1997/06/08 13:49:19 jsakai Stab % .Dd March 28, 1993 .Dt RPCGEN 1 .Os .Sh 名称 .Nm rpcgen .Nd RPC プロトコルコンパイラ .Sh 書式 .Nm rpcgen .Ar infile .Nm rpcgen .Op Fl a .Op Fl b .Op Fl C .Oo .Fl D Ns Ar name Ns Op Ar =value .Oc .Op Fl i Ar size .Op Fl I Op Fl K Ar seconds .Op Fl L .Op Fl M .Op Fl N .Op Fl T .Op Fl Y Ar pathname .Ar infile .Nm rpcgen .Oo .Fl c | .Fl h | .Fl l | .Fl m | .Fl t | .Fl \&Sc | .Fl \&Ss | .Fl \&Sm .Oc .Op Fl o Ar outfile .Op Ar infile .Nm rpcgen .Op Fl s Ar nettype .Op Fl o Ar outfile .Op Ar infile .Nm rpcgen .Op Fl n Ar netid .Op Fl o Ar outfile .Op Ar infile .\" .SH AVAILABILITY .\" .LP .\" SUNWcsu .Sh 解説 .Nm rpcgen は、ある .Tn RPC プロトコルを実現する C コードを生成するツールです。 .Nm への入力は、 .Tn RPC -言語 (リモートプロシージャコール言語) として知られる、 +言語 (遠隔手続き呼び出し言語; Remote Procedure Call Language) として知られる、 C 言語に類似した言語です。 .Pp .Nm rpcgen は通常第 1 の書式で使用され、 1 つの入力ファイルから 4 つの出力ファイルを生成します。 .\" ↑原文では three output files となっているが、すぐ後ろで 4 つ列挙している。 .\" 原文の誤りと思われる。 97/06/08 J.Sakai 入力ファイル .Ar infile が .Pa proto.x であるとすると、 .Nm はヘッダファイル .Pa proto.h 、 XDR ルーチンファイル .Pa proto_xdr.c 、 サーバ側スタブ .Pa proto_svc.c 、 クライアント側スタブ .Pa proto_clnt.c を作成します。 .Fl T オプションを指定すると、上記に加え、 .Tn RPC ディスパッチテーブル .Pa proto_tbl.i も作成します。 .Pp .Nm rpcgen はまた、特定アプリケーション向けにカスタマイズ可能な クライアントおよびサーバのサンプルファイルも生成できます。 オプション .Fl \&Sc , .Fl \&Ss , .Fl \&Sm によってそれぞれ、サンプルのクライアント、サーバ、makefile を生成します。 オプション .Fl a を指定するとサンプルを含め全てのファイルを生成します。 入力ファイル .Ar infile が .Pa proto.x の場合、 クライアント側サンプルファイルは .Pa proto_client.c に、 サーバ側サンプルファイルは .Pa proto_server.c に、 そしてサンプル makefile は .Pa makefile.proto に書き出されます。 .Pp 生成されたサーバは、ポートモニタ (例えば .Xr inetd 8 ) で起動することも、 それ自身で起動することもできます。 ポートモニタから起動される場合、 ファイルディスクリプタ .Em 0 を引き渡すトランスポートのためだけの サーバを生成します。 トランスポートの名前は環境変数 .Ev PM_TRANSPORT をセットすることで 指定しなければなりません。 .Nm で作成されたサーバが実行されると、 サーバは環境変数 .Ev NETPATH で指定された全トランスポート用に サーバハンドルを作成します。 .Ev NETPATH が指定されていない場合は、ファイル .Pa /etc/netconfig に記述されている全ての可視トランスポート用にサーバハンドルを作成します。 注意: トランスポートはコンパイル時ではなく実行時に選択されます。 サーバが自分で開始すると、 デフォルトでは自動的にバックグラウンド実行に移ります。 .Em RPC_SVC_FG を定義することで、 サーバをフォアグラウンドで実行させることもできます。 .Pp 第二の書式は、更に洗練された .Tn RPC サーバを生成する特別な機能をもちます。 その特別な機能として、 ユーザが定義した .Em #define と .Tn RPC ディスパッチテーブル のサポートがあります。 .Tn RPC ディスパッチテーブルのエントリには以下のものがあります: .Bl -bullet -offset indent -compact .It -そのプロシージャに対応するサービスルーチンへのポインタ +その手続きに対応するサービスルーチンへのポインタ .It 入出力引数へのポインタ .It これらのルーチンのサイズ .El サーバはディスパッチテーブルを用いて認証チェックを行い、 それからサービスルーチンを実行することができます。 クライアントライブラリはそれを用いて、 記憶領域管理や XDR データ変換の詳細に対処することができます。 .Pp 上に示した他の 3 つの書式は、出力ファイルの全てではなく、 そのうちの特定のものだけを生成したい場合に用いられます。 .Nm の使用例については下の .Sx 使用例 のセクションを参照して下さい。 .Fl s オプション付きで実行されると、 .Nm は特定のトランスポートクラス用のサーバを生成します。 .Fl n オプション付きで実行されると、 .Nm は .Ar netid で指定されたトランスポート用サーバを生成します。 .Ar infile が指定されない場合、 .Nm は標準入力から入力を受け付けます。 .Pp 入力ファイルは、実際に .Nm に処理される前に、 C プリプロセッサ .Em cc -E で処理されます。 .Nm は、出力ファイルの各タイプ毎に .Nm プログラマ向けの特別なプリプロセッサシンボルを定義します: .Bl -tag -width indent .It RPC_HDR ヘッダをコンパイルする際に定義されます .It RPC_XDR XDR ルーチンをコンパイルする際に定義されます .It RPC_SVC サーバ側スタブをコンパイルする際に定義されます .It RPC_CLNT クライアント側スタブをコンパイルする際に定義されます .It RPC_TBL RPC ディスパッチテーブルをコンパイルする際に定義されます .El .Pp .Dq % で始まる行は全て、 .Nm に解釈されることなく、 出力ファイルに直接引き継がれます。 C プリプロセッサのパス名を指定するには .Fl Y フラグを使用して下さい。 .Pp .Ar infile で参照される全てのデータ方に対し、 .Nm は、そのデータ型名の前に .Em xdr_ を付与した名前の ルーチンが存在することを仮定します。 このルーチンが .Tn RPC/XDR ライブラリ中に存在しない場合は、 それを提供しなければなりません。 未定義データ型を提供することで .Xr XDR ルーチンをカスタマイズすることが可能です。 .Sh オプション オプションは以下の通りです: .Bl -tag -width indent .It Fl a サンプルファイルを含め、全てのファイルを生成します。 .It Fl b 従来互換モード。 以前のバージョンの OS のために、トランスポート固有の .Tn RPC コードを生成します。 .Pp 注: .Bx Free ではこの互換フラグはデフォルトで有効になっています。 .Bx Free は以前の .Tn ONC RPC ライブラリのみサポートしているからです。 .It Fl c .Tn XDR ルーチンをコンパイル出力します。 .It Fl C .Tn ANSI C コンパイラで使用できるヘッダおよびスタブファイルを生成します。 このオプションで生成したヘッダファイルは C++ プログラムでも使用できます。 .It Fl D Ns Ar name .It Fl D Ns Ar name=value .\".It Fl D Ns Ar name Ns Op Ar =value シンボル .Ar name を定義します。 ソース中の .Em #define 指示行と等価です。 .Ar value が指定されない場合、 .Ar value は .Em 1 と定義されます。 このオプションは複数回の指定が可能です。 .It Fl h C のデータ定義 (ヘッダファイル) をコンパイル出力します。 同時に .Fl T オプションを指定することで、 .Tn RPC ディスパッチテーブルをサポートするヘッダファイルを生成できます。 .It Fl i Ar size インラインコードを生成し始めるサイズを指定します。 最適化を行う際に用いられます。デフォルト値は 5 です。 .Pp 注: .Bx Free プラットホームでの以前の .Nm と互換性を保つため、デフォルト値は実際には 0 (つまり、 デフォルトではインラインコードは生成しない) となっています。 このデフォルト値を上書きするには明示的にゼロ以外の値を 指定しなければなりません。 .It Fl I サーバ側スタブにおける .Xr inetd 8 サポートコードを生成します。 このようにして生成したサーバは、単独で起動することも、 .Nm inetd から起動することもできます。 単独で起動した場合、デフォルトでは自らバックグラウンド動作に移ります。 特殊シンボル .Em RPC_SVC_FG を定義するか、 単に .Fl I オプションなしでコンパイルすると、 サーバプロセスはフォアグラウンドで動作します。 .Pp クライアントからの未処理リクエストがなければ、 .Nm inetd サーバは 120 秒 (デフォルト値) 経過の後、終了します。 このデフォルト値は .Fl K オプションにより変更できます。 .Nm inetd サーバの全エラーメッセージは常に .Xr syslog 3 によってログに残されます。 .\" .IP .\" Note: .\" this option is supported for backward compatibility only. .\" By default, .\" .B rpcgen .\" generates servers that can be invoked through portmonitors. .Pp .It Fl K Ar seconds デフォルトでは、 .Nm を用いて作成され、ポートモニタから起動された サービスは、リクエストを処理した後 120 秒待って終了します。 この時間は .Fl K オプションを用いて変更できます。 リクエスト処理が済むと直ちに終了するようなサーバを生成するには、 .Fl K Ar 0 と指定します。また、決して終了しないサーバを生成するには、 .Fl K Ar -1 として下さい。 .Pp サーバをモニタする場合、 あるサービスリクエストに対して .Em 常に 新しいプロセスを生成するようなポートモニタがあります。 そのようなモニタを用いてサーバを使用することがわかっている場合は、 サーバは処理完了後直ちに終了すべきです。 そのようなサーバを生成するには、 .Nm は .Fl K Ar 0 オプションとともに使用すべきです。 .It Fl l クライアント側スタブをコンパイル出力します。 .It Fl L サーバがフォアグラウンドで起動された場合、 サーバのエラーを記録するのに、標準エラー出力に出力する代わりに .Xr syslog 3 を使用します。 .It Fl m サーバ側スタブをコンパイル出力しますが、 .Qq main ルーチンは生成しません。 コールバックルーチンのみを作成したり、初期化を行うために 独自の .Qq main ルーチンを必要とする場合に便利です。 .It Fl M rpcgen が生成したコードとユーザが書いたコードの間で 引数や結果を受渡しするために、 マルチスレッド対応の (MT-safe な) スタブを生成します。 ユーザプログラム中でスレッドを使用する場合に有用です。 しかし関数 .Xr rpc_svc_calls 3 はまだ MT-safe にはなっていません。 つまり rpcgen が生成したサーバ側コードは MT-safe ではありません。 .It Fl N -プロシージャが複数の引数を持てるようにします。 +手続きが複数の引数を持てるようにします。 これはまた、C 言語に大変似たパラメータ渡し方法を用います。 -ですからリモートプロシージャにある引数を渡す場合、 +ですから遠隔手続きにある引数を渡す場合、 その引数へのポインタを渡す必要はなく、引数そのものを渡せます。 この動作は .Nm が生成したコードの以前の振る舞いとは異なっています。 以前との互換性を保つため、このオプションはデフォルトでは有効ではありません。 .It Fl n Ar netid .Ar netid で指定したトランスポート用のサーバ側スタブをコンパイル出力します。 netconfig データベースには .Ar netid 用エントリが存在しなければなりません。 このオプションを複数回指定することで、 複数のトランスポートに対してサービスするサーバを作成することができます。 .It Fl o Ar outfile 出力ファイル名を指定します。 何も指定されなければ標準出力が用いられます ( .Fl c , .Fl h , .Fl l , .Fl m , .Fl n , .Fl s , .Fl \&Sc , .Fl \&Sm , .Fl \&Ss , .Fl t モード時のみ)。 .It Fl s Ar nettype クラス .Ar nettype に属する全てのトランスポート用の サーバ側スタブをコンパイル出力します。 サポートされているクラスは以下の通りです: .Em netpath , .Em visible , .Em circuit_n , .Em circuit_v , .Em datagram_n , .Em datagram_v , .Em tcp , .Em udp (これらのクラスの意味については .Xr rpc 3 を参照して下さい) このオプションは複数回指定できます。 注: トランスポートはコンパイル時ではなく実行時に選択されます。 .It Fl \&Sc -リモートプロシージャ呼び出しを用いるサンプルクライアントコードを生成します。 +遠隔手続き呼び出しを用いるサンプルクライアントコードを生成します。 .It Fl \&Sm アプリケーションをコンパイルする際に用いるサンプル .Pa Makefile を生成します。 .It Fl \&Ss -リモートプロシージャ呼び出しを用いるサンプルサーバコードを生成します。 +遠隔手続き呼び出しを用いるサンプルサーバコードを生成します。 .It Fl t .Tn RPC ディスパッチテーブルをコンパイル出力します。 .It Fl T .Tn RPC ディスパッチテーブルをサポートするコードを生成します。 .Pp ある特定のタイプのファイルを生成するために、 以下のオプション .Fl c , .Fl h , .Fl l , .Fl m , .Fl s , .Fl \&Sc , .Fl \&Sm , .Fl \&Ss , .Fl t は排他的に使用されます。 他方、オプション .Fl D と .Fl T は大域的であり、他のオプションと組み合わせて使用できます。 .It Fl Y Ar pathname .Nm が C プリプロセッサを探し始めるディレクトリ名を指定します。 .El .Sh 使用例 以下の例: .Dl example% rpcgen -T prot.x .Pp は 5 種類のファイル: .Pa prot.h , .Pa prot_clnt.c , .Pa prot_svc.c , .Pa prot_xdr.c , .Pa prot_tbl.i の全てを生成します。 .Pp 次の例は C のデータ定義 (ヘッダ) を標準出力に出力します。 .Dl example% rpcgen -h prot.x .Pp .Fl D Ns Ar TEST のテストバージョンを作成するため、 クラス .Ar datagram_n に属する全トランスポート用サーバ側スタブを標準出力に出力するには次のよ うにします: .Dl example% rpcgen -s datagram_n -DTEST prot.x .Pp .Ar netid tcp で指定されたトランスポート用のサーバ側スタブを作成するには次のようにし ます: .Dl example% rpcgen -n tcp -o prot_svc.c prot.x .Sh 関連項目 .Xr cc 1 , .Xr rpc 3 , .Xr syslog 3 , .Xr inetd 8 .\" .BR rpc_svc_calls (3) .Pp .Tn NETP マニュアルの .Nm の章。 diff --git a/ja/man/man1/sh.1 b/ja/man/man1/sh.1 index 3ddc308006..cff084dddb 100644 --- a/ja/man/man1/sh.1 +++ b/ja/man/man1/sh.1 @@ -1,1201 +1,1200 @@ .\" Copyright (c) 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" Kenneth Almquist. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95 .\" %Id: sh.1,v 1.23 1998/12/18 03:51:18 jkoshy Exp % .\" .\" jpman %Id: sh.1,v 1.2 1997/05/31 16:40:31 jsakai Stab % .\" Japanese Translation amended by Norihiro Kumagai, 3/29/96, .\" based on the version of NetBSD Japanese Man Project .\" This amended version is for the FreeBSD-jpman Project, convened .\" by Kazuo Horikawa. .\" .Dd May 5, 1995 .Dt SH 1 .Os BSD 4 .Sh 名称 .Nm sh .Nd コマンドインタプリタ(シェル) .Sh 書式 .Nm .Op Fl /+abCEefIimnpsuVvx .Op Fl /+o Ar longname .Op Fl c Ar string .Op Ar arg ... .Sh 解説 .Nm はシステムの標準コマンドインタープリタです。 現在 .Nm は .St -p1003.2 のシェル規約に対応する途上にあります。 本バージョンのシェルは、見方によっては Korn shell と同様に 見える機能を多数持っていますが、 Korn shell のクローンではありません(もし Korn shell クローンを望むなら、 Gnu の bash を使いましょう)。 このシェルには、POSIX で規定された仕様といくつかの Berkeley 拡張のみが 取り入れられています。 本マニュアルは、shell のチュートリアルでは ありませんし、仕様を完全に記述するものでもありません。 .Ss 概要 シェルは、ファイルまたは端末から 1 行ずつ読み込み、それを解釈し、 コマンドを実行します。シェルはユーザがシステムにログインしたときに起動 されるプログラムです(ただし、ユーザは chsh(1) コマンドによって他のシェルを選択することもできます)。 シェルは、制御構文を持つ言語であり、 データ記憶をはじめとして多様な機能を提供するマクロ機能、 ヒストリ、行編集機能も内蔵しています。 このシェルは対話的に使うときに便利な機能を多くとり入れており、 対話的に用いるときも非対話的に (シェルスクリプトとして) 用いるときも、 共通のインタプリタ言語を用いることができる利点があります。 すなわち、コマンド名をシェルに直接タイプする ことも、コマンド名をファイルに書いておいてそのファイルをシェルに 実行させることもできます。 .Ss 起動 引数が与えられず、かつシェルの標準入力が端末の場合 (または -i フラグが指定 された場合)、シェルは対話的に動作します。対話的シェルは、通常、コマンド 入力時にプロンプトを表示し、文法的なエラーとコマンドエラーを 異なった方法で処理します (後述します)。 起動時に、シェルは 0 番目の引数を検査します。もしそれが ダッシュ `-' で始まっているなら、シェルはログインシェルとして 動作します。ユーザがシステムにログインした場合は自動的にこの状況に なります。ログインシェルは、まず (以下の各ファイルが存在する場合)、 .Pa /etc/profile と .Pa .profile ファイルからコマンドを読み込みます。 シェル起動時に、もしくはログインシェルで .Pa .profile を実行中に環境変数 .Ev ENV が設定されているなら、シェルは、その次に環境変数 .Ev ENV で示されたファイルからコマンドを読み込みます。 つまり、ユーザはログイン時にのみ実行したいコマンドを .Pa .profile に書き、シェルが起動されるたびに実行したいコマンドを環境変数 .Ev ENV で示すファイルに書くことになります。 環境変数 .Ev ENV を設定するには、ユーザのホームディレクトリ下のファイル .Pa .profile に以下のように記述します。 .sp .Dl ENV=$HOME/.shinit; export ENV .sp ここで、 .Pa .shinit のかわりに好きな名前を指定することができます。 オプション以外にコマンドライン引数が指定された場合、シェルは最初の引数 を、コマンドを読み込むべきファイル (シェルスクリプト) の名前であると解釈し、 それ以後の引数はシェルの位置パラメータ ($1, $2, ...) に設定します。 それ以外の場合、シェルはコマンドを標準入力から読み込みます。 .Pp 古いバージョンの .Nm とは異なり、環境変数 .Ev ENV で指定したスクリプトが実行されるのは、対話的シェルの呼び出し時のみです。 これにより、いい加減に書かれた .Ev ENV スクリプトに起因する、簡単に食いものにされることが多い有名な セキュリティホールがふさがれたことになります。 .Ss 引数リスト処理 .Nm の 1 文字からなるオプションはそれぞれ対応する名前を持っており、 .Xr set 1 組み込みコマンド (後述) の引数として用いることができます。 これらの名前は、以下の説明で 1 文字オプションのすぐあとに書いてあります。 マイナス記号 .Dq - でオプションを指定することは、そのオプションを有効にすることを意味し、 プラス記号 .Dq + でオプションを指定することは、そのオプションを無効にすることを意味します。 .Dq -- または、単なる .Dq - はオプション処理を終了させ、 コマンドラインの残りの語を引数として解釈することを強制します。 .Bl -tag -width Ds .It Fl a Li allexport 値が代入された変数の全てをエクスポートします(未実装です)。 .It Fl b Li notify バックグラウンドジョブ実行の完了を、コマンドが実行中でも即座に報告しま す(未実装です)。 .It Fl C Li noclobber すでに存在するファイルに対して .Dq > リダイレクトにより上書きしません (未実装です)。 .It Fl E Li emacs 組み込みの .Xr emacs 1 風のコマンド行編集機能を有効にします (それ以前に .Fl V オプションが指定された場合、それを無効にします)。 .It Fl e Li errexit 非対話的シェルで、テスト状態にないコマンドの実行に失敗した場合、 直ちにシェルを終了します。 コマンドは、if, elif, while, until 構文を 制御するのに用いられている場合に、テスト状態であるとみなされます。 また、 .Dq && や .Dq || の左辺値として用いられているコマンドも、テスト状態とみなされます。 .It Fl f Li noglob パス名展開を行ないません。 .It Fl I Li ignoreeof 対話的シェルの場合、入力の EOF を無視します。 .It Fl i Li interactive シェルが対話的に動作するように強制します。 .It Fl m Li monitor ジョブ制御を可能にします (対話的シェルの場合は自動的に設定されます)。 .It Fl n Li noexec 非対話的シェルの場合、コマンドを読み込みますが、そのコマンドの実行は しません。シェルスクリプトの文法を検査する場合に便利です。 .It Fl p Li privileged 特権モードを有効にします。 起動時に実効ユーザ ID あるいは実効グループ ID が、実ユーザ ID や実グルー プ ID と一致していなければ、このモードが有効になります。このモードを無 効化すると、実効ユーザ ID および実効グループ ID は、実ユーザ ID および 実グループ ID に設定されます。 対話的シェルでこのモードが有効になっていると、 .Pa /etc/profile の後で .Pa ~/.profile に代わり、 .Pa /etc/suid_profile を読み込みます。一方、環境変数 .Ev ENV の内容は無視されます。 .It Fl s Li stdin コマンドを標準入力から読み込みます (引数でファイル名が指定されていない 場合には、このオプションが自動的に設定されます)。 シェルが実行されてから本オプションを( .Xr set 1 などによって)設定しても効果はありません。 .It Fl u Li nounset 値が設定されていない変数を展開しようとした場合、 標準エラー出力にエラーメッセージを出力し、 さらに非対話的シェルならば、ただちにシェルを終了します (未実装です)。 .It Fl V Li vi 組み込みの .Xr vi 1 風の行編集機能を有効にします (それ以前に .Fl E オプションが指定されていた場合、それは無効になります)。 .It Fl v Li verbose 入力を読み込むごとに標準エラー出力に書き出します。デバッグのときに便利です。 .It Fl x Li xtrace 各コマンドを実行する前に、そのコマンドを標準エラー出力に (各コマンドの 前に `+' を付加して) 書き出します。デバッグのときに便利です。 .It Fl c Ar string 文字列引数 string はシェルに渡され、入力として解釈されます。このオプショ ンは引数として文字列を一つだけ受け取ることに注意して下さい。ですから、複 数の単語からなる文字列は引用符で囲う必要があります。 .El .Ss 構文構造 シェルは、ファイルを行単位で読み込み、空白文字 (ブランクおよびタブ) や シェルにとって特別な意味を持つ特定の文字列 ( .Dq 演算子 と呼ばれるもので す) を区切りとして、複数の単語に分割します。演算子には、制御演算子とリ ダイレクト演算子の 2 種類があります (これらの意味については後述します)。 以下に、それらの一覧を示します。 .Bl -tag -width Ds .It No 制御演算子: & && ( ) ; ;; | || .No \en .It No リダイレクト演算子: < > >| << >> <& >& <<- <> .El .Ss 引用(クォート) 引用は、特殊な意味を持つ文字や単語 (演算子、空白、キーワードなど) の意味 を打ち消すために用います。引用には、シングルクォート文字のペアを使う方法、 ダブルクォート文字のペアを使う方法、バックスラッシュ文字を使う方法 の 3 種類があります。 .Bl -tag -width Ds .It シングルクォート文字 シングルクォートのペアで囲まれた文字は、すべてその文字そのまま(リテラ ル)として扱われます (ただしシングルクォートは別です。シングルクォート で囲った文字列の中にシングルクォートを含めることはできません)。 .It ダブルクォート文字 ダブルクォートのペアで囲まれた文字は、ドル記号文字($)、バッククォート 文字(`)、バックスラッシュ文字(\\) を除き、すべてリテラルとして扱われま す。ダブルクォート文字による引用の中にあるバックスラッシュ文字は、歴史 的経緯によりすこし変わった扱いを受けます。つまり、直後に $, `, ", \\, 改行文字 が来るときにのみ、それらの文字がリテラルとして扱われます。そ れ以外の文字が来る場合、バックスラッシュ文字自体がリテラルとして扱われ ます。 .It バックスラッシュ バックスラッシュは、その後ろの 1 文字を、リテラルとして扱うように指示 します。ただし改行文字は別です。改行文字の直前のバックスラッシュは、行 の継続であるとみなされます。 .El .Ss 予約語 予約語はシェルにとって特別な意味を持つ単語で、行の先頭または制御演算子 の直後でのみ予約語として認識されます。以下に予約語の一覧を挙げます。 .Bd -literal -offset indent ! { } case do done elif else esac fi for if then until while .Ed .Ss エイリアス エイリアスは、名前とそれと対応する値が対になったもので、 組み込みコマンド .Xr alias 1 によって定義されます。 シェルは、予約語が現れる可能性がある場所(上記を参照)で、 ある単語に対して、それが予約語かどうかの検査を済ませたのち、 それがエイリアスに一致するかどうかを検査します。 もし一致したならば、入力行の中で、その単語をエイリアスの値に置き換えます。 たとえば、``lf'' という名前で ``ls -F'' という値を持つエイリアスが 存在したとすると、次の入力行 .Bd -literal -offset indent lf foobar .Ed .Pp は、以下のように置換されます。 .Bd -literal -offset indent ls -F foobar .Ed .Pp エイリアスは、初心者に対し、引数付きの関数を生成する面倒を求めることなく、 短いコマンドをつくり出す便利な方法を提供するものです。 しかし、構文的にあいまいなコードを作り出すことにもつながりかねません。 そのような使い方はお勧めできません。 .Ss コマンド シェルは、読み込んだ単語を、文法に従って解釈します。 本マニュアルでは文法については解説しません。 .St -p1003.2 の BNF 表記を参照してください。要するに、行を1行を読み込み、読み込んだ 行の最初の単語 (制御演算子がある場合は、そのあとの最初の単語) が予約語 でない場合、シェルはその行を単純コマンドとして解釈します。それ以外の場 合、複合コマンドあるいは特殊構造であると解釈します。 .Ss 単純コマンド 単純コマンドを解釈する場合、シェルは以下のような動作をします。 .Bl -enum .It 単語の前にある ``name=value'' の形式の単語を取り除き、 単純コマンドの環境に代入します。 リダイレクト演算子とその引数 (後述) を取り除き、 あとで処理できるように保存します。 .It 残った単語を、「展開」の節で説明する方法で展開します。 展開後の最初の単語をコマンド名とみなし、コマンドの位置を探索します。 残りの単語はコマンドへの引数とみなされます。 処理の結果、コマンド名が残らなかった場合、手順 1) で 取り出した ``name=value'' の変数代入を、現在のシェルの環境に反映します。 .It 次節で説明する方法で、リダイレクトを行ないます。 .El .Ss リダイレクト リダイレクトは、コマンドがどこから入力するか、どこへ出力するかを 変更するときに用います。 一般には、リダイレクトでは、ファイルのオープン、クローズ、または ファイルへの参照の複写 (duplicate) を行います。 リダイレクトで用いられる全般的な形式は、以下のとおりです。 .sp .Dl [n] redir-op file .sp ここで、redir-op は前述したリダイレクト演算子のいずれかです。 これらの演算子をどのように利用するかの例をいくつか以下に挙げます。 .Bl -tag -width "1234567890" -offset indent .It [n]> file 標準出力 (またはファイル記述子 n への出力) をファイル file に書き出します。 .It [n]>| file 上と同様。ただし、-C オプションの効果を打ち消します。 .It [n]>> file 標準出力 (またはファイル記述子 n への出力) をファイル file に追加します。 .It [n]< file 標準入力 (またはファイル記述子 n からの入力) をファイル file から取ります。 .It [n1]<&n2 ファイル記述子 n2 を標準入力 (またはファイル記述子 n1) に複写します。 .It [n]<&- 標準入力 (またはファイル記述子 n) をクローズします。 .It [n1]>&n2 ファイル記述子 n2 を標準出力 (またはファイル記述子 n1) に複写します。 .It [n]>&- 標準出力 (またはファイル記述子 n) をクローズします。 .It [n]<> file 標準入力 (あるいはファイル記述子 n) により、ファイル file を 読み書きするようにします。 .El .Pp 以下のリダイレクトは、しばしば``ヒア・ドキュメント(here-document)''と 呼ばれます。 .Bd -literal -offset indent [n]<< delimiter here-doc-text... delimiter .Ed .Pp シェルは、delimiter までの行を保存し、コマンドへの標準入力またはファイ ル記述子 n にリダイレクトします。最初の行の delimiter が引用 (クォー ト) されていた場合、here-doc-text の内容をリテラルとして扱います。そ うでない場合、パラメータ展開、コマンド置換、数値演算 (「展開」の節で説 明します) を適用します。演算子が (``<<'' でなく) ``<<-'' の場合は、 here-doc-text の各行の行頭のタブを取り除きます。 .Ss コマンド検索と実行 コマンドには、シェル関数、組み込みコマンド、通常プログラムの 3 種類があり、 コマンドを検索する際には、シェルは名前の検索をこの順序で行います。 それぞれのコマンドは異なる方法で実行されます。 .Pp シェル関数を実行するとき、$0 を除くすべての位置パラメータ ($1, $2,..) をシェル関数への引数として設定します。$0 は変更されません。シェル関数 の環境として指定された変数 (関数名の直前に ``name=value'' を置いて指定 されたもの) は、その関数に局所的な変数となり、指定された初期値が設定さ れます。そして、シェルは関数定義で与えられたコマンドを実行します。コマ ンドの実行が完了すると、位置パラメータを元の値に戻します。これは全て現 在のシェルの中で処理されます。 .Pp 組み込みコマンドは、新たなプロセスを作成せずにシェル内部で実行されます。 .Pp コマンドが関数でも組み込みコマンドでもない場合は、通常のプログラムとみなし (次節で説明するとおり) ファイルシステムの中でそのコマンドを検索します。 通常のプログラムを実行する場合、シェルは引数と 環境をプログラムに渡して、そのプログラムを実行します。 プログラムが通常の実行ファイル形式ではない場合 (つまり、 .Tn ASCII 表現で "#!" となる「マジックナンバ」でファイルが始まっておらず、 .Fn execve 2 が .Er ENOEXEC を返す場合)、 -サブシェルの中でそのプログラムを解釈実行します。この場合、あたかも新た -にシェルが起動されたかのような効果を得るために、子シェルは自分自身を再 -初期化します。ただし、子プロセスは、親シェル中のハッシュされたコマンド +サブシェルの中でそのプログラムを解釈実行します。この場合、あたかも新たに +シェルが起動されたかのような効果を得るために、子シェルは自分自身を +再初期化します。ただし、子プロセスは、親シェル中のハッシュされたコマンド 位置情報を憶えており、これは再初期化されません。 .Pp -本ドキュメントの古いバージョンや古いソースコードでは、ときおり、マジッ -クナンバのないシェルスクリプトのことを「シェルプロシージャ」と呼んでい -て、まぎらわしい場合がありますので注意して下さい。 +本ドキュメントの古いバージョンや古いソースコードでは、ときおり、 +マジックナンバのないシェルスクリプトのことを「シェル手続き」と呼んでいて、 +まぎらわしい場合がありますので注意して下さい。 .Ss パス検索 コマンドを検索するとき、シェルは、まず、その名前のシェル関数があるかどうかを 調べます。次に、その名前の組み込みコマンドがあるかどうかを調べます。 組み込みコマンドでもない場合、以下のいずれかの処理が行われます: .Bl -enum .It コマンド名にスラッシュが含まれていれば、検索は行わず、 単にそのコマンドが実行されます。 .It 変数 .Ev PATH に含まれる各エントリに対して、順にそのコマンドを検索します。 変数 .Ev PATH の値はコロン(``:'')で区切られたエントリの列でなければなりません。 各エントリは、それぞれディレクトリ名一つに対応します。 カレントディレクトリは、 空のディレクトリ名を指定することで暗黙的に、 あるいは 1 個のピリオドを指定することで明示的に 指示することができます。 .El .Ss コマンドの実行ステータス 各コマンドは終了ステータスを持ち、それにより他のシェルコマンドの動作に 影響を与えることができます。基本的な考え方として、終了ステータス 0 は 通常の終了または成功を示します。0 以外の終了ステータスは失敗、エラーを 意味します。各コマンドのマニュアルにそれぞれの終了ステータスがどのよう な意味を持つかが記述されているはずです。組み込みコマンドと(実行された) 関数も終了ステータスを返します。 .Pp コマンドがシグナルにより終了(terminate)させられた場合、 終了ステータスは 128 にシグナル番号を加えたものになります。 シグナル番号はヘッダファイル .Aq Pa sys/signal.h に定義されています。 .Ss 複合コマンド(Complex Commands) 複合コマンドは、単純コマンドの組み合わせで作ります。 制御演算子または予約語と組み合わせることで、より大きな複合コマンドを生 成します。一般に、コマンドは以下のうちのいずれかです。 .Bl -item -offset indent .It 単純コマンド .It パイプライン .It リストまたは合成リスト(compound-list) .It 合成コマンド(compound command) .It 関数定義 .El .Pp 特に指定のない場合、コマンドの終了ステータスは最後に実行された 単純コマンドの終了ステータスとなります。 .Ss パイプライン パイプラインは、複数のコマンドを制御演算子 `|' によってつないだものです。 最後のコマンドを除くすべてのコマンドの標準出力は、次のコマンドの標準入力に 接続されます。 最後のコマンドの標準出力は、通常通り、シェルから受け継がれます。 .Pp パイプラインの形式は次のとおりです。 .Bd -literal -offset indent [!] command1 [ | command2 ...] .Ed .Pp command1 の標準出力は command2 の標準入力に接続されます。コマンドの標 -準入出力がパイプラインによって割り当てられるのは、各コマンドに属するリ -ダイレクト演算子で指定されたリダイレクトを処理する前のことだと考えて下 -さい。 +準入出力がパイプラインによって割り当てられるのは、各コマンドに属する +リダイレクト演算子で指定されたリダイレクトを処理する前のことだと考えて +下さい。 .Pp パイプラインがバックグラウンド (後述) でなければ、シェルはすべての コマンドが終了するのを待ちます。 .Pp パイプラインの直前に予約語 `!' が置かれなかった場合、終了ステータスは パイプラインの最後のコマンドの終了ステータスとなります。 `!' が前置された場合、終了ステータスはパイプラインの最後のコマンドの 終了ステータスの論理否定を取った値となります。 すなわち、最後のコマンドが 0 を返した場合、パイプラインの 終了ステータスは 1 に、最後のコマンドが 0 より大きな値を返した場合、 終了ステータスは 0 になります。 .Pp パイプラインによる標準入出力の接続はリダイレクトに先立って行われるため、 パイプラインの接続をリダイレクトによって修正することができます。たとえば、 .Bd -literal -offset indent $ command1 2>&1 | command2 .Ed .Pp は、command1 の標準出力と標準エラー出力の両方を command2 の標準入力に 接続します。 .Pp \&; または改行文字を終端として用いることにより、直前の AND-OR リスト (後述) を 順次実行します。& は、直前の AND-OR リストを非同期に実行します。 .Pp 注: 他のいくつかのシェルと異なり、パイプラインの各プロセスは 起動したシェルの子プロセスとなります (シェルの組み込みコマンドである ときは別です。その場合は現在のシェルで実行されます --- ただし 環境に対して行った操作は取り消されます)。 .Ss バックグラウンドコマンド -- & コマンドが制御演算子 & で終了している場合、シェルはそのコマンドを 非同期に実行します。すなわち、シェルはそのコマンドの終了を待たずに、 次のコマンドの実行を開始します。 .Pp コマンドをバックグラウンドで実行させるための形式は以下のとおりです。 .Bd -literal -offset indent command1 & [command2 & ...] .Ed .Pp シェルが対話的でない場合、非同期コマンドの標準入力には /dev/null が 接続されます。 .Ss リスト -- 一般的な話 リストは 0 個またはそれ以上のコマンドを改行文字、セミコロン文字、アン -パーサント文字 (&) で区切った列です。リストは、これら 3 つの記号のいず -れかで終了させることもできます。リスト中のコマンドは並べられた順に実行 +パーサント文字 (&) で区切った列です。リストは、これら 3 つの記号のいずれかで +終了させることもできます。リスト中のコマンドは並べられた順に実行 されます。もし、コマンドに続けてアンパーサント文字が置かれている場合、 -シェルはそのコマンドを起動したあと、すぐに次のコマンドの処理を開始しま -す。その他の場合、そのコマンドの終了を待ってから次のコマンドの処理を開 -始します。 +シェルはそのコマンドを起動したあと、すぐに次のコマンドの処理を開始します。 +その他の場合、そのコマンドの終了を待ってから次のコマンドの処理を開始します。 .Ss 短絡リスト演算子(Short-Circuit List Operators) ``&&'' と ``||'' は AND-OR リスト演算子です。 ``&&'' は最初のコマンド を実行し、もし最初のコマンドの終了ステータスが 0 ならば次のコマンドを 実行します。 ``||'' も同様ですが、最初のコマンドの終了ステータスが 0 でない場合に、次のコマンドを実行します。 ``&&'' と ``||'' の優先順位は 同じです。 .Ss 制御構造 -- if, while, for, case if コマンドの文法は以下のとおりです。 .Bd -literal -offset indent if list then list [ elif list then list ] ... [ else list ] fi .Ed .Pp while コマンドの文法は以下のとおりです。 .Bd -literal -offset indent while list do list done .Ed .Pp 最初のリストの終了ステータスが 0 であるかぎり、2 つのリストを繰り返し 実行します。until コマンドも同様に実行しますが、 単語 while の代わりに単語 until を使うことと、 最初のリストの終了ステータスが 0 になるまで、 2 つのリストを繰り返し実行することが異なります。 .Pp for コマンドの文法は以下のとおりです。 .Bd -literal -offset indent for variable in word... do list done .Ed .Pp 各 word は展開され、変数 variable に word を順に設定しながらリストを 繰り返し実行します。do と done は ``{'' と ``}'' で置き換えることができます。 .Pp break と continue コマンドの文法は以下のとおりです。 .Bd -literal -offset indent break [ num ] continue [ num ] .Ed .Pp break は内側から num 個の for ループまたは while ループを終了します。 continue は、 num 個目のループの次の繰り返しに制御を移します。 .\" 上の文、原文では以下のようになっているが、the *num* innermost loop が .\" 正しいと思われる。実際の sh の動作もそうなっているようだ。 .\" --- 97/05/31 sakai@jp.freebsd.org ↓ .\" Continue continues with the next iteration of the innermost loop. これらのコマンドは組み込みコマンドとして実装されています。 .Pp case コマンドの文法は以下のとおりです。 .Bd -literal -offset indent case word in pattern) list ;; ... esac .Ed .Pp pattern は、1 つあるいは複数のパターン (後述の「シェルパターン」を参照 のこと) を ``|'' で接続したものです。 .Ss 複数のコマンドのグループ化 -コマンドは、以下のいずれかの方法によりグループ化することができます +コマンドは、以下のいずれかの方法によりグループ化することができます。 .Bd -literal -offset indent (list) .Ed .Pp または、 .Bd -literal -offset indent { list; } .Ed .Pp 最初の形式では、コマンドはサブシェル上で実行されます。 (list) のなかの組み込みコマンドは、現在のシェルには影響を与えません。 2 つめの形式では新たなシェルを fork しないので、やや効率が良くなります。 このようにして複数コマンドをグループ化することで、 あたかも単一プログラムであるかのように、それらの出力をまとめて リダイレクトすることができます。 .Bd -literal -offset indent { echo -n "hello"; echo " world"; } > greeting .Ed .Ss 関数 関数定義の構文は以下のとおりです。 .Bd -literal -offset indent name ( ) command .Ed .Pp 関数定義は実行可能文の一種です。実行されると、名前 name の関数 が定義され、終了ステータスとして 0 を返します。command は 通常、``{'' と ``}'' で囲まれたリストです。 .Pp local コマンドを用いて関数に局所的な変数を宣言することができます。 これは関数定義中の最初の文で行わなければなりません。構文は次のとおりです。 .Bd -literal -offset indent local [ variable | - ] ... .Ed .Pp local コマンドは、組み込みコマンドとして実装されています。 .Pp 変数を局所変数にする場合、関数を呼び出した環境に同じ名前の変数があれば、 -新しい局所変数は値と export、readonly フラグを引き継ぎます。もし同じ名 -前の変数がなければ、局所変数は初期値を持ちません。シェルは動的スコープ -を用います。すなわち、関数 f に局所的な変数 x を作成し、関数 f から関 -数 g を呼び出した場合、関数 g 内部での変数 x に対する操作は大域変数 x +新しい局所変数は値と export、readonly フラグを引き継ぎます。もし同じ名前の +変数がなければ、局所変数は初期値を持ちません。シェルは動的スコープ +を用います。すなわち、関数 f に局所的な変数 x を作成し、関数 f から +関数 g を呼び出した場合、関数 g 内部での変数 x に対する操作は大域変数 x ではなく、関数 f で宣言された変数 x への操作となります。 .Pp 特殊パラメータのうち局所宣言できるのは ``-'' だけです。 ``-'' を 局所宣言すると、関数内で set コマンドを用いてシェルオプションを 変更しても、関数が終了するとそれらのオプションは元の値に戻ります。 .Pp return コマンドの文法は以下のとおりです。 .Bd -literal -offset indent return [ exitstatus ] .Ed .Pp return は現在実行中の関数を終了させます。return は組み込みコマンドとして 実装されています。 .Ss 変数とパラメータ シェルはパラメータの集合を管理しています。名前を持つパラメータを 変数と呼びます。シェルは、起動時にすべての環境変数をシェル変数に取り込みます。 新たな変数は、次の形式によって設定できます。 .Bd -literal -offset indent name=value .Ed .Pp ユーザが設定する変数は、アルファベット、数字、アンダースコア (_) のみ からなる名前を持つ必要があります。また、最初の文字が数字であっては いけません。 パラメータは、以下に示す数字または特殊記号により参照することもできます。 .Ss 位置パラメータ 位置パラメータは、数字 (n > 0) によって参照されるパラメータです。シェルは 位置パラメータの初期値としてシェルスクリプト名に続く引数を設定します。 組み込みコマンド .Xr set 1 により再設定や消去ができます。 .Ss 特殊パラメータ 特殊パラメータは、以下に挙げる特殊文字のいずれかにより参照される パラメータです。各パラメータの値の説明を各文字の後ろに示します。 .Bl -hang .It * 位置パラメータ 1,2,... に展開されます。ダブルクォート文字列内部で展開 される場合、展開結果は各位置パラメータの間を変数 IFS の先頭の文字 (IFS が設定されていない場合は空白文字) で区切った単一の文字列になります。 .It @ 位置パラメータ 1,2,... に展開されます。ダブルクォート引用の内部で展開 される場合、各位置パラメータは別々の引数となります。 もし、位置パラメータが設定されていない場合には、 @ の展開結果は 0 個の引数となります (ダブルクォート引用の内部であっても)。 -すなわち、$1 が ``abc''、$2 が ``def ghi'' であっ -た場合、"$@" は次の 2 つの引数に展開されます。 +すなわち、$1 が ``abc''、$2 が ``def ghi'' であった場合、"$@" は +次の 2 つの引数に展開されます。 .Bd -literal -offset indent "abc" "def ghi" .Ed .It # 位置パラメータの数に展開されます。 .It ? 最後に実行したパイプラインの終了ステータスに展開されます。 .It - (ハイフン) 現在のオプションフラグ (1文字オプション名をつないだ文字列) に展開されます。起動時に指定されたもの、組み込みコマンド set で指定した もの、シェルが暗黙に設定したもののすべてを含みます。 .It $ 起動されたシェルのプロセス ID に展開されます。 サブシェルも親シェルと同じ値を持ちます。 .It ! 現在のシェルが最後にバックグラウンドで実行したコマンドのプロセス ID に 展開されます。パイプラインの場合、パイプラインの最後のコマンドの プロセス ID になります。 .It 0 (ゼロ) シェルの名前またはシェルスクリプト名に展開されます。 .El .Ss 単語展開 本節では、単語に対して適用されるさまざまな展開について説明します。あとで 述べるように、すべての展開がすべての単語に対して適用されるわけではありません。 .Pp 単一の単語に対して適用されたチルダ展開、パラメータ展開、コマンド置換、 数式展開、クォート削除の結果は単一のフィールドになります。単一の単語が 複数のフィールドに分割される可能性があるのは、フィールド分割または パス名展開の場合だけです。この規則の唯一の例外は、ダブルクォート中の パラメータ @ の展開です (前述)。 .Pp 単語展開の順序は以下のとおりです。 .Bl -enum .It チルダ展開、パラメータ展開、コマンド置換、数式展開 (これらはすべて 同時に行われます) .It 変数 IFS の値が空でなければ、(1) の結果の各フィールドに対して フィールド分割が行われる .It パス名展開 (-f オプションが無効の場合) .It クォート削除 .El .Pp 文字 $ はパラメータ展開、コマンド置換、数式評価を行うきっかけになります。 .Ss チルダ展開 (ユーザのホームディレクトリ名への置換) 引用されていないチルダ文字 (~) で始まる単語は、チルダ展開の対象になります。 チルダ文字からスラッシュ文字または単語の終端までのすべての文字がユーザ名 とみなされ、そのユーザのホームディレクトリに置換されます。もしユーザ名が 省略された場合(たとえば ~/foobar)、チルダ文字は変数 HOME の値(現在のユーザ のホームディレクトリ)に置換されます。 .Ss パラメータ展開 パラメータ展開の形式は以下のとおりです。 .Bd -literal -offset indent ${expression} .Ed .Pp ここで、expression は対応した `}' までのすべての文字です。対応する`}' を調べる際に、バックスラッシュ文字によりエスケープされたり、クォート文字に 狭まれた `}' や、数式展開に埋め込まれている文字や、コマンド置換や変数展開中に ある文字は調べる対象になりません。 .Pp パラメータ展開の形式のうちもっとも単純なものは以下のとおりです。 .Bd -literal -offset indent ${parameter} .Ed .Pp そのパラメータに値が存在する場合、その値に置き換えられます。 .Pp パラメータ名やシンボルを中括弧({})で囲んでも構いません。この中括弧は、 数字 2 文字以上からなる位置パラメータの場合や、パラメータ名の直後に パラメータ名の一部であるとみなし得る文字が続く場合を除き、 省略可能です。ダブルクォート引用中のパラメータ展開は以下 のようになります。 .Bl -enum .It パラメータ展開を行った結果の単語に対しては、パス名展開は適用されません。 .It パラメータが @ の場合を除き、フィールド分割は適用されません。 .El .Pp さらに、以下の形式を用いることにより、パラメータ展開の結果に修正を加える ことができます。 .Bl -tag -width Ds .It Li ${parameter:-word} デフォルト値への置換: パラメータ parameter が設定されていないか空の値 を持つ場合、word を展開した結果に置換されます。さもなければ、パラメー タ parameter の値に置換されます。 .It Li ${parameter:=word} デフォルト値の代入: パラメータ parameter が設定されていないか空の値を持つ場合、word を展開 した結果が parameter に代入されます。最終的にパラメータ parameter の値 に置換されます。位置パラメータや特殊パラメータは、この方法で代入すること はできません。 .It Li ${parameter:?[word]} 空か設定されていないときにエラーとする: パラメータ parameter が設定されていないか空の値を持つ場合、word を展開 した結果 (word が省略された場合にはパラメータが設定されていないことを表す デフォルトのメッセージ) が標準エラー出力に書き出され、 シェルは非 0 の終了ステータスで終了します。 それ以外の場合、パラメータ parameter の値に置換されます。対話的シェルの場合は 必ずしも終了しません。 .It Li ${parameter:+word} 代替値の使用: パラメータ parameter が設定されていないか空の値を持つ場合、空の値に 置換されます。さもなければ、word を展開した結果に置換されます。 .Pp 以上のパラメータ展開において、`:' を用いた場合はパラメータが設定されていない かまたは空の値であることが検査され、`:' を省略するとパラメータが 設定されていないことのみを検査します。 .It Li ${#parameter} 文字列の長さ: パラメータの値の(文字列としての)長さに置換されます。 .Pp 以下の 4 通りのパラメータ展開は部分文字列切り出し処理を行います。各場合 において、パターンは正規表現ではなく、パターンマッチ記法 (シェルパターン の項を参照) が用いられます。パラメータが` * 'または` @ 'の場合、展開の結果 がどうなるかは規定しません (unspecified)。 パラメータ展開全体をダブルクォートで囲んでも パターンは引用されません。中括弧のなかで引用することにより パターンを引用することができます。 .It Li ${parameter%word} 最短後置パターンの削除: まず word が展開され、その結果をパターンとして扱います。 パラメータ parameter の右から、パターンに一致する最短の部分を削除した文字列に 置換されます。 .It Li ${parameter%%word} 最長後置パターンの削除: まず word が展開され、その結果をパターンとして扱います。 パラメータ parameter の右から、パターンに一致する最長の部分を削除した文字列に 置換されます。 .It Li ${parameter#word} 最短前置パターンの削除: まず word が展開され、その結果をパターンとして扱います。 パラメータ parameter の左から、パターンに一致する最短の部分を削除した文字列に 置換されます。 .It Li ${parameter##word} 最長前置パターンの削除: まず word が展開され、その結果をパターンとして扱います。 パラメータ parameter の左から、パターンに一致する最長の部分を削除した文字列に 置換されます。 .El .Ss コマンド置換 コマンド置換により、コマンド名自身をコマンドの出力で置き換えることができます。 コマンド置換は、以下のように、コマンド command を囲った場合、 .Bd -literal -offset indent $(command) .Ed .Pp または(``バッククォート'' バージョン)、 .Bd -literal -offset indent `command` .Ed .Pp とした場合に行なわれます。 シェルは、コマンド command をサブシェルの環境で実行し、command が標準出力 に出力したものから最後の改行文字を削除した結果で置換します (最後以外の 改行は削除しません。ただし、フィールド分割の際に、IFS の値や引用のされかたに よっては、ここで残った改行文字が結局は空白に置換されることもあります)。 .Ss 数式展開 数式展開とは、数式を評価し、その値に置換する仕組みです。数式展開の形式は以下 のとおりです。 .Bd -literal -offset indent $((expression)) .Ed .Pp 数式 expression は、その中のダブルクォート文字が特別扱いを受けないという 点を除いては、ダブルクォート文字で囲まれている文字列と同様に扱われます。 シェルは expression 中のすべてのトークンにパラメータ展開、コマンド置換、 クォート削除を適用します。 .Pp 次にシェルはその結果を数式として扱い、その値に置換します。 .Ss 空白文字による分割 (フィールド分割) パラメータ展開、コマンド置換、数式展開のあと、シェルは展開結果を調べて、 ダブルクォートの外にある部分に対してフィールド分割を適用します。 その結果、複数のフィールドになる場合もあります。 .Pp シェルは、変数 IFS に設定されている文字それぞれ区切り文字とみなし、 パラメータ展開の結果、およびコマンド置換の結果をフィールドに分割します。 .Ss パス名展開 (ファイル名生成) -f フラグが設定されていなければ、フィールド分割が行われたあと、ファイル名生成 が行われます。各単語は、スラッシュで区切られたパターンの列であるとみなさ れます。パス名展開処理において、単語は、条件を満たすファイル すべてのファイル名の列で置換されます。この各ファイル名は、単語の 各パターン部分を、そのパターンに一致する文字列に置換することで 生成されるものです。 これには 2 つの制限があります: まず、パターンはスラッシュを含む文字列には 一致しません。次に、パターンは、そのパターンがピリオドで始まらないかぎり、 ピリオドで始まる文字列に一致しません。 次節では、パス名展開と .Xr case 1 コマンドで用いられるパターンについて説明します。 .Ss シェルパターン パターンは、通常の文字とメタキャラクタからなります。通常の文字は、 その文字そのものに一致します。 メタキャラクタは ``!''、 ``*''、 ``?''、 ``['' です。これらの文字を引用 すると、各々の特殊な意味を失います。コマンド置換や変数置換において、 ドル記号やバッククォート文字がダブルクォート文字の中にない場合には、 変数の値やコマンドの出力の中に、これらの特殊な文字が存在するかどうかが 調べられ、それらがあれば、メタキャラクタとして扱われます。 .Pp アスタリスク文字 (``*'') は、どのような文字列とも一致します。 クエスチョンマーク文字 (``?'') は、任意の文字 1 文字と一致します。 左大括弧 (``['') は文字クラスを開始します。 文字クラスの最後は右大括弧 (``]'') です。``]'' がない場合 は、``['' は文字そのものに一致し、文字クラスの開始とは見なされません。文字 クラスは大括弧内に出現するすべての文字に一致します。 マイナス記号を用いれば、文字の範囲を指定することができます。 文字クラスの最初にエクスクラメーションマーク (``!'') を置くことで、 文字クラスの意味を反転させることができます。 .Pp 文字クラスに文字 ``]'' を含めるには、 ``]'' を文字クラスの最初 (``!'' を 置く場合はそのあと) に置きます。 文字クラスにマイナス記号を含めるときも同様で、 リストの最初もしくは最後に置きます。 .Ss 組み込みコマンド 本節では、別プロセスでは実行できない処理を行なうために組み込まれている コマンドを列挙します。 さらに、効率を上げるために組み込まれているかもしれないコマンド (例えば .Xr printf 1 , .Xr echo 1 , .Xr test 1 , 等) もあわせて列挙します。 .Bl -tag -width Ds .It : 終了ステータス 0 (真) を返すヌルコマンドです。 .It \&. file 指定されたファイル file に記述されたコマンドがシェルに読み込まれ、 実行されます。 .Ar file に .Ql / 文字を含む場合、その通りに扱われます。 そうでなければ、シェルは .Ev PATH を使用して、ファイルを検索します。 .Ev PATH を使用しても見付からない場合、カレントディレクトリを検索します。 .It alias [ name[=string] ... ] name=string が指定されている場合、シェルは名前 ``name'' を持つ値 ``value'' のエイリアスを定義します。単に ``name'' だけが指定された場合、 エイリアス ``name'' の値が表示されます。引数が指定されない場合、定義さ れているすべてのエイリアスの名前と値を表示します (unalias も参照)。 .It bg [ job ] ... 指定されたジョブ (指定されなかった場合は現在のジョブ) を、 続けてバックグラウンドで実行させます。 .It command command arg ... 指定された組み込みコマンドを実行します (組み込みコマンドと同じ名前のシェル関数 がある場合に使います)。 .It cd [ directory ] 指定されたディレクトリに移動します (directory 無指定時は $HOME に移動します)。 cd コマンドの 環境に CDPATH 変数があるか、シェル変数 CDPATH が設定されていて、かつ 指定されたディレクトリ directory がスラッシュ文字から始まっていないなら、 CDPATH に列挙されたディレクトリ以下に 指定されたディレクトリ directory がないか検索されます。 CDPATH の形式は PATH と同様です。対話的シェルでは、ユーザ が指定したディレクトリと異なる場所に移動した場合、移動先のディレクトリ名 を表示します。これは、CDPATH の機構が動作した場合と、シンボリックリンクを 辿った場合に発生します。 .It eval string ... 指定されたすべての引数を空白で結合し、その結果を解析し直してから コマンドとして実行します。 .It exec [ command arg ... ] コマンドが省略されない場合、そのシェルプロセスは指定されたプログラムに 置き換えられます (command は、シェル組み込みコマンドや関数ではない、本物の プログラムでなければなりません)。exec コマンドにおけるリダイレクトは、 永久性を持つと見なされ、 exec コマンド完了後にも引き続き効力を持ちます。 .It exit [ exitstatus ] シェルを終了します。指定された exitstatus は、シェルの終了ステータスに なります。exitstatus が省略された場合、直前に実行したコマンドの 終了ステータスがシェルの終了ステータスとなります。 .It export name ... それ以後にシェルから実行されるコマンドの環境に、指定された名前の変数が 含まれるようにします (変数のエクスポート)。 変数のエクスポートを取り消す唯一の方法は、変数を unset することです。 以下のように記述することで、エクスポートすると 同時に変数の値を設定することができます。 .Bd -literal -offset indent export name=value .Ed .Pp 引数を指定しない場合、すべてのエクスポートされている名前と値が表示されます。 .It fc [-e editor] [first [last]] .It fc -l [-nr] [first [last]] .It fc -s [old=new] [first] fc は、対話的シェルにそれ以前に入力されたコマンドの内容を 表示、編集、再実行します。 .Bl -tag -width Ds .It -e editor 編集に際し、指定されたエディタ editor を使用します。 editor は変数 PATH を通して検索できるコマンド名です。 -e が指定されなかった場合は、変数 FCEDIT の値が 用いられます。FCEDIT が設定されていないか空に設定されている場合は EDITOR の値が用いられ、それも設定されていないか空ならば .Xr ed 1 が用いられます。 .It -l (ell) (小文字のエル) エディタを起動せずに、コマンド履歴の内容を一覧出力します。 パラメータ first と last で指定した範囲のコマンドが順に (出力の順番は -r オプションの影響を受けます)出力されます。 各コマンドの出力の際にはコマンド番号が付加されます。 .It -n -l で一覧出力する際にコマンド番号を付加しません。 .It -r -l オプションでの一覧や、 編集時 (-l も -s も指定されなかった場合) の順序を反転します。 .It -s エディタを起動せずにコマンドを再実行します。 .It first .It last 一覧出力や編集の対象となるコマンドを選択します。アクセス可能なコマンド の数は変数 HISTSIZE の値で決まります。 first、last の値は以下のいずれかの形式で指定します。 .It [+]number 正の数で、コマンド番号を指定します。コマンド番号は -l オプションで表示させて 調べることができます。 .It -number 負の数で、指定された数だけ現在から遡ったコマンドを指定します。たとえば、 -1 は直前に実行されたコマンドを指定します。 .It string 文字列 string は、過去に実行されたコマンドのうち、 その文字列から始まる最新のものを指定します。 もし -s オプションが指定されて ``old=new'' が指定されていなければ、 最初のオペランドにイコール記号(``='')を含めることはできません。 .El .\" 次の行の .Pp はもともとコメントアウトされていた .Pp fc コマンドの実行にあたり、以下の環境変数の影響を受けます。 .Bl -tag -width Ds .It Va FCEDIT 使用するエディタ名 .It Va HISTSIZE アクセス可能なコマンド数 .El .It fg [ job ] 指定されたジョブまたは現在のジョブをフォアグラウンドに移動します。 .It getopts optstring var POSIX に準拠した getopts コマンドです。 この getopts コマンドにより、以前の getopt コマンドの必要性は減少しました。 最初の引数は文字の列です。各文字の後ろにはコロンをつけることができ、 そのオプションが引数をとることを指示します。 指定された変数に、解析され見つかったオプションが設定されます。 見つかったオプションの次の引数のインデックスはシェル変数 OPTIND に格納されます。 あるオプションが引数をとる場合、その引数はシェル変数 OPTARG に置かれます。 有効でないオプションに出くわすと、変数 var には `?' がセットされます。 getopts はオプション群の末尾に到達すると偽の値 (1) を返します。 .It hash -rv command ... シェルは、コマンドの位置を保持するハッシュテーブルを維持管理しています。 hash コマンドに引数が指定されなかった場合、このテーブルの内容が出力されます。 最後に cd コマンドが実行されてから参照されていない項目には アスタリスク文字 (``*'') が表示されます。 この項目は無効になっているかもしれません。 .Pp 引数を指定した場合、hash コマンドは指定したコマンドをハッシュテーブル から削除し (command が関数ではない場合)、その後でそのコマンドを検索します。 --v オプションを指定した場合、発見したコマンドの位置を表示します。-r オ -プションを指定した場合、関数以外のすべてのエントリをハッシュテーブルから +-v オプションを指定した場合、発見したコマンドの位置を表示します。-r オプション +を指定した場合、関数以外のすべてのエントリをハッシュテーブルから 削除します。 .It jobid [ job ] ジョブ job 中の各プロセスのプロセス ID を表示します。引数 job が 省略された場合、現在のジョブに対して処理を行います。 .It jobs バックグラウンドで走行中の、現在のシェルプロセスの子プロセスの 一覧を出力します。 .It pwd カレントディレクトリを表示します。組み込みコマンドの pwd は カレントディレクトリ名を覚えており、表示するときに再計算しないので、 組み込みコマンドの pwd は同名のプログラムとは異なった表示をする場合があります。 このため処理は高速ですが、カレントディレクトリ の名前を変更した場合でも、以前のディレクトリ名を表示し続けます。 .It Li "read [ -p prompt ] [ -e ] variable ... -p オプションが指定され、かつ標準入力が端末の場合、 prompt をプロンプトとして表示します。 そして標準入力から 1 行入力します。行端の改行文字を削除し、行を前述の 単語分割の方法に従って分割し、各単語を、valiable... で指定する各変数に 順に代入します。 もし、指定された変数の数より分割された単語の数が多ければ、最後の変数に 残りの単語すべて (IFS の文字を区切りにしてそれらも一緒に) が代入されます。 分割された単語の数より多くの変数が指定されていたなら、 余った変数には空文字列が設定されます。 .Pp -t オプションが指定され、かつ入力がなされる前にタイムアウトすると、 read コマンドは値を割当てずに戻ります。 タイムアウト値の後にはオプションで 's', 'm', 'h' のいずれかの一文字 を付けることが出来、それぞれ秒, 分, 時間を陽に指定します。 どれも指定しない場合には 's' であるものとします。 .Pp -e オプションを指定すると、入力中のバックスラッシュ文字を特別扱いします。 バックスラッシュ文字が改行文字の直前にある場合、 バックスラッシュ文字と改行文字は削除されます。 その他の文字の直前にバックスラッシュがある場合、バックスラッシュは削除され、 文字が IFS に含まれていても、IFS の文字でないかのように扱われます。 .It readonly name ... 指定された名前の変数を読み出し専用とし、あとで値を変更したり unset した りすることができないようにします。以下のように記述することで、 変数を読み出し専用と宣言するのと同時に値を設定することも可能です。 .Bd -literal -offset indent readonly name=value .Ed .Pp 引数が指定されない場合、読み出し専用になっている変数の名前の一覧が表示され ます。 .It Li "set [ { -options | +options | -- } ] arg ... set コマンドは 3 通りの異なった機能を持ちます。 .Bl -item .It 引数を指定しなかった場合、すべてのシェル変数の名前と値の一覧を表示します。 .It options が指定された場合、「引数リスト処理」の節で説明した方法で、 指定されたオプションフラグを設定あるいは解除します。 .It 第 3 の用法は、シェルの位置パラメータを変更する際に使用します。オプションの 設定を変更せずに位置パラメータのみを変更したい場合は set コマンドへの最初 の引数として ``--'' を指定します。arg が指定されない場合、 すべての位置パラメータはクリアされます (``shift $#'' を実行することと 等価です)。 .El .Pp .It setvar variable value 変数に値を代入します。(一般に、setvar を使うよりも variable=value と書くほう が望ましいといえます。setvar は、関数内で、パラメータとして渡された名前を持つ 変数に値を代入するためのものです。) .It shift [ n ] 位置パラメータを n 回シフトします。1 回のシフトにより、$2 の値が $1 に、$3 の 値が $2 に代入されます (以下同様)。また、$# の値は 1 減少します。 位置パラメータがない場合、shift は何もしません。 .It trap [ action ] signal ... シェルが指定されたシグナル signal を受けとったときに、action を解析し実行する ように設定します。シグナルはシグナル番号で指定します。action は空文字列に したり、省略したりすることができます。空文字列の場合、指定されたシグナルは 無視され、省略した場合は、指定したシグナルを受けとったときデフォルトの処理を 行ないます。シェルがサブシェルを起動するとき、trap で指定された (かつ 無視するように設定されていない) シグナルの動作をデフォルトの処理に戻します。 シェルが起動したときにすでに無視されるように設定されていたシグナルに対して trap コマンドを使用しても効果はありません。 .It type [name] ... 各 name をコマンドとして解釈し、コマンド検索の結果を出力します。出力さ れる結果は以下のものがあります。シェルのキーワード、エイリアス、シェル の組み込みコマンド、コマンド、痕跡つきエイリアス(tracked alias)、最後に not found (見つからず)があります。エイリアスについては、エイリアス展開 -の結果が出力されます。コマンドと痕跡つきエイリアスについては、そのコマ -ンドの完全なパス名が印刷されます。 +の結果が出力されます。コマンドと痕跡つきエイリアスについては、そのコマンドの +完全なパス名が印刷されます。 .It ulimit [ -HSacdflmnust ] [ limit ] リソースのリミット値 (リミット値については .Xr getrlimit 2 参照) を設定あるいは表示します。 ``limit'' が指定されている場合、指定されたリソースが設定されます。 それ以外の場合、現在のリソース設定値が表示されます。 .Pp ``-H'' が指定された場合、ハードリミットが設定ないし表示されます。 ハードリミット値を下げることは誰にでもできますが、 それを増やすことができるのはスーパユーザだけです。 オプション ``-S'' を指定した場合はソフトリミットになります。 リミット値を表示する場合、``-S'' か ``-H'' のいずれか一方だけしか 指定できません。 デフォルトでは、表示はソフトリミット、設定はハード/ソフトリミット両方です。 .Pp オプション ``-a'' を指定すると全リソースの設定値が表示されます。 この場合、パラメータ ``limit'' は指定できません。 .Pp この他のオプションは、表示あるいは設定するリソースの種類を指定するものです。 これらは互いに排他的です。 .Bl -tag -width Ds .It -c coredumpsize コアダンプファイルの最大サイズ。512 バイトのブロック単位。 .It -d datasize プロセスのデータセグメントの最大サイズ。キロバイト単位。 .It -f filesize ファイルの最大サイズ。512 バイトブロック単位。これがデフォルトです。 .It -l lockedmem プロセスがロックできるメモリサイズの最大値。キロバイト単位。 .It -m memoryuse プロセスの常駐セットサイズの最大値。キロバイト単位。 .It -n nofiles あるプロセスがオープンできるファイル記述子の最大数。 .It -s stacksize スタックセグメントサイズの最大値。キロバイト単位。 .It -t time 各プロセスで消費できる CPU 時間の最大値。秒単位。 .It -u userproc このユーザ ID で同時に走らせうる最大プロセス数。 .El .It umask [ mask ] umask の値 ( .Xr umask 2 を参照) を、指定された 8 進数の値に設定します。引数が 省略された場合、現在の umask の値が表示されます。 .It unalias [-a] [name] ``name'' が指定された場合、指定された名前のエイリアスを削除します。 ``-a'' オプションが指定された場合、すべてのエイリアスを削除します。 .It unset name ... 指定された変数または関数を unset し、エクスポートされていない状態にします。 指定された名前の変数も関数も存在する場合、変数と関数の両方が unset されます。 .It wait [ job ] 指定されたジョブ job が終了するのを待ち、ジョブ内の最後のプロセスの 終了ステータスを返します。引数が省略された場合、すべてのジョブが終了する まで待ち、終了ステータス 0 を返します。 .El .Ss コマンド行編集 .Nm が端末から対話的に実行されている場合、現在入力中のコマンドおよび コマンド履歴 (組み込みコマンド fc 参照) を vi モードのコマンド行編集機能 により編集することができます。 このモードでは、vi のマニュアルに示されているコマンドのサブセットを用います。 コマンド `set -o vi' により vi モードが開始され、vi の挿入モードに移行します。 vi モード中では、 挿入モードとコマンドモードの両方を自由に切り替えることが可能です。 vi モードは vi と同様であり、 キー によりコマンドモードに移行し、コマンドモードで キーを叩くことで、 行の内容がシェルに渡されます。 .Pp 同様に、コマンド `set -o emacs' により emacs 風のコマンド行編集機能の サブセットを使うことができるようになります。 .Sh 関連項目 .Xr expr 1 , .Xr test 1 .Sh 歴史 .Nm コマンドは、 .At V.1 で登場しました。 .\" -Amended by N.Kumagai 97.12.30 diff --git a/ja/man/man1/tcpdump.1 b/ja/man/man1/tcpdump.1 index db95b907cd..e1fb776339 100644 --- a/ja/man/man1/tcpdump.1 +++ b/ja/man/man1/tcpdump.1 @@ -1,1283 +1,1283 @@ .\" @(#) %Header: tcpdump.1,v 1.67 97/06/30 16:31:50 leres Exp % (LBL) .\" .\" Copyright (c) 1987, 1988, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1997 .\" The Regents of the University of California. All rights reserved. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that: (1) source code distributions .\" retain the above copyright notice and this paragraph in its entirety, (2) .\" distributions including binary code include the above copyright notice and .\" this paragraph in its entirety in the documentation or other materials .\" provided with the distribution, and (3) all advertising materials mentioning .\" features or use of this software display the following acknowledgement: .\" ``This product includes software developed by the University of California, .\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of .\" the University nor the names of its contributors may be used to endorse .\" or promote products derived from this software without specific prior .\" written permission. .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. .\" .\" jpman %Id: tcpdump.1,v 1.3 1997/05/23 22:18:59 yugawa Stab % .TH TCPDUMP 1 "30 June 1997" .SH 名称 tcpdump \- ネットワーク上のトラフィックデータをダンプします .SH 書式 .na .B tcpdump [ .B \-adeflnNOpqStvx ] [ .B \-c .I count ] [ .B \-F .I file ] .br .ti +8 [ .B \-i .I interface ] [ .B \-r .I file ] [ .B \-s .I snaplen ] .br .ti +8 [ .B \-T .I type ] [ .B \-w .I file ] [ .I expression ] .br .ad .SH 解説 .LP \fItcpdump\fP は、オプションで指定されたネットワークインタフェース上で 取得可能なパケットのヘッダのうち \fIexpression\fP にマッチするものを出力 します。 .LP .B SunOS 上の nit ないし bpf の場合: .I tcpdump を実行するには、 .I /dev/nit ないし .IR /dev/bpf* への読み込みアクセス権が必要です。 .B Solaris 上の dlpi の場合: .IR /dev/le 等のネットワーク仮想デバイスへの読み込みアクセス権が必要です。 .B HP-UX 上の dlpi の場合: root か root に setuid されてインストールされている場合のみ実行可能です。 .B IRIX 上の snoop の場合: root か root に setuid されてインストールされている場合のみ実行可能です。 .B Linux の場合: root か root に setuid されてインストールされている場合のみ実行可能です。 .B Ultrix および Digital UNIX の場合: スーパユーザが、 .IR pfconfig (8) を用いて promiscuous-mode での操作を許可していれば、どのユーザも .BR tcpdump を起動できます。 .B BSD の場合: .IR /dev/bpf* への読み込みアクセス権が必要です。 .SH オプション .TP .B \-a ネットワークアドレスとブロードキャストアドレスを名前に変換しようとします。 .TP .B \-c \fIcount\fP で指定した数のパケットを受信した後に終了します。 .TP .B \-d 解釈されたパケットマッチングコードを読みやすい形に整形した後、 標準出力にダンプして停止します。 .TP .B \-dd .B C プログラムの断片の形でパケットマッチングコードをダンプします。 .TP .B \-ddd (先頭に個数を付加した)十進数の形でパケットマッチングコードをダンプします。 .TP .B \-e 各ダンプ行ごとに、リンクレベルのヘッダを出力します。 .TP .B \-f 外部ホストの IP アドレスについては、シンボルでなく数値で表示します。 (本オプションは、Sun の yp サーバに重大な障害が発生するのを回避するこ とを意図してます。\(em 通常は、Sun の yp サーバは、ローカルに存在しない IP アドレスを永久に変換しつづけてハングします。) .TP .B \-F フィルタの表現として、\fIfile\fP に記述してある内容を用います。 コマンドラインで指定された追加表現は、無視されます。 .TP .B \-i \fIinterface\fP で指定されたインタフェースを監視します。 指定されない場合には、\fItcpdump\fP はシステムインタフェースリストの中で 最も小さい番号の稼働中のものを検索し、監視するインタフェースとして設定 します(ループバックインタフェースは検索しません)。 この動作は、最初にインタフェースが選択された時点で終了します。 .TP .B \-l 標準出力を行バッファリングにします。データを捕捉しつつ、 そのデータを見たい場合には、本オプションは有効です。例えば .br ``tcpdump\ \ \-l\ \ |\ \ tee dat'' や ``tcpdump\ \ \-l \ \ > dat\ \ &\ \ tail\ \ \-f\ \ dat'' のように使用します。 .TP .B \-n アドレス(IP アドレスやポート番号など)を名前に変換しません。 .TP .B \-N ホスト名のうち、ドメイン名の表示をしません。例えば、本オプションを 指定すると、``nic.ddn.mil'' とは表示されず、かわりに ``nic'' とだけ表示し ます。 .TP .B \-O パケットマッチングコードのオプティマイザを動かしません。本オプションは、 オプティマイザ中のバグを疑う場合にのみ有効なものです。 .TP .B \-p ネットワークインタフェースを、promiscuous mode に設定しません。 ネットワークインタフェースは、何らかの理由により promiscuous mode に設定 されることもあり得るということに注意してください。ゆえに `-p' オプションは、`ether host {local-hw-addr} or ether broadcast' の短縮形として使うことは出来ません。 .TP .B \-q 素早い(静かな?)出力を行ないます。出力する行を短くするために、通常出力 されるプロトコル情報の一部は出力されません。 .TP .B \-r パケットを、\fIfile\fR で指定したファイル (-w オプションで作成されます)か ら読み込みます。\fIfile\fR として``-''が指定された場合は標準入力が用いら れます。 .TP .B \-s デフォルトの 68 バイト(SunOS の NIT では最小値は実際には 96)ではなくて、 \fIsnaplen\fP だけのデータを各パケットから取得します。68 バイトという データ長は、IP, ICMP, TCP, UDP のパケットを取得する分には十分ですが、 ネームサーバや NFS のパケットについてはプロトコル情報が切り詰められるこ とがあります(これについては、以後の説明を参照して下さい)。 スナップショットが限られた量しかとれずに切り 詰められたパケットは、出力に ``[|\fIproto\fP]'' という文字列がいっしょ に表示されます。 \fIproto\fP は、切り詰めが行われたプロトコルレベルの名 前です。大きなスナップショットをとる場合には、それだけパケット処理の時 間がかかるということと、パケットバッファリング用のバッファの量が減ると いうことに注意してください。これにより、パケットが消失するかもしれませ ん。\fIsnaplen\fP の大きさを、必要なプロトコル情報を取得できる最小の値に とどめるようにしてください。 .TP .B \-T "\fIexpression\fP" により選択されたパケットを強制的に \fItype\fR で 指定されたタイプと解釈します。有効なタイプは、 \fBrpc\fR (リモートプロシージャコール) \fBrtp\fR (リアルタイムアプリケーションプロトコル) \fBrtcp\fR (リアルタイムアプリケーション制御プロトコル) \fBvat\fR (ビジュアルオーディオツール) \fBwb\fR (ディストリビューテッドホワイトボード) です。 .TP .B \-S TCP シーケンス番号を相対番号ではなく、絶対番号で出力します。 .TP .B \-t 各ダンプ行のタイムスタンプを出力しません。 .TP .B \-tt 各行毎にタイムスタンプを人間が読みやすい形に変換せずに出力します。 .TP .B \-v (少しではありますが)出力情報を増やします。例えば、IP パケット中の TTL や、サービス情報の型を出力します。 .TP .B \-vv さらに多くの情報を出力します。例えば、NFS の返答パケットの追加 フィールドを出力します。 .TP .B \-w 受信した生パケットを、解析したり画面に出力したりせずに \fIfile\fR で指定 したファイルに出力します。本オプションを用いて取得したパケットは \-r オプションを用いることで情報を見ることができます。\fIfile\fR で指定す るファイル名が ``-'' の場合には、標準出力を用います。 .TP .B \-x リンクレベルヘッダを除いた各パケットの内容を 16 進出力します。 パケットサイズが .I snaplen バイトより小さい場合にはパケットの全部の内容を、それ以外の場合には、 .I snaplen バイト分のデータをパケットごとに出力します。 .IP "\fI expression\fP" .RS ダンプするパケットを選択します。\fIexpression\ が指定されない場合には、 ネットワーク上のすべてのパケットがダンプ対象になります。それ以外の場 合には、\fIexpression\fP の条件が真になるパケットのみダンプします。 .LP \fIexpression\fP は、1 つ以上の .I プリミティブ から成り立ちます。 プリミティブは通常 1 つ以上の限定子のついた .I id (名前もしくは番号)から成り立ちます。限定子は、3 種類あります。 .IP \fI型\fP 限定子は id 名や番号が参照するものの種類を指します。型には .BR host 、 .B net 、 .B port があります。例えば、`host foo', `net 128.3', `port 20' のように用います。 型限定子が指定されない場合には、 .B host が指定されたものとみなされます。 .IP \fI方向\fP 限定子は、 パケットが .I id へ出ていく方向か、 .I id から来る方向か、 もしくはその両方かという、特定の転送方向を指定します。 指定可能な方向は、 .BR src、 .BR dst、 .B "src or dst"、 .BR "src and dst" の 4 つです。 例えば、`src foo'、 `dst net 128.3'、 `src or dst port ftp-data' のように 指定します。もし方向限定子が指定されない場合には、 .B "src or dst" が指定されたものとみなします。 `null' リンクレイヤ (つまり、slip などポイント・トゥ・ポイント・プロトコル) では、 必要な方向を指定するのに .B inbound や .B outbound 限定子を用いる事ができます。 .IP \fIプロトコル\fP 限定子は、特定のプロトコルに一致するパケットのみに制限します。 プロトコルとして指定可能なものは、 .BR ether, .BR fddi, .BR ip, .BR arp, .BR rarp, .BR decnet, .BR lat, .BR sca, .BR moprc, .BR mopdl, .BR iso, .BR esis, .BR isis, .B tcp, .BR udp です。 例えば `ether src foo'、 `arp net 128.3'、 `tcp port 21' のように使用 します。もしプロトコル限定子が指定されない場合には、上記のプロトコルの うち、型に矛盾しないすべてのものが指定されたものとみなします。 例えば `src foo' は、`(ip or arp or rarp) src foo' (これが正しい形式でな い事を除いて)と、`net bar' は `(ip or arp or rarp) net bar' と同義であ り、また `port 53' は `(tcp or udp) port 53' と同義です。 .LP [`fddi' は実際には `ether' の別名になっています。解析ではこれらを``特定の ネットワークインタフェースで使われるデータリンクレベル''を意味するもの として同様に扱います。FDDI ヘッダはイーサネットに似た送信元と宛先 アドレスを含み、そしてしばしばイーサネットに似たパケット型を含むので、 イーサネットのフィールドと同じように FDDI のフィールドをフィルタリング できます。FDDI ヘッダは他のフィールドも含みますが、フィルタ表現の中で 明示的にそれらを指定することはできません。] .LP 上記に追加して、いくつかの特別な`プリミティブ'キーワードがあります。 これらのキーワードは .BR gateway, .BR broadcast, .BR less, .B greater, と算術演算表現 です。これらの後ろにパターンが続く事はありません。 プリミティブキーワードについては後述します。 .LP より複雑なフィルタの表現は、プリミティブの結合に .BR and, .B or, .B not を用いることで実現されます。例えば、 `host foo and not port ftp and not port ftp-data' です。 タイプ量を少なくするために、同一の限定子リストは、省略することが可能です。 例えば、`tcp dst port ftp or ftp-data or domain' は、 `tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain' と同じ意味です。 .LP 許されるプリミティブは、以下の通りです。 .IP "\fBdst host \fIhost\fR" IP パケットの宛先フィールドが \fIhost\fP で指定したものの場合に真となります。 \fIhost\fP は、ホスト名もしくは IP アドレスです。 .IP "\fBsrc host \fIhost\fR" IP パケットの送信元フィールドが \fIhost\fP で指定したものの場合に真となります。 .IP "\fBhost \fIhost\fP IP パケットの送信元フィールドもしくは宛先フィールドが \fIhost\fP で指定した ものの場合に真となります。 上記の host プリミティブの表現には、\fBip\fP, \fBarp\fP, \fBrarp\fP を 以下のように付加することが可能です。 .in +.5i .nf \fBip host \fIhost\fR .fi .in -.5i という表記は、 .in +.5i .nf \fBether proto \fI\\ip\fB and host \fIhost\fR .fi .in -.5i と同じ意味です。 \fIhost\fR が複数の IP アドレスを持つホスト名であった場合、それぞれのアドレス について照合を検査します。 .IP "\fBether dst \fIehost\fP イーサネットパケットの宛先アドレスが \fIehost\fP だった場合に真となります。 \fIehost\fP は、/etc/ethers に記述された名前もしくはイーサネットアドレスの値が用いられます (イーサネットアドレスの形式については、 .IR ethers (3N) を参照)。 .IP "\fBether src \fIehost\fP イーサネットパケットの送信元アドレスが \fIehost\fP だった場合に真となります。 .IP "\fBether host \fIehost\fP イーサネットパケットの送信元アドレスもしくは宛先アドレスが \fIehost\fP だった 場合に真となります。 .IP "\fBgateway\fP \fIhost\fP パケットが \fIhost\fP で指定したアドレスのマシンをゲートウェイとしている場合に 真となります。言い替えると、送信元もしくは宛先のイーサネットアドレスが \fIhost\fP であり、送信元と宛先のどちらの IP アドレスも \fIhost\fP でない ということです。 \fIhost\fP は /etc/hosts ファイルと /etc/ethers の両方で定義されている名前を 指定する必要があります(等価な表現は、 .in +.5i .nf \fBether host \fIehost \fBand not host \fIhost\fR .fi .in -.5i です。この場合 \fIhost / ehost\fP のどちらにも名前もしくは値を用いることが 可能になります。) .IP "\fBdst net \fInet\fR" パケットの宛先 IP アドレスが、\fInet\fP で指定されたネットワークに属するもので ある場合に真となります。\fInet\fP は、アドレス値もしくは /etc/networks で 定義されたネットワーク名のいずれかを指定可能です(詳しくは、\fInetworks(4)\fP を参照)。 .IP "\fBsrc net \fInet\fR" パケットの送信元 IP アドレスが、\fInet\fP で指定されたネットワークに属するもので ある場合に真となります。 .IP "\fBnet \fInet\fR" 送信元 IP アドレスもしくは宛先 IP アドレスが \fInet\fP で指定された ネットワークに属するものである場合に真となります。 .IP "\fBnet \fInet\fR \fBmask \fImask\fR" IP アドレスが、指定された \fInet\fR および netmask の値で決まる ネットワークに属するものである場合に真となります。 \fBsrc\fR や \fBdst\fR を指定する事も可能です。 .IP "\fBnet \fInet\fR/\fIlen\fR" IP アドレスが、指定された \fInet\fR および \fIlen\fR のビット長のネットマスクで 決まるネットワークに属するものである場合に真となります。 \fBsrc\fR や \fBdst\fR を指定する事も可能です。 .IP "\fBdst port \fIport\fR" パケットが ip/tcp (TCP パケット)もしくは ip/udp(UDP パケット)であり、宛先 ポート番号が \fIport\fP の場合に真となります。 \fIport\fP で指定されるポート番号は、値もしくは /etc/services で定義 されているサービス名で指定可能です( .IR tcp (4P) や .IR udp (4P) を参照)。 ポート番号がサービス名にて指定された場合、ポート番号とプロトコルの両方がチェック 対象になります。ポート番号や、あいまいなサービス名が指定された場合には、 ポート番号のみがチェック対象となります(例えば、\fBdst port 513\fR は、 tcp/login と udp/who の両方を出力し、\fBport domain\fR は、tcp/domain と udp/domain の両方を出力します)。 .IP "\fBsrc port \fIport\fR" パケットが \fIport\fP で指定した送信元ポート番号を保持している場合に 真となります。 .IP "\fBport \fIport\fR" パケットの送信元ポート番号もしくは宛先ポート番号が \fIport\fP の場合に真と なります。上記のポート番号の指定については、すべてキーワード \fBtcp\fP もし くは \fBudp\fP を用いて、ある程度候補を絞り込むことが可能です。例えば、 .in +.5i .nf \fBtcp src port \fIport\fR .fi .in -.5i と指定した場合には、tcp パケットのみが条件一致の評価対象となります。 .IP "\fBless \fIlength\fR" パケットが \fIlength\fP で指定した長さ以下の場合、真となります。 これは、 .in +.5i .nf \fBlen <= \fIlength\fR .fi .in -.5i の指定と等価です。 .IP "\fBgreater \fIlength\fR" パケットが \fIlength\fP で指定した長さ以上の場合、真となります。 これは、 .in +.5i .nf \fBlen >= \fIlength\fR .fi .in -.5i と等価です。 .IP "\fBip proto \fIprotocol\fR" パケットが \fIprotocol\fP で指定したプロトコル型の IP パケット( 詳細は .IR ip (4P) を参照)の場合に真となります。 \fIprotocol\fP は、数字もしくは \fIicmp\fP, \fIigrp\fP, \fIudp\fP, \fInd\fP, \fItcp\fP のいずれかの名前が指定可能です。\fItcp\fP, \fIudp\fP, \fIicmp\fP の 各識別子はキーワードでもであり、バックスラッシュ(\\)(C-shell では \\\\)を用 いてエスケープしなければならないことに注意してください。 .IP "\fBether broadcast\fR" パケットがイーサネットブロードキャストパケットの場合に真となります。\fIether\fP キーワードは、省略可能です。 .IP "\fBip broadcast\fR" パケットが IP ブロードキャストパケットの場合に真となります。オール 1 と オール 0 の二つの形式のブロードキャストアドレスを検査し、そして ローカルサブネットマスクを調べます。 .IP "\fBether multicast\fR" パケットがイーサネットマルチキャストパケットの場合に真となります。\fIether\fP キーワードは、省略可能です。 なお、この指定は、`\fBether[0] & 1 != 0\fP' の短縮系です。 .IP "\fBip multicast\fR" パケットが IP マルチキャストパケットの場合に真となります。 .IP "\fBether proto \fIprotocol\fR" パケットが \fIprotocol\fR で指定した ether 型の場合に真になります。 \fIprotocol\fP は、数字もしくは \fIip\fP, \fIarp\fP, \fIrarp\fP のような 名前を指定可能です。 これらの識別子はキーワードでもあり、バックスラッシュ(\\)でエスケープし なければならないことに注意してください。 [FDDI の場合(例えば `\fBfddi protocol arp\fR')、プロトコルの識別は IEEE802.2 の論理リンク制御(LLC)ヘッダによって行われます。通常これは FDDI ヘッダの上の層にあります。\fItcpdump\fP は、プロトコル識別子で フィルタリングするときは、すべての FDDI パケットは LLC ヘッダを含み、 かつその LLC ヘッダがいわゆる SNAP 形式であると仮定します。] .IP "\fBdecnet src \fIhost\fR" DECNET パケットの送信元アドレスが .IR host の場合に真となります。これは ``10.123'' という形式のアドレスでも DECNET の ホスト名でも構いません。[DECNET のホスト名は DECNET を動かすように設定され た Ultrix システムのみでサポートされます。] .IP "\fBdecnet dst \fIhost\fR" DECNET パケットの宛先アドレスが .IR host の場合に真となります。 .IP "\fBdecnet host \fIhost\fR" DECNET パケットの送信元あるいは宛先アドレスが .IR host の場合に真となります。 .IP "\fBip\fR, \fBarp\fR, \fBrarp\fR, \fBdecnet\fR, \fBiso\fR" .in +.5i .nf \fBether proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 .IP "\fBlat\fR, \fBmoprc\fR, \fBmopdl\fR" .in +.5i .nf \fBether proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 \fItcpdump\fP は今のところこれらのプロトコルを解釈できない事に注意して ください。 .IP "\fBtcp\fR, \fBudp\fR, \fBicmp\fR" .in +.5i .nf \fBip proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 .IP "\fBesis\fR, \fBisis\fR" .in +.5i .nf \fBiso proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 \fItcpdump\fR はこれらのプロトコルを完全には解釈できない事に注意して ください。 .IP "\fIexpr relop expr\fR" \fIrelop\fRは、>, <, >=, <=, =, != のいずれかであり、\fIexpr\fR の部分に は、(標準 C 言語の構文で表現された)整数定数や通常の二項演算子 [+, -, *, /, &, |]、length 演算子、そして特殊なパケットデータへのアクセス演算子などか らなる算術表現が入って、その関係が成立する場合に真となります。 パケット内部のデータにアクセスするためには、以下の構文を用います。 .in +.5i .nf \fIproto\fB [ \fIexpr\fB : \fIsize\fB ]\fR .fi .in -.5i \fIproto\fRは、\fBether, fddi, ip, arp, rarp, tcp, udp, \fR, または \fBicmp\fR のいずれかであり、インデックス操作を行うプロトコル層を指示 します。 指示したプロトコル層からの相対バイトオフセットは、\fIexpr\fR で指定します。 \fIsize\fR は省略可能で、取得するフィールドのデータ長を表します。 データ長としては、1,2,4 のいずれかを指定することが可能であり、デフォルトでは 1 が指定されたものとみなされます。 キーワード \fBlen\fP で示されるデータ長演算子は、パケット長を与えます。 例えば、`\fBether[0] & 1 != 0\fP' は、全てのマルチキャストパケットを捕捉します。 `\fBip[0] & 0xf != 5\fP' という表現は、すべてのオプション付きIPパケットを捕捉す ることを意味します。`\fBip[6:2] & 0x1fff = 0\fP' という表現は、フラグメントのな いデータグラムパケット、もしくはフラグメント化されたデータグラムのうち 最初のフラグメントを捕捉します。 この検査は、\fBtcp\fP および \fBudp\fP のインデックス操作においては、暗黙のうち に適用されます。 例えば、\fBtcp[0]\fP は常に TCP ヘッダの先頭バイトを指し、 決して各フラグメントの先頭バイトを指すものではありません。 .LP プリミティブは、以下のように組み合わせることが可能です。 .IP 括弧で括られた一連のプリミティブや演算子 (括弧はシェルの特殊文字なのでエスケープする必要があります)。 .IP 否定 (`\fB!\fP' or `\fBnot\fP'). .IP 論理積 (`\fB&&\fP' or `\fBand\fP'). .IP 論理和 (`\fB||\fP' or `\fBor\fP'). .LP 否定は、最も高い演算優先度を持ちます。論理和と論理積は、同じ演算優先度を持ち、 左から右へ評価されます。論理積の場合には、単に識別子を並べるのではなく、 明示的に \fBand\fR を使用しなければならないことに注意して下さい。 .LP キーワードなしで識別子が与えられている場合には、最も最近用いられたキーワードが 付加されているものと仮定されます。 例えば、 .in +.5i .nf \fBnot host vs and ace\fR .fi .in -.5i は、 .in +.5i .nf \fBnot host vs and host ace\fR .fi .in -.5i の短縮形ですが、 .in +.5i .nf \fBnot ( host vs or ace )\fR .fi .in -.5i と混同してしまいがちなので気をつけましょう。 .LP 引数 expression は、単一の引数としても複数の引数としても、どちらか便利な 方で、tcpdump に渡すことができます。 一般的に、引数がシェルのメタキャラクタを含む場合、その引数をクォート された単一の引数としてプログラムに渡す方が容易です。 複数の引数は、解析される前にスペースで連結されます。 .SH 使用例 .LP \fIsundown\fP に到達する、もしくはそこから送信されるパケットのすべてを 表示する場合には、以下のように実行します。 .RS .nf \fBtcpdump host sundown\fP .fi .RE .LP \fIhelios\fR と、\fIhot\fR もしくは \fIace\fR の間のトラフィックを表示する 場合には、以下のように実行します。 .RS .nf \fBtcpdump host helios and \\( hot or ace \\)\fP .fi .RE .LP \fIace\fR と、\fIhelios\fR 以外のホストとの間でやりとりされるすべての IP パケットを表示する場合には、以下のように実行します。 .RS .nf \fBtcpdump ip host ace and not helios\fP .fi .RE .LP ローカルなホストと Berkeley のホストとの間でやりとりされるすべての トラフィックを表示する場合には、以下のように実行します。 .RS .nf .B tcpdump net ucb-ether .fi .RE .LP インターネットゲートウェイ \fIsnup\fP を通過するすべての ftp トラフィックを表示する場合には、以下のように実行します (シェルが括弧を誤って解釈しないよう、フィルタを表現する引数がクォートさ れていることに注意して下さい)。 .RS .nf .B tcpdump 'gateway snup and (port ftp or ftp-data)' .fi .RE .LP 送信元アドレスと宛先アドレスの両方がローカルネットワーク内のホスト のものでないトラフィックについて表示する場合には、以下のように実行しま す (実行するホストが他のネットワークに対するゲートウェイの場合、そのホスト が属すローカルネットワークでは、このコマンドは成功しないでしょう)。 .RS .nf .B tcpdump ip and not net \fIlocalnet\fP .fi .RE .LP ローカルネットワーク外のホストとの通信において、TCP による各通信単位 のスタートパケットとエンドパケット(SYN と FIN パケット)を表示するには、以 下のように実行します。 .RS .nf .B tcpdump 'tcp[13] & 3 != 0 and not src and dst net \fIlocalnet\fP' .fi .RE .LP ゲートウェイ \fIsnup\fP を中継される IP パケットのうち、576 バイトより大きいもの を表示するには、以下のように実行します。 .RS .nf .B tcpdump 'gateway snup and ip[2:2] > 576' .fi .RE .LP イーサネット上でブロードキャストもしくはマルチキャストを経由して送られる もの以外の IP ブロードキャストもしくはマルチキャストパケットを表示するには、 以下のように実行します。 .RS .nf .B tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224' .fi .RE .LP echo 要求/応答以外(つまり ping パケット以外)の全ての ICMP パケットを 表示するには、以下のように実行します。 .RS .nf .B tcpdump 'icmp[0] != 8 and icmp[0] != 0' .fi .RE .SH 出力形式 .LP \fItcpdump\fP の出力は、プロトコル依存です。以下の説明では、簡単な パラメータの記述と、おおよそのフォーマットの説明を行ないます。 .de HD .sp 1.5 .B .. .HD リンクレベルヘッダ .LP もし '-e' オプションが指定されると、リンクレベルヘッダが出力されます。 イーサネットにおいては、送信元と宛先のアドレス、プロトコル、そして パケット長が出力されます。 .LP FDDI ネットワークにおいては、'-e' オプションが指定されると \fItcpdump\fP は、`フレーム制御'フィールド、発信元と宛先アドレス、そしてパケット長を 出力します。`フレーム制御'フィールドはパケットの残りの部分の解釈を決定 します。(IP データグラムを含むような)通常のパケットは `async' パケットで、 0 から 7 の間の優先順位を持ちます。例えば、`\fBasync4\fR' です。こうした パケットは IEEE802.2 の論理リンク制御 (LLC) パケットを含むと仮定されます。 LLC ヘッダは、それが ISO データグラムでない場合やいわゆる SNAP パケットのと きには出力されます。 .LP \fI(注意:以下の記述は、利用者が RFC1144 に記述されている SLIP 圧縮ア ルゴリズムについての知識がある前提で書いてます。)\fP .LP SLIP によるリンクにおいては、方向指示子(``I'' が入力方向、``O'' が出力方向)、パケット型、そして圧縮情報が出力されます。 パケット型は、最初に出力されます。パケット型には \fIip\fP、\fIutcp\fP、そして \fIctcp\fP の 3 つがあります。 \fIip\fR 型パケットの場合、上記以上のリンク情報は表示されません。 TCP パケットの場合には、コネクション識別子がパケット型に続いて出力されます。 パケットが圧縮されている場合、符号化されたヘッダが出力されます。 特殊な場合は \fB*S+\fIn\fR や \fB*SA+\fIn\fR のように出力されます。ここ で \fIn\fR は、シーケンス番号(もしくはシーケンス番号および ack)が変更された回 数です。特殊な場合でなければ、0 回以上の変更について出力されます。 変更は、U (緊急(urgent)ポインタ)、W(ウィンドウ)、A(ack)、S(シーケンス番号)、 そして I(パケット ID)で示され、変動量(+n or -n)もしくは新しい値(=n)が続きます。 最後に、パケット内のデータの総量および圧縮ヘッダ長が出力されます。 .LP 例えば、以下の行は、出力方向の圧縮 TCP パケットを、暗黙のコネクション識別子 とともに表示しています。ack は 6 変わり、シーケンス番号は 49 変わり、パケット ID は 6 変わってます。3 バイトのデータと6 バイトの圧縮ヘッダが存在します。 .RS .nf \fBO ctcp * A+6 S+49 I+6 3 (6)\fP .fi .RE .HD ARP/RARP パケット .LP arp/rarp パケットの出力は、要求型とその引数を示してい ます。出力形式は、その出力のみで理解可能なように作られています。 以下に、ホスト \fIrtsg\fP からホスト \fIcsam\fP への `rlogin' 開始時の パケットの実例を示します。 .RS .nf .sp .5 \f(CWarp who-has csam tell rtsg arp reply csam is-at CSAM\fP .sp .5 .fi .RE 1行目は、ホスト rtsg が、ホスト csam のイーサネットアドレスを問い合わせる 目的で arp パケットを送信していることを意味します。ホスト csam は、自分自身 のイーサネットアドレスを返答しています(この例では、イーサネットアドレス は大文字で、インターネットアドレス部は小文字で表記してます)。 .LP \fBtcpdump \-n\fP として起動した場合には、少し冗長になります。 .RS .nf .sp .5 \f(CWarp who-has 128.3.254.6 tell 128.3.254.68 arp reply 128.3.254.6 is-at 02:07:01:00:01:c4\fP .fi .RE .LP \fBtcpdump \-e\fP として起動した場合には、最初のパケットはブロードキャスト パケットであり、次のパケットはポイントツーポイントのパケットであることが わかります。 .RS .nf .sp .5 \f(CWRTSG Broadcast 0806 64: arp who-has csam tell rtsg CSAM RTSG 0806 64: arp reply csam is-at CSAM\fP .sp .5 .fi .RE 最初のパケットについては、送信元のイーサネットアドレスは RTSG であり、 宛先はイーサネットブロードキャストアドレス、型フィールドには 16 進数の値 0806(ETHER_ARP を意味します)が格納されており、総パケット長は 64 バイトである と表示してます。 .HD TCP パケット .LP \fI(注意:以下の記述は、RFC793 に記述されている TCP プロトコルについての知識 があることを前提に記述されてます。この知識がない場合、本記述と tcpdump の いずれもあなたには役に立たないでしょう。)\fP .LP TCP プロトコル行の一般的な形式は、以下の通りです。 .RS .nf .sp .5 \fIsrc > dst: flags data-seqno ack window urgent options\fP .sp .5 .fi .RE \fIsrc\fP と \fIdst\fP は、それぞれ送信元と宛先の IP アドレスと ポート番号です。\fIflags\fP の部分には、S (SYN),F (FIN), P (PUSH) ,R (RST) の組み合わせ、もしくは単なる `.' (フラグなし)が入ります。 \fIdata-seqno\fP は、このパケット内のデータがシーケンス空間のどの部分に あたるかを示します(以下の例を参照して下さい)。 \fIack\fP は、本コネクション上を逆方向に次に流れるデータパケットの シーケンス番号です。 \fIwindow\fP は、本コネクションの逆方向のパケットを格納するバッファサイズ です。 \fIurg\fP は、パケット中に `urgent'(緊急)データが格納されていることを示しま す。 \fIoptions\fP は、例えば のように、アングルブラケット(大小記号)で くくられた tcp オプションです。 .LP \fIsrc、dst\fP、そして \fIflags\fP は、常に表示されます。他のフィールドは、 パケットの TCP ヘッダに依存し、表示できる場合だけ表示されます。 .LP 以下の例は、ホスト \fIrtsg\fP からホスト \fIcsam\fP への rlogin 開設時のシーケンスの一部です。 .RS .nf .sp .5 \s-2\f(CWrtsg.1023 > csam.login: S 768512:768512(0) win 4096 csam.login > rtsg.1023: S 947648:947648(0) ack 768513 win 4096 rtsg.1023 > csam.login: . ack 1 win 4096 rtsg.1023 > csam.login: P 1:2(1) ack 1 win 4096 csam.login > rtsg.1023: . ack 2 win 4096 rtsg.1023 > csam.login: P 2:21(19) ack 1 win 4096 csam.login > rtsg.1023: P 1:2(1) ack 21 win 4077 csam.login > rtsg.1023: P 2:3(1) ack 21 win 4077 urg 1 csam.login > rtsg.1023: P 3:4(1) ack 21 win 4077 urg 1\fP\s+2 .sp .5 .fi .RE 最初の行は、ホスト rtsg の TCP ポート 1023 番からホスト csam の \fIlogin\fP ポートに対してパケットを送信していることを意味します。\fBS\fP は、 パケットの \fISYN\fP フラグが設定されていることを意味します。 パケットのシーケンス番号は 768512 番であり、データは含みません。 (表記は `first:last(nbytes)' であり、これは`シーケンス番号 \fIfirst\fP か ら \fIlast\fP までの \fIlast\fP を含まない \fInbytes\fP のユーザデータという こと'を意味しています。) このパケット中に ack はなく、有効な受信ウィンドウの大きさは 4096 バイトで あり、1024 バイトの最大セグメントサイズ要求を行なうオプションが付加され ています。 .LP csam は、rtsg から送られたパケットと類似したパケットを送り返しますが、 rtsg の送った SYN に対する ack が含まれるところが異なり ます。続いて、rtsg は csam の SYN に対する ack を返します。 `.' は、S (SYN),F (FIN), P (PUSH) ,R (RST) のいずれのフラグも 立っていないことを意味します。 パケットはデータを含まないため、データシーケンス番号は入りません。 ack シーケンス番号が小さい整数 (1) であることに注意して下さい。 \fBtcpdump\fP は、初めて TCP の`通信'を検出すると、パケットから取得した シーケンス番号を表示します。通信のその後のパケットについては、現在の パケットシーケンス番号と、この最初のシーケンス番号の間の差を表示します。 このことは、最初に取得した以降のシーケンス番号は、通信データストリーム の相対位置として解釈できることを意味します(最初の各方向のデータバイト は 1 です)。`-S' は、本機能を無効にし、元のシーケンス番号を表示します。 .LP 6 行目では、rtsg は csam に 19 バイトのデータを送信しています (rtsg \(-> csam の 方向の通信における、2 バイト目から 20 バイト目までのデータ)。PUSH フラグが このパケットでは設定されています。 7 行目では、csam は rtsg から 20 バイトまでのデータを受けとった旨の レスポンスを rtsg に返してます。csam の受信ウィンドウが19バイト小さくなっ たことから、これらのデータのほとんどは、ソケットバッファの中に存在する ことが分かります。 csam は、rtsg に 1 バイトのデータを送信してます。 8 行めと 9 行めでは、csam は緊急 (urgent) で PUSH フラグの設定された 2 バイトデータを送信しています。 .LP スナップショットが小さ過ぎて \fBtcpdump\fP が TCP ヘッダ全体を捕えなかった場合、 可能な限りのヘッダを解釈し、``[|\fItcp\fP]'' を表示して 残りを解釈できなかったことを示します。 (短か過ぎるまたはヘッダを越えてしまうといった) 不正なオプションを ヘッダが持つ場合には、tcpdump は ``[\fIbad opt\fP]'' を表示して 残りのオプションを解釈しません (どこから開始したら良いのか分からないからです)。 ヘッダ長によりオプションが存在することが分かるが、 IP データグラム長がオプションがそこにあるために十分な長さではない場合に、 tcpdump は ``[\fIbad hdr length\fP]'' を表示します。 -HD +.HD .B UDP パケット .LP UDP フォーマットは、以下の rwho パケットで例示します。 .RS .nf .sp .5 \f(CWactinide.who > broadcast.who: udp 84\fP .sp .5 .fi .RE これは、ホスト \fIactinide\fP の \fIwho\fP ポートが UDP データグラムを インターネットブロードキャストアドレスであるホスト \fIbroadcast\fP の \fIwho\fP ポートに対して送信していることを意味します。本パケットは、 84 バイトのユーザデータを含みます。 .LP いくつかの UDP サービスは(送信元もしくは宛先のポート番号から)種 類の判断が可能で、さらに上位レベルのプロトコル情報が出力されます。 ドメインネームサービス要求 (RFC1034/1035)、そして、Sun RPC 呼びだし (RFC1050) を用いた NFS サービスなどがこの条件に該当します。 .HD UDP ネームサーバ要求 .LP \fI(注意:以下の記述は、RFC1035 に記述されている ドメインサービスプロトコルの知識があることを前提に書かれてます。もしこ れらの知識がない場合には、以下の記述は未知の言語で書かれているかのよう に見えるでしょう。)\fP .LP ネームサーバ要求は、以下のような表示になります。 .RS .nf .sp .5 \fIsrc > dst: id op? flags qtype qclass name (len)\fP .sp .5 \f(CWh2opolo.1538 > helios.domain: 3+ A? ucbvax.berkeley.edu. (37)\fP .sp .5 .fi .RE ホスト \fIh2opolo\fP は、\fIhelios\fP 上のドメインサーバに対して \fIucbvax.berkeley.edu\fP のホスト名に対応するアドレスレコード (qtype=A) を問い合わせてます。 問い合わせの ID は `3' であり、`+' は\fI再帰要求\fPフラグが設定されて いることを意味します。問い合わせの長さは 37 バイトであり、この中に UDP および IP のプロトコルヘッダの長さは含みません。質問操作は普通の操作 (\fIQuery\fP) であり、op フィールドは省略されます。op が他のいずれかであった場合、 その op は `3' と `+' の間に表示されます。 これと同様に、qclass は普通のもの (\fIC_IN\fP) であり、省略されます。 他の qclass が入った場合、`A' の直後に表示されます。 .LP 少数の変則的なパケットは検査され、カギカッコで囲まれた付加 フィールドにその結果が表示されます。query が返答、ネームサーバ もしくはオーソリティセクションを含む場合、 .IR ancount , .IR nscount , もしくは .I arcount が、`[\fIn\fPa]'、 `[\fIn\fPn]' 、もしくは `[\fIn\fPau]' のような形式で 表示されます。\fIn\fP は、それぞれの個数です。 応答ビットのいずれかが設定されている(AA, RA もしくは rcode)場合、 もしくは`0 でなければならない'ビットが 2 バイト目と 3 バイト目に設定されてい る場合には、`[b2&3=\fIx\fP]' が出力されます。\fIx\fP は、ヘッダの 2 バイト 目および 3 バイト目の値を 16 進で表したものです。 .HD UDP ネームサーバ応答 .LP ネームサーバ応答の形式は、以下の通りです。 .RS .nf .sp .5 \fIsrc > dst: id op rcode flags a/n/au type class data (len)\fP .sp .5 \f(CWhelios.domain > h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273) helios.domain > h2opolo.1537: 2 NXDomain* 0/1/0 (97)\fP .sp .5 .fi .RE 最初の例は、\fIh2opolo\fP からの質問 ID 3 の要求に対し、\fIhelios\fP が 3 つのアンサーレコード、3 つのネームサーバレコード、そして 7 つの オーソリティレコードを持っているパケットで返答しているというものです。 最初のアンサーレコードは、タイプ A(アドレス)であり、そのデータは IP アドレス 128.32.137.3 です。UDP と IP のヘッダを除いた総サイズは 273 バイトです。 A レコードのクラス (C_IN) と同様に, op (Query) および応答コード (NoError) は、省略されます。 .LP 2 つめの例は、\fIhelios\fP が質問 ID 2 の要求に対し、存在しない ドメイン (NXDomain) という返答コードとともに、0 個のアンサーレコード、1 つ のネームサーバレコード、そして 0 個のオーソリティレコードを含んだ レスポンスを返しています。`*' は、\fIauthoritative answer\fP ビットが設定され ていることを示します。 アンサーレコードがないため、型、クラス、データは出力されません。 .LP 出力される可能性のある他のフラグキャラクタは、`\-' (再帰利用,RA,が 設定されていない)および `|' (メッセージ切捨て, TC, が設定されてい る)です。 `question' セクションに含まれるエントリがちょうど 1 つでない場合には、 `[\fIn\fPq]' が出力されます。 .LP ネームサーバ要求および応答は、大きくなる傾向にあり、デフォルトの \fIsnaplen\fP の値である 68 バイトの長さは、パケットを捕捉してその内容を 表示するには十分でないかも知れないことに注意して下さい。 もしネームサーバトラフィックの調査を真剣に 行なおうとするならば、\fB\-s\fP オプションを用いて、\fIsnaplen\fP を増やし て下さい。自分の経験上、`\fB\-s 128\fP' で十分使い物になります。 .HD NFS 要求と応答 .LP Sun NFS (Network File System) 要求および応答は、以下のように 表示されます。 .RS .nf .sp .5 \fIsrc.xid > dst.nfs: len op args\fP \fIsrc.nfs > dst.xid: reply stat len op results\fP .sp .5 \f(CW sushi.6709 > wrl.nfs: 112 readlink fh 21,24/10.73165 wrl.nfs > sushi.6709: reply ok 40 readlink "../var" sushi.201b > wrl.nfs: 144 lookup fh 9,74/4096.6878 "xcolors" wrl.nfs > sushi.201b: reply ok 128 lookup fh 9,74/4134.3150 \fP .sp .5 .fi .RE 最初の行では、ホスト \fIsushi\fP が ID\fI6709\fP のトランザクションを \fIwrl\fP に送信します(送信元ホストに続く数字はトランザクション ID であり、送信元ポート番号で\fIない\fPことに注意して下さい)。要求 サイズは、UDP および IP ヘッダのサイズを除いて 112 バイトです。操作は、 ファイルハンドル (\fIfh\fP) 21,24/10.731657119 に対する \fIreadlink\fP (シンボリックリンク読み込み)です。 (この例のように運が良ければ、ファイルハンドルはデバイスのメジャー、 マイナー番号のペアと、それに続く i ノード番号と世代番号と解釈することがで きます。) \fIwrl\fP はリンクの内容とともに `ok' と返答しています。 .LP 3 行めでは、\fIsushi\fP は \fIwrl\fP に対し、ファイルハンドル 9,74/4096.6878 のディレクトリ中の `xcolors' ファイルの検索を要求していま す。出力されたデータは、操作の型に依存することに注意して下さい。本形式 は、NFS のプロトコル仕様とともに読めば、それ自身を見れば分かるよう に意図して作成されています。 .LP \-v (verbose, 冗長) フラグがある場合、追加情報が出力されます。 例えば .RS .nf .sp .5 \f(CW sushi.1372a > wrl.nfs: 148 read fh 21,11/12.195 8192 bytes @ 24576 wrl.nfs > sushi.1372a: reply ok 1472 read REG 100664 ids 417/0 sz 29388 \fP .sp .5 .fi .RE (\-v は IP ヘッダの TTL, ID, そしてフラグメンテーションフィールドも出力し ますが、この例では省略しています。)最初の行では、\fIsushi\fP は \fIwrl\fP に対してファイル 21,11/12.195 のオフセット 24576 バイト目か ら 8192 バイトを読むように要求しています。\fIwrl\fP は `ok' と返答してい ます。2 行めに示したパケットは応答の最初のフラグメントなので、1472 バイトしかありません(その他のデータは継続するフラグメント中に続きます が、これらのフラグメントは NFS ヘッダも UDP ヘッダさえも持たないので、使わ れるフィルタリングの表現によっては出力されないでしょう)。\-v フラグがあ るのでいくつかのファイル属性(ファイルデータに追加されて返されてくる)が 出力されます。それらはファイルの型(普通のファイルなら``REG'')、(8 進数 表現の)ファイルモード、uid と gid、そしてファイルの大きさです。 .LP \-v フラグが 2 回以上指定されると、さらに詳しい情報が出力されます。 .LP NFS 要求は非常に大きなデータになるため、\fIsnaplen\fP を大きくし ないと詳しい出力は得られません。NFS トラフィックを監視するには、 `\fB\-s 192\fP' と指定してみて下さい。 .LP NFS 応答パケットは RPC 操作であることを明示的には示しません。その代わ り、\fItcpdump\fP は``最近の''要求を追跡して、トランザクション ID を用い て応答と照合します。応答が対応する要求のすぐ後に続かないと、解 析することはできません。 .HD KIP Appletalk (DDP in UDP) .LP UDP データグラムでカプセル化された Appletalk DDP パケットは、カプセル化 を解かれ、DDP パケットとしてダンプされます(全ての UDP ヘッダ情報は破棄 されます)。 ファイル .I /etc/atalk.names が、Appletalk ネットワークおよびノード番号を名前に変換するのに用い られます。 本ファイルの内容は、以下のように記述されます。 .RS .nf .sp .5 \fInumber name\fP \f(CW1.254 ether 16.1 icsd-net 1.254.110 ace\fP .sp .5 .fi .RE 最初の 2 行は、Appletalk ネットワーク名を決めています。3 行めは、 特定のホストの名前を決めています(ホストは、3 オクテット目の有無で ネットワークと区別されます。ネットワーク番号は、2 オクテットの数字 から、ホスト番号は 3 オクテットの数字から構成される必要があります。) 数字と名前は、空白文字もしくはタブ文字で区切られます。この .I /etc/atalk.names ファイルは、空行もしくは、`#' 文字で始まるコメント行を含んでもかま いません。 .LP Appletalk アドレスは、以下のように表示されます。 .RS .nf .sp .5 \fInet.host.port\fP \f(CW144.1.209.2 > icsd-net.112.220 office.2 > icsd-net.112.220 jssmag.149.235 > icsd-net.2\fP .sp .5 .fi .RE (もし、この .I /etc/atalk.names がないか、このファイルの中にホスト番号及びネットワーク番号のエントリが 存在しない場合には、アドレスは数字で表示されます。) 最初の例は、ネットワーク 144.1 の中のノード 209 の NBP(DDP port 2) が、ネットワーク icsd のノード 112 のホストの ポート 220 を開いている何者かにデータを送信しています。 次の行は、1 行めとほぼ同じ例ですが、送信元のノード名が既知である (`office') ところが異なります。 3 行目の例は、ネットワーク jssmag のノード 149 のポート 235 から、icsd-net の NBP ポートにブロードキャストでデータ送信をしています (ブロードキャストアドレス(255)は、ホスト番号なしでネットワーク番号のみ が表示されているところでわかります。このことから、/etc/atalk.names では ノード名とネットワーク名を区別する方がよいことが分かります)。 .LP NBP (name binding protocol) および ATP (Appletalk transaction protocol) パケットでは、その内容は解釈されます。 他のプロトコルは、プロトコル名(もしくは、プロトコルが登録されていない場 合には、プロトコル番号)およびパケットサイズをダンプします。 \fBNBP パケット\fP は、以下のような形式で表示されます。 .RS .nf .sp .5 \s-2\f(CWicsd-net.112.220 > jssmag.2: nbp-lkup 190: "=:LaserWriter@*" jssmag.209.2 > icsd-net.112.220: nbp-reply 190: "RM1140:LaserWriter@*" 250 techpit.2 > icsd-net.112.220: nbp-reply 190: "techpit:LaserWriter@*" 186\fP\s+2 .sp .5 .fi .RE 最初の行は、レーザライタの名前検索要求であり、ネットワーク icsd のホスト 112 から送られ、ネットワーク jssmag へとブロードキャストされています。 検索のための nbp の ID は 190 です。 次の行は jssmag.209 からの、この要求の応答(同じ ID を持つことに注意して下さ い)で、 ポート 250 に登録された RM1140 という名前のレーザライタがあると答 えています。 3 行めは、同じ要求に対する他のホストからの応答で、 ホスト techpit が、ポート 186 に登録されたレーザライタ "techpit" を持ってい ると答えています。 \fBATP パケット\fP の形式は、以下のように表示されます。 .RS .nf .sp .5 \s-2\f(CWjssmag.209.165 > helios.132: atp-req 12266<0-7> 0xae030001 helios.132 > jssmag.209.165: atp-resp 12266:0 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:1 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:2 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:4 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:6 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp*12266:7 (512) 0xae040000 jssmag.209.165 > helios.132: atp-req 12266<3,5> 0xae030001 helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000 jssmag.209.165 > helios.132: atp-rel 12266<0-7> 0xae030001 jssmag.209.133 > helios.132: atp-req* 12267<0-7> 0xae030002\fP\s+2 .sp .5 .fi .RE jssmag.209 は、ホスト helios に対し最大8個 ('<0-7>') までのパケットを 要求することで、トランザクション ID 12266 を開始します。行の最後の 16 進数は、 要求の中の`ユーザデータ'のフィールドの値です。 .LP helios は、8 つの 512 バイトのパケットで応答しています。トランザクション ID の後につづく`:数'は、パケットシーケンス番号を、括弧中の数値は ATP ヘッダ を除いたパケット中のデータ量を示してます。パケットシーケンス 7 のところ の `*' は、EOM ビットが設定されていることを示してます。 .LP jssmag.209 は、パケットシーケンス番号 3 と 5 のパケットの再送要求をしてます。 helios はそれらを再送し、その後 jssmag.209 はトランザクションを解放します。 最後の行で、jssmag.209 は次の要求を開始します。この要求の表示 で付加されている `*' は、XO(`exactly once') が設定されていないことを示します。 .HD IP フラグメンテーション .LP フラグメントのあるインターネットデータグラムは、以下のように表示されます。 .RS .nf .sp .5 \fB(frag \fIid\fB:\fIsize\fB@\fIoffset\fB+)\fR \fB(frag \fIid\fB:\fIsize\fB@\fIoffset\fB)\fR .sp .5 .fi .RE (最初の形式では、まだフラグメントがあることを示し、2 番めの形式は、 これが最後のフラグメントであることを示してます。) .LP \fIId\fP は、フラグメント ID です。\fIsize\fP は、フラグメントサイズを バイト単位であらわしたものです。ただし IP ヘッダサイズは含みません。 \fIoffset\fP は、元のデータグラムでの本フラグメントのオフセットをバイト 単位であらわしたものです。 .LP フラグメント情報は、各フラグメントごとに表示されます。最初の フラグメントには、上位レベルのプロトコルヘッダが含まれるので、フラグ情 報がプロトコル情報の後に表示されます。2 つ目以降のフラグメントについて は、上位レベルのプロトコルヘッダを含まないので、フラグ情報は送信元およ び宛先アドレスの後ろに表示されます。 例えば、これは arizona.edu から lbl-rtsg.arpa への CSNET 接続での ftp の様子の一部分ですが、どうやら 576 バイト以上ののデータグラムを扱えないよ うです。 .RS .nf .sp .5 \s-2\f(CWarizona.ftp-data > rtsg.1170: . 1024:1332(308) ack 1 win 4096 (frag 595a:328@0+) arizona > rtsg: (frag 595a:204@328) rtsg.1170 > arizona.ftp-data: . ack 1536 win 2560\fP\s+2 .sp .5 .fi .RE 注意すべきことがいくつかあります。まず最初に、2 行目は ポート番号を含みません。これは、TCP プロトコル情報は、最初のフラグメント に全て入っており、後のフラグメントを出力する時にはポート番号やシーケンス 番号を知る術がないからです。 次に、最初の行の TCP シーケンス情報は、パケットが 308 バイトのユーザデータ を持ってるかのように表示されますが、実際には 512 バイトのユーザデータを 持ってます(308 バイトが最初のフラグ分で、204 バイトが 2 番目のフラグ分で す)。シーケンススペースの穴をさがしたり、パケットの ack の対応が正しい かをこのデータで見ようとしてはいけません。 .LP フラグメント不可フラグが設定されたパケットは、最後の部分に \fB(DF)\fP と 印が付けられます。 .HD タイムスタンプ .LP デフォルトでは、すべての出力行は最初にタイムスタンプが出力されます。 タイムスタンプは、以下の形式で、現在のクロックタイムを表示します .RS .nf \fIhh:mm:ss.frac\fP .fi .RE そして、クロックの精度は、カーネルクロックの精度に依存します。 タイムスタンプは、カーネルが最初にパケットを見つけた時間を反映します。 イーサネットインタフェースがケーブルからパケットを取り出してカーネルが `新規パケット'割り込みを受け付けるまでのタイムラグなどは補正されません .SH 関連項目 bpf(4), pcap(3) .SH 作者 Van Jacobson, Craig Leres and Steven McCanne, all of the Lawrence Berkeley National Laboratory, University of California, Berkeley, CA. .LP .RS .I ftp://ftp.ee.lbl.gov/tcpdump.tar.Z .RE .SH バグ バグレポートは、tcpdump@ee.lbl.gov へ送って下さい。 .LP NIT では、外に出ていくトラフィックを観察できません。BPF ならできます。 後者を用いることを推奨します。 .LP IP フラグメントを再構成するか、もしくは少なくとも上位プロトコルの正し いデータサイズを計算するように設計しなおす必要があります。 .LP ネームサーバについての逆引きについては、正しくダンプされません。 実際の要求ではなく、(empty)クエスチョンセクションが、 アンサーセクションに出力されます。 逆引きについてはそれ自体がバグであると信じ、tcpdump ではなく逆引きを要求する プログラムを修正するべきと考える人達もいます。 .LP Apple Ethertalk DDP パケットは、KIP DDP パケットと同様に簡単にダンプ出来 るようにしたいのですが、実際はそうではありません。 もし我々が、Ethertalk の利用を奨めるために何かやろうという気になったとし ても(そうではないのですが)、LBL(Lawrence Berkeley Laboratory) のどの ネットワーク上にも Ethertalk を通すことは許されていませんから、そのコード の試験は出来ません。 .LP 夏時間との変更の時にパケットトレースを行うと、タイムスタンプは変更後の 時刻とはずれてしまいます(時間変化は無視されます)。 .LP FDDI ヘッダを操作するようなフィルタの表現においては、全ての FDDI パケットはカプセル化された Ethernet パケットであると仮定します。 これは、IP, ARP, DECNET フェーズ 4 については正しいですが、ISO の CLNS 等の プロトコルについては正しくありません。したがって、フィルタ表現に正しく マッチしないようなパケットを偶然に受け入れてしまうことがあります。 diff --git a/ja/man/man5/stab.5 b/ja/man/man5/stab.5 index 55a8ec9c19..c48752db42 100644 --- a/ja/man/man5/stab.5 +++ b/ja/man/man5/stab.5 @@ -1,225 +1,225 @@ .\" Copyright (c) 1980, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)stab.5 8.1 (Berkeley) 6/5/93 .\" %Id: stab.5,v 1.3 1997/03/07 03:28:08 jmg Exp % .\" jpman %Id: stab.5,v 1.3 1998/07/21 23:07:45 jsakai Stab % .\" WORD: symbol table シンボルテーブル .\" WORD: directive ディレクティブ(命令、指令の類) .\" .Dd June 5, 1993 .Dt STAB 5 .Os BSD 4 .Sh 名称 .Nm stab .Nd シンボルテーブルの型 .Sh 書式 .Fd #include .Sh 解説 .Aq Pa stab.h ファイルは a.out ファイルで使われる、シンボルテーブルのいくつかの .Fa n_type フィールド値の定義します。 これらは、恒久的なシンボル形式であり (つまり、ローカルなラベルなどではない)、古いデバッガである .Em sdb や Berkeley パスカルコンパイラ .Xr pc 1 で使われます。 .\" (訳注) BerkeleyパスカルコンパイラはFreeBSDディストリビューション .\" に含まれない。 .\" 1998/05/05 Takeshi MUTOH シンボルテーブルエントリは .Pa .stabs アセンブラディレクティブによって生成することができます。 ここでは、ダブルクオートで区切られた名前、シンボルの型、シンボルに ついての char 1 つと short 1 つ分の情報、 そして (通常はアドレスを示す) unsigned long の整数を指定できます。 アドレスフィールドに明示的なラベルを生成するのを避けるため、 .Pa .stabd ディレクティブを使い、現在の場所を指すようにすることができます。 もし名前が必要ない場合、 .Pa .stabn ディレクティブを使うことで、シンボルテーブルエントリを生成することができます。 ローダは、 .Pa .stab ディレクティブによって生成されたシンボルテーブルのエントリ順を変えないこと を保証します。 .Xr a.out 5 に記述されているように、シンボルテーブルの要素は以下の構造を持ちます。 .Bd -literal /* * シンボルテーブルエントリの書式 */ struct nlist { union { char *n_name; /* コア内部 (in-core) で使用 */ long n_strx; /* ファイル文字列表へのインデックス */ } n_un; unsigned char n_type; /* 型のフラグ */ char n_other; /* 使用されていない */ short n_desc; /* 以下の struct desc 参照 */ unsigned n_value; /* アドレスまたはオフセットまたは行 */ }; .Ed .Pp .Fa n_type フィールドの下位ビットは、シンボルをたかだか 1 つのセグメントに置くため に使用します。どのセグメントに置くかは .Aq Pa a.out.h 内で定義されている以下のマスクに基づきます。 これらのセグメントビットを設定しないようにすることで、シンボルをどの セグメントにも属さないようにすることができます。 .Bd -literal /* * n_type の単純な値 */ #define N_UNDF 0x0 /* 定義されていない */ #define N_ABS 0x2 /* 絶対指定 */ #define N_TEXT 0x4 /* テキスト */ #define N_DATA 0x6 /* データ */ #define N_BSS 0x8 /* bss */ #define N_EXT 01 /* 外部参照を表すビット(or して使う) */ .Ed .Pp シンボルの .Fa n_value フィールドは、リンカ .Xr ld 1 によって、正しいセグメント内のアドレスに再配置されます。 どのセグメントにも入っていないシンボルの .Fa n_value フィールドは、リンカによって変更されません。 さらに、 .Fa n_type フィールドで、以下のビットのいずれもセットされていない場合は、 リンカは自分が持っている規則にしたがって、 いくつかのシンボルを破棄します。 .Bd -literal /* * その他の永続的なシンボルテーブルエントリでは、N_STAB のいくつかのビットが * セットされています。これらは、 内に記述があります。 */ #define N_STAB 0xe0 /* もしこれらのビットのいずれかがセットされていれば破棄されません */ .Ed .Pp これで、112 (7 \(** 16) 個までのシンボルを、さまざまなセグメントで分けて 定義できるようになります。 これらのいくつかについては既に述べられています。 古いシンボリックデバッガ .Em sdb は、以下の 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 */ #define N_SLINE 0x44 /* ソース行: 0,,0,linenumber,address */ #define N_SSYM 0x60 /* structure elt: name,,0,type,struct_offset */ #define N_SO 0x64 /* ソースファイル名: name,,0,0,address */ #define N_LSYM 0x80 /* ローカルシンボル: name,,0,type,offset */ #define N_SOL 0x84 /* #includeされたファイル名: name,,0,0,address */ #define N_PSYM 0xa0 /* パラメータ: name,,0,type,offset */ #define N_ENTRY 0xa4 /* 別のエントリ: name,linenumber,address */ #define N_LBRAC 0xc0 /* 左かっこ: 0,,0,nesting level,address */ #define N_RBRAC 0xe0 /* 右かっこ: 0,,0,nesting level,address */ #define N_BCOMM 0xe2 /* 共通の開始符号: name,, */ #define N_ECOMM 0xe4 /* 共通の終了符号: name,, */ #define N_ECOML 0xe8 /* (ローカル名の)共通の終了符号: ,,address */ #define N_LENG 0xfe /* 長さ情報を持った2番目の stab エントリ */ .Ed .Pp ここで、コメントには 与えられた .Fa n_type の .Fa n_name , .Fa n_other , .Fa n_desc , .Fa n_value フィールド と .Pa .stab .Fa s の典型的な利用法が書かれています。 .Em sdb は、ポータブル C コンパイラ .Xr cc 1 によって使われる形式の型の指定子を持っている .Fa n_desc フィールドを使います。これらの型の値のフォーマットの詳細はヘッダファイル .Pa pcc.h を参照して下さい。 .Pp Berkeley パスカルコンパイラ .Xr pc 1 は、以下の .Fa n_type 値をつかいます: .Bd -literal #define N_PC 0x30 /* グローバルなパスカルシンボル: name,,0,subtype,line */ .Ed .Pp と、以下のサブ型を使い、別々のコンパイルファイルにまたがる型チェックを 行います。 .Bd -unfilled -offset indent 1 ソースファイル名 2 インクルードされたファイル名 3 グローバルなラベル 4 グローバルな定数 5 グローバルな型 6 グローバルな変数 7 グローバルな関数 8 グローバルな手続き 9 外部関数 10 外部手続き 11 ライブラリ変数 12 ライブラリルーチン .Ed .Sh 関連項目 .Xr as 1 , .Xr ld 1 , .Xr a.out 5 .Sh バグ .Pp もっと基本的な形式が必要でしょう。 .Sh 歴史 .Nm stab ファイルは .Bx 4.0 から登場しました。 diff --git a/ja/man/man7/man.7 b/ja/man/man7/man.7 index 3af8763a1f..cca8c1221d 100644 --- a/ja/man/man7/man.7 +++ b/ja/man/man7/man.7 @@ -1,376 +1,381 @@ .\" Copyright (c) 1998. .\" The FreeBSD Project. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %Id: man.7,v 1.1 1998/11/26 00:21:24 jkoshy Exp % .\" jpman %Id: man.7,v 1.3 1999/02/10 13:32:51 horikawa Stab % .\" .\" WORD: format (roffで)書式整形(する)[man.7] .\" WORD: indent インデント[man.7] .\" .Dd November 30, 1998 .Os .Dt MAN 7 .Sh 名称 .Nm man .Nd .Nm \-man マクロパッケージのクイックリファレンスガイド .Sh 書式 .Nm groff .Fl m Ns Ar an .Ar .Sh 解説 .Nm \-man パッケージは、 .Ux マニュアルページの書式整形に使用するマクロの集合です。 .Bx システムでは、 .Nm -の使用を大いに非としており、代わりに、それより表現力に富んだ +の使用は非推奨とされており、代わりに、それより表現力に富んだ .Nm mdoc パッケージが推奨されています。 .Sh 使用法 .Ss 慣習 .Nm で使用するマクロは、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) の間隔は、その後インデント状態の パラグラフが継続する間、保持されていますが、非インデント状態の パラグラフに到達するとデフォルト値にリセットされます。インデントに おけるデフォルトの単位は、 .Dq en です。 .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 プリプロセッサ .It e Ta Xr eqn 1 .It g Ta Xr grap 1 .It p Ta Xr pic 1 .It r Ta Xr refer 1 .It t Ta Xr tbl 1 .It v Ta Xr vgrind 1 .El .Ss 利用可能な文字列 .Nm パッケージで事前に定義されている文字列は次のとおりです。 .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 インチに戻します。 行分割は生じません。 .It ".HP" Op Ar indent パラグラフを、ハンギングインデント (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 .Op Ar footer Op Ar center .Xc セクション .Ar section に属するリファレンスページ .Ar name を開始します。 第 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 関数 必要なデータの宣言もしくは .Li "#include" 指示子を最初に置きます。その後ろに関数宣言を置きます。 .El .It ".SH DESCRIPTION" -コマンドや関数の外部挙動の概要を記述します。そこには、ファイルや -データとの相互作用、標準入力、標準出力、標準エラー出力がどのように -扱われるかが含まれます。普通、内部挙動や実装の詳細をここでは示しません。 +コマンドや関数の外部挙動の概要を記述します。それには、ファイルや +データとのやりとりや、標準入力、標準出力、標準エラー出力がどのように +扱われるかが含まれます。通常、内部挙動や実装の詳細をここでは示しません。 このセクションで解くべき疑問は、「これはなにをするのか?」もしくは、 「これは何のためのものか?」です。 .Pp リテラルテキスト、ファイル名、リファレンスマニュアルの他の場所にある 項目への参照は、固定幅書体で表さねばなりません。引数は斜体を用いて 表さねばなりません。 .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" 診断メッセージと対応する説明の一覧です。 .It ".SH BUGS" 既知の障害や使用上の制限があれば、それを記述します。 .El .Sh 関連ファイル .Bl -tag -width "/usr/share/lib/tmac/tmac.groff_an" .It "/usr/share/lib/tmac/tmac.an" .Nm パッケージを定義する初期ファイル。 .It "/usr/share/lib/tmac/tmac.groff_an" マクロ定義のための .Nm groff のソース。 .It "/usr/share/lib/tmac/man.local" .Nm パッケージに対するローカルな変更。 .El .Sh 関連項目 .Xr apropos 1 , .Xr groff 1 , .Xr man 1 , .Xr nroff 1 , .Xr troff 1 , .Xr whatis 1 , .Xr mdoc 7 , .Xr mdoc.samples 7 .Sh 歴史 このマニュアルページは .An "Joseph Koshy" .Ad Aq jkoshy@freebsd.org によって記述されました。 .Sh 訳注 この日本語訳マニュアルページにおけるセクションタイトルの英和対応は次の とおりです。 .Bl -column "RETURN VALUES" "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -offset indent .It Em 英文 Ta Em 和訳 .It NAME Ta 名称 .It SYNOPSIS Ta 書式 .It DESCRIPTION Ta 解説 .It OPTIONS Ta オプション .It USAGE Ta 使用法 .It RETURN VALUES Ta 戻り値 .It EXIT STATUS Ta 終了ステータス .It FILES Ta 関連ファイル .It SEE ALSO Ta 関連項目 .It DIAGNOSTICS Ta 診断 .It BUGS Ta バグ .El .\"ZZZ: 3.0-19990129-SNAP by Norihiro Kumagai diff --git a/ja/man/man7/security.7 b/ja/man/man7/security.7 index 534e92d12a..732cf741ef 100644 --- a/ja/man/man7/security.7 +++ b/ja/man/man7/security.7 @@ -1,634 +1,642 @@ .\" Copyright (c) 1998, Matthew Dillon. Terms and conditions are those of .\" the BSD Copyright as specified in the file "/usr/src/COPYRIGHT" in .\" the source tree. .\" .\" %Id: security.7,v 1.4 1998/12/26 05:19:42 dillon Exp % .\" jpman %Id: security.7,v 1.3 1999/02/11 11:18:48 vanitas Stab % .\" .Dd December 20, 1998 .Dt SECURITY 7 .Os .Sh 名称 .Nm security .Nd FreeBSD におけるセキュリティ入門 .Sh 解説 .Pp セキュリティは、システム管理者とともに始まり、システム管理者と -ともに終る機能です。すべての +ともに終る機能です。 .Bx -システムは昔からマルチユーザに対応しています。セキュリティの仕組みを +システムは昔からすべてマルチユーザに対応しています。セキュリティの仕組みを 組み込んで維持することで、ユーザを .Sq 正直に し続ける仕事は、システム管理者の最も大きな責務の一つでしょう。マシンは、 管理者が設定しただけのセキュリティしか示しません。セキュリティに関する 問題は、むしろ、便利さを求める人間との競合問題です。一般に、 .Ux -システムは莫大な数のプロセスを同時に実行させることも、また、その多くを -サーバとして動作させることもできます。これは、外部の何者かが -接続してきて、サーバプロセスと会話することができるということを -意味します。昨日までのミニコンピュータとメインフレームは、今日では -デスクトップコンピュータとなり、かつ、それらはネットワークで結ばれて +システムは莫大な数のプロセスを同時に実行させることができ、 +それも、サーバとして動作するものが多いのです。つまり、外部の何者かが +接続してきて、サーバプロセスと会話することができるということなのです。 +昨日まで使われていたミニコンピュータやメインフレームは、今日では +デスクトップコンピュータが取って代わり、しかも、それらはネットワークで結ばれて インターネットと接続されるようになりました。これにより、セキュリティは 昔と比べてはるかに大きな問題となっています。 .Pp セキュリティに関する問題は、いくつかのカテゴリに分類することができます。 .Bl -enum -offset indent .It サービス不能攻撃 .It ユーザアカウントにかかる危険 .It アクセス可能なサーバを経由した root 権限にかかる危険 .It ユーザアカウントを通した root 権限にかかる危険 .El .Pp サービス不能攻撃とは、マシンから必要な資源を奪う行為です。 サービス不能攻撃は、普通は、そのマシンで実行されるサーバや -ネットワークスタックを圧倒して、マシンを使えなくしたりクラッシュさせようと -するような力任せの仕組みです。サービス不能攻撃のいくつかは、 +ネットワークスタックを圧倒して、マシンをクラッシュさせたり、 +さもなければマシンを使えなくしたりするような力任せの方法です。 +サービス不能攻撃のいくつかは、 ネットワークスタックのバグを利用して、パケット一つでマシンを クラッシュさせようとします。後者は、 カーネルにバグ修正を施すことによってのみ修正することができます。 サーバプロセスに対する攻撃は、サーバのオプションを適切に指定して、 -逆境状況のシステムにおいて、サーバプロセスが引き起こす負荷に限界を設けることで +不利な状況にあるシステムにおいて、サーバプロセスが引き起こす負荷に限界を設けることで 修正することができます。これらに比べると、ネットワークへの力任せの攻撃への 対応はずっと難しくなります。たとえば、偽造パケットによる攻撃 .Pq spoof-packet attack -は、インターネットからシステムを切り離す以外の方法では、抑止することは +は、インターネットからシステムを切り離す以外の方法で防ぐことは ほとんど不可能です。 .Pp -ユーザアカウントを危険に晒すことは、サービス不能攻撃よりは多少はありふれた -ものです。このご時勢でも、システム管理者の多くは、自分たちのマシンで -標準の telnetd, rlogind, rshd, ftpd サーバを実行させています。これらの +ユーザアカウントを危険に晒してしまう問題は、サービス不能攻撃よりもずっとよくある +問題です。このご時勢でも、自分たちのマシンで標準の telnetd, rlogind, rshd, ftpd +サーバを実行させているシステム管理者は多いのです。これらの サーバは、デフォルトでは、暗号化されたコネクション上で動作していません。 -その結果、抱えているユーザ数が標準的な大きさならば、リモート -.Pq そのシステムにログインするのに最も普通で便利な場所 -からログインしているユーザのうち一人以上は、パスワードを覗き見られて +その結果、抱えているユーザ数が標準くらいであれば、リモートログイン +.Pq そのシステムにログインするには最も普通で便利な方法です +しているユーザのうち一人以上は、パスワードを覗き見られて しまうでしょう。 -システム管理者が注意深いならば、たとえログインが成功していたとしても、 +システム管理者が注意深い人ならば、たとえログインが成功していたとしても、 リモートアクセスログをときどき解析して、疑わしいソースアドレスを探すものです。 .Pp ひとたび攻撃者がユーザアカウントへのアクセス権を入手すると、攻撃者が root の権限を破る可能性があることを仮定するべきです。しかし、 -セキュリティを十分保ち、手入れの行き届いたシステムにおいては、 +セキュリティを十分維持し、手入れの行き届いたシステムにおいては、 あるユーザアカウントへのアクセスが可能となっても、攻撃者に必ずしも root へのアクセス権を与えるとは限らないのが現実です。この違いは重要です。 というのは、root へのアクセス権がなければ、一般的に、攻撃者は自分の 侵入の痕跡を隠蔽することができませんし、そのユーザのファイルを消して マシンをクラッシュさせることができるのがせいぜいで、他のユーザの ファイルには手出しできません。 .Pp システム管理者は、あるマシン上で root の権限を破る方法がいくつかあることを 心しておかねばなりません。攻撃者が root のパスワードを知ってしまうかも しれません。攻撃者が root の権限で実行されるサーバのバグを見つけ、 ネットワークからそのサーバへ接続して root の権限を破ることができるかも しれません。ひとたびユーザアカウントを破ると、ユーザアカウントから -root の権限を破ることが可能であるバグを持つ suid-root プログラムの +root の権限を破ることが可能であるというバグを持つ suid-root プログラムの 存在を、攻撃者は知っているかもしれません。 .Pp セキュリティを改善する方法は、常に、 .Sq タマネギの皮剥き のように 複数の層のアプローチで実装されます。これらは次のように分類できます。 .Bl -enum -offset indent .It root とスタッフのアカウントの安全性を高める。 .It root の安全性を高める - root 権限のサーバと suid/sgid バイナリ。 .It ユーザアカウントの安全性を高める。 .It パスワードファイルの安全性を高める。 .It カーネルのコア、raw デバイス、ファイルシステムの安全性を高める。 .It ファイルの完全性のチェック: バイナリ、設定ファイルなど。 .It 偏執狂的方法。 .El .Sh root アカウントとスタッフアカウントの安全性を高める .Pp root のアカウントの安全性を確保しないうちからスタッフのアカウントの安全性を うんぬんしてもしかたがありません。ほとんどのシステムでは、root アカウントに 割り当てたパスワードがひとつあります。まず最初にすべきことは、 このパスワードは .Sq いつでも 危険に晒されていると仮定することです。root アカウントの安全性を確保する ためには、ネットワーク越しに、あるいはどれか一般ユーザのアカウントから、 root のパスワードを使って root アカウントにログインすることが決して -できないことを確実にすることです。正しいパスワードが与えられようが +できないことを確認することです。正しいパスワードが与えられようが 与えられまいが、telnetd, rlogind, その他ログイン処理を行なうサーバ -すべてで root でのログインを拒絶するように設定していないとするなら、 -今すぐそういうふうに設定して下さい。直接 root でログインできるのは、 +すべてで root でのログインを拒絶するように設定していないのであれば、 +今すぐ必ず設定して下さい。直接 root でログインできるのは、 システムコンソールからだけにして下さい。ここで役に立つのが .Sq /etc/ttys ファイルです。ほとんどのシステムでは、デフォルトで安全ですが、 優れたシステム管理者は、設定がそうなっているか常にチェックを怠らない ものです。 .Pp システム管理者として、自分は root になれるようにしておかねばならないの はもちろんですから、穴をいくつか空けておきます。しかし、それらの穴を 動作させるには、さらに追加のパスワード認証が必要であるようにして おきます。root でアクセス可能とする方法の一つとして、 適切なスタッフアカウントを .Pq /etc/group の wheel グループに加えることがあります。 wheel グループに置かれたスタッフメンバには、 .Sq su を使って root になることが許されます。スタッフメンバに、 パスワードファイルのエントリでそのまま wheel のアクセス権を 与えてはいけません。スタッフは、 .Sq staff かその類のグループに置き、その中で本当に root になる必要がある人 -だけを wheel グループに加えるようにします。残念ながら、wheel の -仕組みだけだと、侵入者がパスワードファイルを手に入れると、攻撃者が -破る必要があるのは root のパスワードか、wheel グループにたまたま属す -staff アカウントの一つのパスワードだけです。wheel の仕組みは有益 -ですが、wheel グループがまったく存在しない状況と比べてそれほど +だけを wheel グループに加えるようにします。しかし、残念ながら、wheel の +仕組みだけだと、侵入者は、パスワードファイルを手に入れるとルート権限を +破ることができてしまいます。攻撃者が破る必要があるのは root のパスワード +か、wheel グループにたまたま属するstaff アカウントのパスワードどれかひとつだけだからです。 +wheel の仕組みは有益ですが、wheel グループがまったく存在しない状況と比べてそれほど 安全なわけではありません。 .Pp root アカウントの安全性を高める間接的な方法として、別のログインアクセス の方法を用いて、スタッフのアカウントの暗号化パスワードを\ * にして おくことで、スタッフのアカウントの安全性を高めるものがあります。この方法 だと、侵入者がパスワードファイルを盗むことができるかもしれませんが、 スタッフアカウントを破ることはできないでしょう。また、たとえ root が暗号化 パスワードをパスワードファイルに付けていたとしても、間接的には root アカウントも破ることができないでしょう。 スタッフメンバがスタッフアカウントでログインする際には、 .Xr kerberos 1 や .Xr ssh 1 .Po .Pa /usr/ports/security/ssh 参照 .Pc のような、公開鍵 / 秘密鍵の鍵の組を使う 安全性の高いログインの仕組みを使います。kerberos のような仕掛けを使う場合、 一般に、kerberos サーバを実行するマシンと自分のデスクトップ ワークステーションとの安全性を確保しなければなりません。ssh で -公開鍵 / 秘密鍵の鍵の組を使う場合、一般に、ログイン元マシン +公開鍵 / 秘密鍵の組を使う場合、一般に、ログイン元マシン .Pq 通常は自分のワークステーション の安全性を確保しなければなりません。ここで、 .Xr ssh-keygen 1 -で鍵の組を生成する際、鍵の組をパスワードで防御することにより、 -鍵の組を防護するための層を追加することもできます。スタッフアカウントの -パスワードを\ * で外すことができることにより、スタッフメンバが -管理者自身が設定した安全性の高い方法でのみログインできることも保証 -できます。かくして、多くの侵入者が使う重大なセキュリティの穴 +で公開鍵 / 秘密鍵の組を生成する際、鍵の組をパスワードで防御することにより、 +鍵の組への防御層を追加することもできます。スタッフアカウントの +パスワードを\ * で外すことができると、管理者自身が設定 +した安全性の高い方法でしかスタッフメンバがログインできないことも保証 +できます。こうして、多くの侵入者が使う重大なセキュリティの穴 .Pq 安全性の低い無関係なマシンからネットワークを覗き見る方法 -のないセッションを提供する、安全性の高い暗号化されたコネクションを -使うことを、すべてのスタッフメンバに強制することができるのです。 -.Pp -より間接的なセキュリティの仕組みは、より制限の強いサーバから制限の弱い -サーバへログインすることを前提としています。例えば、主マシンで、 -すべての種類のサーバを実行させている場合、ワークステーションではそれらの -サーバを実行させてはなりません。ワークステーションの安全性を比較的 -高めておくためには、実行するサーバの数を、果てはサーバなしまで、 -できるだけ減らしておくべきです。また、パスワード防護された -スクリーンセーバを走らせておくべきです。 -ワークステーションへの物理的アクセスが与えられたとすると、攻撃者は -管理者が設定したいかなる種類のセキュリティをもうち破ることができるのは -もちろんのことです。これは、管理者として考えておかねばならない決定的な -問題ですが、システム破りの大多数は、ネットワーク経由でリモートから、 -ワークステーションやサーバへの物理的アクセス手段を持たない人々によって -行なわれるという事実も、また、念頭に置いておく必要があります。 +を塞ぐようなセッションを提供する、安全性の高い暗号化されたコ +ネクションを使うことを、スタッフメンバ全員に強制することができ +るのです。 +.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 .Pq 普通、suid 設定されています を攻撃可能にしていました。 安全である方がよいので、用心深いシステム管理者は残念に思いながらも、 スタッフのみが実行する必要がある suid バイナリは、スタッフのみが アクセス可能な特別なグループに含めるように制限を加え、 -誰も使わない suid バイナリは chmod 000 して片付けてしまうでしょう。 +誰も使わない suid バイナリは chmod 000 を実行して片付けてしまうで +しょう。 ディスプレイを持たないサーバは、一般的に xterm のバイナリを必要としません。 sgid バイナリもほとんど同様の危険な存在になり得ます。 -侵入者が sgid-kmem のバイナリを破ることができた場合、 +侵入者が kmem に sgid されたバイナリを破ることができた場合、 その侵入者は /dev/kmem を読み出すことができるようになります。 つまり、暗号化されたパスワードファイルを読み出すことができる ようになるので、パスワードを持つどのアカウントをも、 .Pq 潜在的な 危険に晒すことになります。 tty グループを破った侵入者は、ほとんどすべてのユーザの端末に書き込みが できます。talk-back 機能を持つ端末プログラムやエミュレータをユーザが実行 していると、 .Pq 結局、そのユーザとして実行される コマンドをユーザの端末にエコーさせるデータストリームを 侵入者が生成できる可能性があります。 .Sh ユーザアカウントの安全性を高める .Pp ユーザアカウントは、普通、安全性を高めることが最も困難です。 スタッフに対して、アテナイのドラコのような厳格なアクセス制限を課し、 スタッフのパスワードを\ * で外すことができるとはいえ、管理者が持ちうる 一般ユーザすべてのアカウントに対して同じことはできないかも知れません。 -十分な管理を保つならば、管理者は勝利し、ユーザの -アカウントを適切な状態で安全を確保できるかもしれません。それが -保てないならば、一般ユーザのアカウントをモニタしていっそう気を配るように -するしかありません。一般ユーザアカウントでの ssh や kerberos の利用は、 -いろいろ問題をはらんでいます。それでも、暗号化パスワードと比較すると、 +管理者が十分に統率をとることができるなら、管理者は勝利し、ユーザの +アカウントの安全を適切に確保できるかもしれません。それが +できないならば、よりいっそう気を配って一般ユーザのアカウントを +監視するよりほかありません。一般ユーザアカウントに対し +ssh や kerberos を利用することには、いろいろと問題があります。 +それでも、暗号化パスワードと比較すると、 はるかに良い解です。 .Sh パスワードファイルの安全性を高める .Pp できるだけ多くのパスワードを\ * で外し、それらのアカウントのアクセスには ssh や kerberos を使うようにすることが、唯一の確実な方法です。たとえ暗号化 パスワードファイル .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 bpf デバイスを外し、モジュールローダを無効にしても、/dev/mem と /dev/kmem という悩みの種がまだ残っています。この問題に関しては、侵入者は raw デバイスに書き込むこともできます。この問題を避けるため、システム管理者は カーネルをより高い安全レベル .Pq securelevel 、少なくとも安全レベル 1 で実行させる必要があります。 sysctl を使って kern.securelevel 変数に安全レベルを設定することが できます。ひとたび安全レベルに 1 を設定すると、 raw デバイスに対する書き込みアクセスは拒否され、例えば .Sq schg のような 特別な chflags フラグが効果を発揮します。これに加えて、 -起動において重要なバイナリ・ディレクトリ・スクリプトファイルなど、 +起動時において重要なバイナリ・ディレクトリ・スクリプトファイルなど、 安全レベルが設定されるまでの間に実行されるものすべてに対しても .Sq schg フラグを確実に on にしておく必要があります。この設定をやり過ぎても 構いませんが、より高い安全レベルで動作している場合、システムの アップグレードがはるかに困難になります。システムをより高い安全レベルで 実行させるようにするが、お天道さまの下にあるすべてのシステムファイルと ディレクトリに schg フラグを設定しないという妥協をする方法もあります。 .Sh ファイルの完全性のチェック: バイナリ、設定ファイルなど .Pp -ことここに至るとシステム管理者にできることは、 -便利度がその醜い頭を上げない程度に、 +ことこの問題に至ると、システム管理者にできることは、 +便利さという要素がその醜い頭を上げない程度に、 コアシステムの設定 / 制御ファイルを防御することだけです。 セキュリティのタマネギの最後の層はおそらく最も重要なもの、すなわち探知です。 .Pp システムファイルの完全性をチェックする唯一の正しい方法は、別の、より安全な システム経由で行なう方法だけです。 .Sq 安全 なシステムを準備することは比較的 -容易です。単に、サービスを一切実行しないようにするだけです。安全なシステム +容易です。単にそのシステム上で、サービスを一切実行しないようにするだけです。安全なシステム を用いて、ssh 経由で他のシステムの root 空間にアクセスします。これは セキュリティの末端のように見えるかもしれません。しかし、管理者には信頼を どこかに置く必要があります。いきあたりばったりでサーバプロセスを 実行するような馬鹿げたことをしない限りは、安全度の高いマシンを構築する ことは本当に可能です。ここで .Sq 安全 という場合、物理アクセスに対する -セキュリティをも含めて仮定していることはもちろんです。安全なマシンで、 -他のすべてのマシンに root のアクセス権限を持つものが得られると、 +セキュリティをも含めて仮定していることはもちろんです。他のすべてのマシンに root のアクセス権限を持つ、安全なマシンがあれば、 「安全なマシンの上で」システムの他のマシンをチェックする セキュリティスクリプトを書くことができるようになります。 最も普通のチェック方法は、セキュリティスクリプトで、 まず、find と md5 のバイナリファイルをリモートマシンに .Xr scp 1 してから、 リモートシステムのすべてのファイル .Pq もしくは、少なくとも /, /var, /usr パーティション! に対して md5 を適用するシェルコマンドを ssh を使ってリモートマシンで実行するものです。 -安全なマシンは、チェック結果をファイルにコピーし、前回のチェック結果と -diff を取り -.Pq または、安全なマシン自身のバイナリと比較する -違いを -毎日のレポートとしてスタッフメンバひとりひとりにメールを送ります。 -.Pp -この種のチェックを行なうもう一つの方法として、安全なマシンに対して、 -他のマシンの主なファイルシステムを NFS export する方法があります。 +安全なマシンは、チェック結果をファイルにコピーし、前回のチェック結果との差分を取り +.Pq または、安全なマシン自身が持っているバイナリと比較する +、その差分を +毎日のレポートとしてスタッフメンバひとりひとりにメールで送ります。 +.Pp +この種のチェックを行うもう一つの方法として、 +他のマシンから主なファイルシステムを 安全なマシンに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 を破ったかを -追跡するのに際して特に有益です。 -.Pp -最後に、セキュリティスクリプトはログファイルを処理するようにして、 -ログファイル自体はできるだけ安全性の高い方法で -(リモート syslog は極めて有益になり得ます) +は、比較的オーバヘッドの低いオペレーティングシステムの機能で、 +マシンに侵入されてしまった後の評価の仕組みとして使用することをお勧め +します。 +侵入を受けた後でも当該ファイルが無傷である場合に、 +侵入者が実際にどのようにしてシステムの root を破ったかを +追跡するのに特に有益です。 +.Pp +最後に、セキュリティスクリプトはログファイルを処理するようにし、 +ログファイル自体もできるだけ安全性の高い方法で +.Sq リモート syslog は極めて有益になり得ます 生成するようにすべきです。侵入者は自分の侵入の痕跡を覆い隠そう -としますし、ログファイルはシステム管理者が最初の侵入の時刻と方法を -追跡してゆくために極めて重要です。 +としますし、また、ログファイルはシステム管理者が最初の侵入の時 +刻と方法を追跡してゆくために極めて重要です。 .Sh 偏執狂的方法 .Pp 多少偏執狂的になっても決して悪いことにはなりません。原則的に、 システム管理者は、便利さに影響を与えない範囲でいくつでもセキュリティ 機能を追加することができます。また、いくらか考慮した結果、便利さに 影響を与えるセキュリティ機能を追加することもできます。 -.Sh サービス不能攻撃 (D.O.S attack) についての特記事項 +.Sh サービス不能攻撃 (D.O.S. attack) についての特記事項 .Pp このセクションではサービス不能攻撃を扱います。サービス不能攻撃は、普通は、 パケット攻撃です。ネットワークを飽和させる最先端の偽造パケット .Pq spoofed packet 攻撃に対してシステム管理者が打てる手はそれほど多く -ありませんが、一般的に、その種の攻撃がサーバをダウンさせないことを -確実にすることで、被害を制限することはできます。 +ありませんが、一般的に、その種の攻撃によってサーバがダウン +しないことを確実にすることで、被害をある限度に食い止める +ことはできます。 .Bl -enum -offset indent .It サーバの fork の制限 .It 踏み台攻撃の制限 .Pq ICMP 応答攻撃、ping broadcast など .It カーネルの経路情報のキャッシュ .El .Pp 普通に見られるサービス不能攻撃に、fork するサーバプロセスに対する ものがあります。これは、サーバにプロセス・ファイル記述子・メモリを 食い尽くさせて、マシンを殺そうとするものです。 inetd .Po .Xr inetd 8 参照 .Pc には、この種の攻撃を制限するオプションがいくつかあります。マシンが ダウンすることを防止することは可能ですが、この種の攻撃によりサービスが -崩壊することを防止することは一般的に可能とは限らないことに注意する必要が -あります。inetd のマニュアルページを注意深く読んで下さい。とくに、 +崩壊することを防止することは一般的に言ってできないことに注意する必要が +あります。inetd のマニュアルページを注意深く読んで下さい。特に、 .Fl c , .Fl C , .Fl R オプションに注意して下さい。IP 偽造攻撃 .Pq spoofed-IP attack は inetd の .Fl C -オプションを出し抜くので、普通はオプションを +オプションの裏をかけるので、一般にオプションを 組み合わせて使用するべきであることに注意して下さい。スタンドアロンサーバ -のいくつかは、自己の fork 上限のパラメータを持っています。 +の中には、自分自身で fork を制限するパラメータを持っているものがあります。 .Pp sendmail には、 .Fl OMaxDaemonChildren オプションがあります。負荷には遅れがあるので、 sendmail の負荷に限界を設けるオプションを使うよりも、 このオプションを使う方がまともに動作する可能性ははるかに高いです。 sendmail の実行を開始する際に、 .Cm MaxDaemonChildren パラメータを設定するべきです。その値は、 通常見込まれる負荷を扱える程度に十分高いが、 それだけの数の 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 オプションを使って下さい。 .Pp tcpwrapper の逆 identd などの接続返し .Pq connect-back -を行なうサービスに -ついては十分注意を払うようにするべきです。これらは直接攻撃を食らう可能性が +を行うサービスに +ついては十分注意を払うようにするべきです。これらは直接攻撃を受ける可能性が あります。こういう事情があるので、tcpwrapper の逆 ident 機能を使おうとは -思わないのが一般的なところです。 +思わないのが一般的です。 .Pp 境界ルータのところでファイアウォールを設けて、外部からのアクセスに対して -内部サービスを防御することは実によい考えです。この考え方は、LAN の外 -からの飽和攻撃を防ぐことにあり、root からのネットワークベースの root -権限への攻撃から内部サービスを防御することに、あまり考慮を払って +内部サービスを防御するという考えは実によいものです。この考えは、LAN の外部 +からの飽和攻撃を防ぐことにあり、root ネットワークベースの root +権限への攻撃から内部サービスを防御することには、あまり考慮を払って いません。ファイアウォールは常に排他的に設定して下さい。つまり、 「ポート A, B, C, D と M から Z まで .Eo * 以外 .Ec * のすべてに防火壁を設ける」というふうにです。 このようにすることで、named -.Pq そこがゾーンのプライマリである場合 , +.Pq ゾーンのプライマリである場合 , ntalkd, sendmail など、インターネットにアクセスを提供するサービス -として特に指定するもの以外の、すべての低めのポートをファイアウォールで -停止することができます。ファイアウォールをこの他のやり方、つまり +として特に指定するもの以外の、小さい番号のポートすべてをファイアウォールで +防御することができます。ファイアウォールをこの他のやり方、つまり 包含的もしくは受容的なファイアウォールとして設定しようとする場合、 -いくつかのサービスを .Sq close -することを忘れたり、新しい内部サービスを -追加してファイアウォールの更新を忘れたりすることはよくあります。 -ファイアウォールの高めの範囲のポートを開けておいて、低めのポートを +することを忘れてしまうサービスがいくつか出てきたり、新しい内部サービスを +追加したのにファイアウォールの更新を忘れたりする可能性がよく出てきます。 +ファイアウォール上の大きい番号のポートを開けておいて、小さい番号のポートを 危険に晒すことなく受容的な動作を許すことができます。 .Bx Free では、net.inet.ip.portrange への sysctl .Pq sysctl -a \&| fgrep portrange , をいろいろ使用することで、 動的バインドに使用されるポート番号の範囲を制御できることを記憶にとどめて おいて下さい。これによりファイアウォールの設定の複雑性を緩和できます。 -私は、ファイアウォールに通常の範囲として、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 エラー 応答を生成するパケットを生成することにより、攻撃者はサーバの 受信ネットワークを飽和させることができ、同時に、サーバが送信 ネットワークを 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 内部テストサービスのすべてを無効にしておくものです。 .Pp 偽造パケット攻撃は、カーネルの経路情報キャッシュに過負荷を生じさせるために 用いられることもあります。net.inet.ip.rtexpire, rtminexpire, rtmaxcache の sysctl パラメータを参照して下さい。でたらめなソース IP を用いた この偽造パケット攻撃により、カーネルは、一時的なキャッシュ経路を 経路情報テーブルに生成します。これは .Sq netstat -rna \&| fgrep W3 で見ることができます。これらの経路は、普通は 1600 秒程度でタイムアウトに なります。カーネルがキャッシュ経路テーブルが大きくなり過ぎたことを 検知すると、カーネルは動的に rtexpire を減らしますが、rtminexpire より 小さくなるようには決して減らしません。ここに問題が 2 つあります。 (1) 負荷の軽いサーバが突然攻撃された場合、カーネルが十分素早く反応 -しないこと。(2) カーネルが攻撃に耐え生き延びられるほど十分 -rtminexpire が低くなっていないこと。自分のサーバが T3 もしくはそれより +できないこと。(2) カーネルが攻撃に耐え生き延びられるほど十分 +rtminexpire が低く設定されていないこと。の2つです。 +自分のサーバが T3 もしくはそれより 良質の回線でインターネットに接続されている場合、 .Xr sysctl 8 を用いて rtexpire と rtminexpire とを手動で上書きしておくことが思慮深いこと といえます。 -.Pq 自分のマシンをクラッシュさせたくない限りは:- -どちらかを 0 に -するようなことは決してしないで下さい。両パラメータを 2 秒に設定すれば、 +.Pq 自分のマシンをクラッシュさせたくないのであれば:-) +どちらか一方でも 0 に +は決してしないで下さい。両パラメータを 2 秒に設定すれば、 攻撃から経路情報テーブルを守るには十分でしょう。 .Sh 関連項目 .Pp .Xr accton 1 , .Xr chflags 1 , .Xr find 1 , .Xr kerberos 1 , .Xr md5 1 , .Xr ssh 1 , .Xr sshd 1 , .Xr syslogd 1 , .Xr xdm 1 , .Xr sysctl 8 .Sh 歴史 .Nm マニュアルページは、もともと .An Matthew Dillon によって書かれました。 最初に現れたのは、 .Bx Free -3.0.1 で 1998 年 12 月のことです。 .\" translated by Norihiro Kumagai, 98-12-29 diff --git a/ja/man/man8/adding_user.8 b/ja/man/man8/adding_user.8 index 5bbcbb2298..597e5cc9fa 100644 --- a/ja/man/man8/adding_user.8 +++ b/ja/man/man8/adding_user.8 @@ -1,126 +1,126 @@ .\" Copyright (c) 1980, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)adduser.8 8.1 (Berkeley) 6/5/93 .\" %Id: adding_user.8,v 1.2 1997/03/07 03:28:19 jmg Exp % .\" jpman %Id: adding_user.8,v 1.3 1997/07/22 16:44:29 horikawa Stab % .\" .Dd June 5, 1993 .Dt ADDING_USER 8 .Os BSD 4 .Sh 名称 .Nm adding_user .Nd 新規ユーザ登録のためのプロシージャ .Sh 解説 新規ユーザはログイン名を選ばなければなりません。 ここで、ログイン名は既に .Pa /etc/passwd や .Pa /etc/aliases に登録されているものであってはいけません。 また、ハイフン .Ql Fl 文字で始まるものも使えません。 メーラを混乱させないためにも、全ての文字は英小文字でドット .Ql \&. 文字を含まないことが、強く推奨されています。 アカウントは、パスワードファイルを一行編集することで加えることが できます。これを行う時は、パスワードファイルはロックされていなければ なりません。このロックは、 .Xr chpass 1 や .Xr vipw 8 を使うことで可能です。 .Pp 新規ユーザには、グループとユーザ id を与えます。 ログイン名とユーザ id は、システム全体やしばしばシステムグループで 一意でなければなりません。これは、ファイルのアクセスを制御するために 使われるからです。 典型的には、似たようなプロジェクトで働いているユーザは同じグループに 入ります。 University of California の Berkley 校では、システムスタッフ・ 学部・大学院・大きなプロジェクトのための特別なプロジェクトのグループが あります。 .Pp 新規ユーザ \*(lqernie\*(rq のための骨格となるアカウントは、以下のようになります。 .Bd -literal ernie::25:30::0:0:Ernie Kovacs,508 Evans Hall,x7925, 642-8202:/a/users/ernie:/bin/csh .Ed .Pp 個々のフィールドの解説は、 .Xr passwd 5 を参照してください。 .Pp 新規ユーザに始めるにあたっていくつかの助けを与えることは良いことです。 このために、いくつかの骨格となるファイルを与えてあげれます。 .Pa /bin/sh ユーザには、 .Pa \&.profile を、 .Pa /bin/csh ユーザには、 .Pa \&.cshrc や .Pa \&.login を与えれば良いでしょう。 .Pa /usr/share/skel ディレクトリに、そのようなファイルの骨格の定義を置いておけます。 新規ユーザは、これらのファイルの複製を与えられます。 ここで、例えば .Xr tset 1 をログインする度に自動的に実行するように設定できます。 .Sh 関連ファイル .Bl -tag -width /etc/master.passwdxx -compact .It Pa /etc/master.passwd ユーザデータベース .It Pa /usr/share/skel ログインディレクトリのための骨格データ .El .Sh 関連項目 .Xr chpass 1 , .Xr finger 1 , .Xr passwd 1 , .Xr aliases 5 , .Xr passwd 5 , .Xr adduser 8 , .Xr pwd_mkdb 8 , .Xr vipw 8 .Sh バグ ユーザ情報は (段々とそうなってきていますが)、別のところに 記憶するべきです。 .Sh 歴史 .Nm -プロシージャは +手続きは .Bx 3.0 から導入されました. diff --git a/ja/man/man8/rpc.yppasswdd.8 b/ja/man/man8/rpc.yppasswdd.8 index 117e6c4075..4f9fc3a4f1 100644 --- a/ja/man/man8/rpc.yppasswdd.8 +++ b/ja/man/man8/rpc.yppasswdd.8 @@ -1,326 +1,327 @@ .\" Copyright (c) 1995, 1996 .\" Bill Paul . All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by Bill Paul. .\" 4. Neither the name of the author nor the names of contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %Id: rpc.yppasswdd.8,v 1.9 1998/03/23 08:28:39 charnier Exp % .\" jpman %Id: rpc.yppasswdd.8,v 1.3 1997/08/31 14:17:34 horikawa Stab % .\" .Dd February 8, 1996 .Dt RPC.YPPASSWDD 8 .Os .Sh 名称 .Nm rpc.yppasswdd .Nd "NIS パスワードを変更するためのサーバ" .Sh 書式 .Nm rpc.yppasswdd .Op Fl t Ar master.passwd template file .Op Fl d Ar default domain .Op Fl p Ar path .Op Fl s .Op Fl f .Op Fl a .Op Fl m .Op Fl i .Op Fl v .Op Fl u .Op Fl h .Sh 解説 .Nm デーモンは、ユーザが .Xr yppasswd 1 と .Xr ypchpass 1 コマンド使うことで、 NIS パスワードおよび他の情報を変更することを許します。 .Nm は、パスワードの変更要求を受け入れ、その認証を行い、 .Pa /var/yp/master.passwd ファイル中に更新された情報を配置し、 NIS の .Pa master.passwd マップと .Pa passwd マップを更新する、 RPC を使ったサーバです。 .Pp .Nm は、普通の NIS ユーザが、自分の NIS パスワード・ -('GECOS'フィールドとして知られている)フルネーム・シェルを変更することを許します。 +('GECOS'フィールドとして知られている) フルネーム・ +シェルを変更することを許します。 これらの更新は、典型的には .Xr yppasswd 1 , .Xr ypchfn 1 , .Xr ypchsh 1 , .Xr ypchpass 1 コマンドを使って行われます。 (管理者の中には、ユーザが名前の情報やシェルを変更することを 望まない人もいます。サーバは、オプションフラグを使うことで、そのような 変更ができない様にできます。)サーバが更新要求を受け取ると、 .Pa /var/yp/securenets ファイルに記述されている .Pa securenets 規則 (securenets に関する詳細な情報は .Xr ypserv 8 のマニュアルページを参照してください。 .Nm サーバは、 .Xr ypserv 8 -と同じアクセス制御機構を使います。)に照らして、 +と同じアクセス制御機構を使います。) に照らして、 要求を行ったクライアントのアドレスを比較します。 .Pp サーバは、その後ユーザが入力した '古い' パスワードが有効かどうかを 確認し、その後いくつかの更新情報のチェックを行います (これらには、制御文字のチェックやコロンや有効なシェルのチェックを 含みます)。ひとたび更新要求が有効であることが満足されると、 サーバはパスワードテンプレートファイル (デフォルトでは、 .Pa /var/yp/master.passwd です) を更新し、その後 NIS マップを再構築するために .Pa /usr/libexec/yppwupdate -スクリプトを実行します。(このスクリプトは、二つの引数を受け取ります: +スクリプトを実行します。(このスクリプトは、2 つの引数を受け取ります: それらは変更されたパスワードテンプレートの相対パス名と更新された ドメインの名前です。これらは、 .Pa /var/yp/Makefile に渡されます。) .Pp .Bx Free 版の .Nm は、NIS マスタサーバ上のスーパユーザが NIS パスワードマップを更新するための より洗練された方法を提供します。スーパユーザは任意のドメインの 任意のユーザの master.passwd エントリの任意のフィールドを変更できます。 これは、ユーザの現在の NIS パスワードについて知らなくても可能です (サーバがスーパユーザからの要求を受け取ると、パスワード認証は 省略します)。そのうえ、サーバが .Fl a フラグ付きで実行された時には、スーパユーザは .Xr ypchpass 1 を使って、新しいエントリをマップに付け加えることさえできます。 また、これは、 NIS マスタサーバ上のスーパユーザだけに適用されます。 これらの特別な機能はネットワークを介しては提供されません。 .Pp .Nm デーモンは、 NIS マスタサーバである機械上でだけ実行することが できます。 .Sh オプション 以下のオプションが使用可能です: .Bl -tag -width indent .It Fl t Ar master.passwd template file デフォルトでは、 .Nm は、デフォルトドメインの .Pa master.passwd と .Pa passwd を生成するために使われるテンプレートファイルは、 .Pa /var/yp/master.passwd であることを仮定しています。このデフォルトは、代わりのファイル名を .Fl t フラグとともに指定することで上書きできます。 .Pp (注意): このフラグとともに指定されたテンプレートファイルが .Pa /etc/master.passwd である場合、 .Nm は NIS のマップに加えてローカルのパスワードデータベースを 再構成するために、自動的に .Xr pwd_mkdb 8 を呼び出します。 .It Fl d Ar domain .Nm -サーバは複数のドメインを扱うことができますが、一つのドメインを +サーバは複数のドメインを扱うことができますが、1 つのドメインを デフォルトとして選ばなければなりません。 .Xr domainname 1 コマンドによって設定されたシステムデフォルトのドメイン名を 使おうとします。しかしながら、システムドメイン名が設定されていない場合、 デフォルトドメイン名はコマンドラインで指定しなければなりません。 システムデフォルトドメインが設定されている場合、このオプションはその 定義を上書きします。 .It Fl p Ar path このオプションは、デフォルトの NIS マップデータベースのパスを 上書きするために使われます。コンパイル時に指定されているデフォルトの パスは .Pa /var/yp です。 .It Fl s シェル情報の変更を認めません。 .It Fl f フルネーム ('GECOS') 情報の変更を認めません。 .It Fl a NIS パスワードデータベースへの追加を許可します。NIS マスタサーバ上の スーパユーザは、 .Xr ypchpass 1 コマンドでユーザの .Pa master.passwd マップエントリのどんなフィールドでも、無制限の変更を行うことが 許されています。 .Nm がこのフラグを付けて実行された場合、 .Xr chpass 1 を使用したローカルパスワードデータベース更新にて可能であるのと同様に、 スーパユーザが NIS パスワードマップに新しいレコードを追加することを許可します。 .It Fl m マルチドメインモードを有効にします。 .Xr ypserv 8 は同時にいくつかのドメインを扱うことができますが、ほとんどの .Nm -実装では、一つの NIS ドメインだけしか扱うことができません。 +実装では、1 つの NIS ドメインだけしか扱うことができません。 これは、一般に NIS マスタサーバのシステムデフォルトドメインと同じです。 .Bx Free の .Nm は、 .Pa yppasswd プロトコルでは .Pa domain 引数をクライアントの要求中に含めることが出来ないという プロトコル固有の制限にもかかわらず、 この問題を解決しようとしています。 マルチドメインモードでは、 .Nm は .Pa /var/yp 下の全ドメインの全パスワードマップを検索し、 与えられた更新要求で指定されたユーザ情報と一致するエントリを見付けます。 (一致したかどうかは、ユーザ名と UID および GID フィールドを調べることで 決定されます。) 一致したエントリとそのドメインはその後更新のために 使われます。 .Pp マルチドメインモードがうまく動くためには、各ドメイン毎に 別々のテンプレートファイルが必要なことに注意してください。 例えば、サーバが 3 つのドメイン .Pa foo , .Pa bar , .Pa baz を提供している時、 3 つの別の master.passwd テンプレートファイル .Pa /var/yp/foo/master.passwd , .Pa /var/yp/bar/master.passwd , .Pa /var/yp/baz/master.passwd が必要です。 .Pa foo がシステムデフォルトドメインであったとすると、そのテンプレートファイル は .Pa /var/yp/foo/master.passwd もしくは .Pa /var/yp/master.passwd のどちらであっても構いません。 サーバは、後のファイルを先に確認し、見付からない場合には先のファイルを 確認します。 .Pp デフォルトでは、マルチドメインモードにはなっていません。 これは、異なったドメインに同じもしくは似ているエントリが存在した場合 に失敗するからです。検索領域に複数のエントリを見付けた場合、 サーバは更新要求を停止します。 したがって、偏執的な管理者はマルチドメインモードを利用不可能にしたいと 思うでしょう。 .It Fl i .Nm がこのフラグ付きで呼び出された場合、マップ更新をその場で行おうとします。 この意味は、 パスワードテンプレートファイルを直接更新してマップ更新する代わりに、 サーバがマップデータベースを直接更新するということです。 これは、パスワードマップが大きい時に有効です。例えば、 パスワードデータベースに 10,000 ものエントリがある場合、マップの更新が 終了するまでに数分かかってしまいます。その場でマップを更新することで、 この時間を数秒までに減らすことができます。 .It Fl v 冗長なログモードに入ります。通常、サーバはエラー状態時や スーパユーザによる NIS マスタサーバ上での更新n時に、 .Xr syslog 3 の能力を使ってメッセージを記録します。サーバが .Fl v オプションを使って実行されている時には、全ての更新に対する 情報メッセージを記録します。 .It Fl u たくさんの商用の .Xr yppasswd 1 クライアントは、 .Nm への要求を送る時に予約ポートを使いません。 これは、 .Xr yppasswd 1 が root に set-uid されずにインストールされているか、 RPC の実装が スーパユーザのためにクライアント接続が確立されたとき、 予約ポートを割り当てることをしないようになっているためです。 デフォルトでは、 .Nm は、クライアントからの結果を予約ポートを使って受け取ることを期待します。 非特権ポートから受け取った要求は、排除されます。不幸にして、この振舞いは 特権ポートを使えないクライアントシステムからのパスワード更新要求を妨げます。 .Fl u フラグを指定することで、 .Nm は、特権ポートを使えない .Xr yppasswd 1 でも働くように、特権ポートのチェックを無効にします。 これは、少しセキュリティを低下させますが、クライアントの振舞いを 変更できない場合には必要になるでしょう。 .It Fl h .Nm が理解できるフラグやオプションのリストを表示します。 .El .Sh 関連ファイル .Bl -tag -width Pa -compact .It Pa /usr/libexec/yppwupdate NIS マップを更新し、その後でプッシュするために、 .Nm によって呼び出されるスクリプトです。 .It Pa /var/yp/master.passwd デフォルトドメインのためのテンプレートパスワードファイルです。 .It Pa /var/yp/[domainname]/[maps] 特定の NIS ドメインのための NIS マップです。 .It Pa /var/yp/[domainname]/master.passwd デフォルトでないドメインのための一時パスワードファイルです (マルチドメインモードだけで使われます)。 .El .Sh 関連項目 .Xr yp 4 , .Xr yppush 8 , .Xr ypserv 8 , .Xr ypxfr 8 .Sh バグ yppasswd.x プロトコル定義で記述されているように、 -YPPASSWDPROC_UPDATE プロシジャは二つの引数を取ります。 +YPPASSWDPROC_UPDATE 手続きは 2 つの引数を取ります。 更新するユーザ情報を含む V7 形式のパスワード構造および、 ユーザの暗号化されない (クリアテキスト) パスワードです。 .Nm はリモートの NIS クライアントマシンからの更新要求を扱うことを 仮定しています。これは、 .Xr yppasswd 1 や似たようなクライアントプログラムがネットワークを通して、 ユーザのクリアテキストパスワードを転送するということを意味します。 .Pp これはパスワード更新では問題ではありません。 なぜなら、更新と共に送られるプレインテキストパスワードは、 新しい暗号化されたパスワードが有効になった時には無効になっているからです。 しかし、ユーザが自分の 'GECOS' 情報やシェルを更新する場合には、 更新と共に送られるクリアテキストパスワードは、 更新完了時にも有効です。 ネットワークがセキュアでない場合、このクリアテキストパスワードは、 途中でとらえられ、 そのユーザアカウントに対する不正アクセスに使用されるかも知れません。 .Sh 作者 .An Bill Paul Aq wpaul@ctr.columbia.edu diff --git a/ja/man/man8/ypbind.8 b/ja/man/man8/ypbind.8 index db74f85b71..a05cf7ba15 100644 --- a/ja/man/man8/ypbind.8 +++ b/ja/man/man8/ypbind.8 @@ -1,182 +1,182 @@ .\" Copyright (c) 1991, 1993, 1995 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %Id: ypbind.8,v 1.12 1998/03/23 08:30:31 charnier Exp % .\" jpman %Id: ypbind.8,v 1.4 1997/06/18 16:55:44 horikawa Stab % .\" .Dd April 9, 1995 .Dt YPBIND 8 .Os .Sh 名称 .Nm ypbind .Nd "NIS ドメインをバインドするデーモン" .Sh 書式 .Nm ypbind .Op Fl ypset .Op Fl ypsetme .Op Fl s .Op Fl m .Op Fl S Ar domainname,server1,server2,... .Sh 解説 .Nm は NIS バインド情報を管理するプロセスです。 開始時にネットワークブロードキャストを行い、( .Xr domainname 1 コマンドにより設定された) システムデフォルトドメインに対して サービスする NIS サーバを探します。 返答を受け取ると、サーバのアドレス等の情報をファイル .Pa /var/yp/binding に格納します。 標準 C ライブラリ中の NIS ルーチンは、 NIS リクエストを処理する時にはこのファイルを使用します。 NIS クライアントは複数のドメインにバインドされる事がありうるため、 このようなファイルが複数ある場合があります。 .Pp バインドされると、 .Nm は DOMAIN_NONACK リクエストを NIS サーバ宛に 1 分置きに送ります。 リクエストに対する返答が得られない場合、 .Nm はサーバがもう実行していないものとし、 別サーバにバインドされるまでネットワークブロードキャストを再開します。 .Nm は、サーバが返答しなかったことを検知するたび および新たなサーバにバインドされるたび、 警告メッセージを .Xr syslog 3 の機能を使用して記録します。 .Sh オプション 以下のオプションが .Nm にてサポートされています: .Bl -tag -width indent .It Fl ypset .Xr ypset 8 コマンドを使用し、 指定されたドメインの特定の NIS サーバに .Nm を強制的にバインドする事は可能です。 しかし .Nm は、正確には誰が要求しているのかを知る事が出来ないため、 YPBINDPROC_SETDOM リクエストをデフォルトでは拒否します。 .Fl ypset フラグを使用する事により、 .Nm にあらゆるホストからの YPBINDPROC_SETDOM リクエストを受理させられます。 任意のユーザにより NIS クライアントのバインドがリセットされてしまうという セキュリティ上の危険がありますので、 このオプションは診断目的および短い期間のみ使用すべきです。 .It Fl ypsetme これは .Fl ypset フラグに似ていますが、YPBINDPROC_SETDOM リクエストがローカルホスト発の場合のみ 処理を許すという点のみ異なります。 .It Fl s .Nm を安全モードで実行します: root 以外により実行されている NIS サーバ (つまり、特権 TCP ポートを使用していないもの)へのバインドを拒否します。 .It Fl S Ar domainname,server1,server2,server3,... システム管理者は .Nm を特定のドメインおよび NIS サーバグループへロック出来ます。 10 サーバまで指定できます。 domain/server 指定においては、コンマの間には空白を入れてはなりません。 このオプションを指定する事により、 ある 1 つのドメインおよび指定されたサーバのうちの 1 つにのみに システムがバインドされる事を保証できます。 これは NIS サーバであり NIS クライアントでもあるシステムにて有用です: システムがバインド可能なマシンの限定を、 しばしばセキュリティホールであるとされる .Fl ypset や .Fl ypsetme といったオプションを指定する必要無く行えます。 指定されるサーバの有効なエントリが、ローカルの .Pa /etc/hosts ファイルに存在する必要があります。 ホスト名の代わりに IP アドレスを指定しても構いません。 .Nm が引数を解釈できない場合、 .Fl S フラグを無視し、通常の動作を行います。 .Pp .Nm は .Fl S フラグにより指定されるドメイン名を、システムデフォルトドメインと解釈 することに注意して下さい。 .It Fl m 制限されたモードのサーバリストからのサーバ選択において、 .Nm にブロードキャストではなく、 「メニーキャスト(many-cast)」を使用させます。 メニーキャストモードでは、制限されたリストで指定されるサーバの -YPPROC_DOMAIN_NONACK プロシジャに対して直接通信し、 +YPPROC_DOMAIN_NONACK 手続きに対して直接通信し、 最も速く返答したサーバに対してバインドします。 NIS サーバがローカルにない NIS クライアントにおいて、 このモードが有用です。 .Fl m フラグは上述の .Fl S フラグと組み合わせてのみ使用可能です ( .Fl S フラグと組み合わせない場合には効果がありません)。 .El .Sh 注釈 .Nm は 2 番目のドメインのバインドを連続して保持しようとはしません。 2 番目のドメインのサーバが ping に応答しない場合、 .Nm はあきらめる前に一度だけ新たなサーバを探してブロードキャストします。 クライアントプログラムがバインドされていないドメインを参照しようとした場合、 .Nm は再度ブロードキャストしようとします。 これとは対称的に、クライアントプログラムが参照していようといまいと、 .Nm はデフォルトドメインへのバインドを自動的に保持します。 .Sh 関連ファイル .Bl -tag -width /etc/rc.conf -compact .It Pa /var/yp/binding/[domainname].[version] NIS ドメインに関連したバインド情報を保持するファイル。 .It Pa /etc/rc.conf システムデフォルトのドメインと ypbind 開始オプションを指定する 設定ファイル。 .El .Sh 関連項目 .Xr domainname 1 , .Xr syslog 3 , .Xr yp 4 , .Xr ypserv 8 , .Xr ypset 8 .Sh 作者 .An Theo de Raadt Aq deraadt@fsa.ca diff --git a/ja_JP.eucJP/man/man1/rpcgen.1 b/ja_JP.eucJP/man/man1/rpcgen.1 index 5aab4e10ee..d961ad9529 100644 --- a/ja_JP.eucJP/man/man1/rpcgen.1 +++ b/ja_JP.eucJP/man/man1/rpcgen.1 @@ -1,506 +1,506 @@ .\" @(#)rpcgen.1 1.35 93/06/02 SMI .\" Copyright 1985-1993 Sun Microsystems, Inc. .\" jpman %Id: rpcgen.1,v 1.2 1997/06/08 13:49:19 jsakai Stab % .Dd March 28, 1993 .Dt RPCGEN 1 .Os .Sh 名称 .Nm rpcgen .Nd RPC プロトコルコンパイラ .Sh 書式 .Nm rpcgen .Ar infile .Nm rpcgen .Op Fl a .Op Fl b .Op Fl C .Oo .Fl D Ns Ar name Ns Op Ar =value .Oc .Op Fl i Ar size .Op Fl I Op Fl K Ar seconds .Op Fl L .Op Fl M .Op Fl N .Op Fl T .Op Fl Y Ar pathname .Ar infile .Nm rpcgen .Oo .Fl c | .Fl h | .Fl l | .Fl m | .Fl t | .Fl \&Sc | .Fl \&Ss | .Fl \&Sm .Oc .Op Fl o Ar outfile .Op Ar infile .Nm rpcgen .Op Fl s Ar nettype .Op Fl o Ar outfile .Op Ar infile .Nm rpcgen .Op Fl n Ar netid .Op Fl o Ar outfile .Op Ar infile .\" .SH AVAILABILITY .\" .LP .\" SUNWcsu .Sh 解説 .Nm rpcgen は、ある .Tn RPC プロトコルを実現する C コードを生成するツールです。 .Nm への入力は、 .Tn RPC -言語 (リモートプロシージャコール言語) として知られる、 +言語 (遠隔手続き呼び出し言語; Remote Procedure Call Language) として知られる、 C 言語に類似した言語です。 .Pp .Nm rpcgen は通常第 1 の書式で使用され、 1 つの入力ファイルから 4 つの出力ファイルを生成します。 .\" ↑原文では three output files となっているが、すぐ後ろで 4 つ列挙している。 .\" 原文の誤りと思われる。 97/06/08 J.Sakai 入力ファイル .Ar infile が .Pa proto.x であるとすると、 .Nm はヘッダファイル .Pa proto.h 、 XDR ルーチンファイル .Pa proto_xdr.c 、 サーバ側スタブ .Pa proto_svc.c 、 クライアント側スタブ .Pa proto_clnt.c を作成します。 .Fl T オプションを指定すると、上記に加え、 .Tn RPC ディスパッチテーブル .Pa proto_tbl.i も作成します。 .Pp .Nm rpcgen はまた、特定アプリケーション向けにカスタマイズ可能な クライアントおよびサーバのサンプルファイルも生成できます。 オプション .Fl \&Sc , .Fl \&Ss , .Fl \&Sm によってそれぞれ、サンプルのクライアント、サーバ、makefile を生成します。 オプション .Fl a を指定するとサンプルを含め全てのファイルを生成します。 入力ファイル .Ar infile が .Pa proto.x の場合、 クライアント側サンプルファイルは .Pa proto_client.c に、 サーバ側サンプルファイルは .Pa proto_server.c に、 そしてサンプル makefile は .Pa makefile.proto に書き出されます。 .Pp 生成されたサーバは、ポートモニタ (例えば .Xr inetd 8 ) で起動することも、 それ自身で起動することもできます。 ポートモニタから起動される場合、 ファイルディスクリプタ .Em 0 を引き渡すトランスポートのためだけの サーバを生成します。 トランスポートの名前は環境変数 .Ev PM_TRANSPORT をセットすることで 指定しなければなりません。 .Nm で作成されたサーバが実行されると、 サーバは環境変数 .Ev NETPATH で指定された全トランスポート用に サーバハンドルを作成します。 .Ev NETPATH が指定されていない場合は、ファイル .Pa /etc/netconfig に記述されている全ての可視トランスポート用にサーバハンドルを作成します。 注意: トランスポートはコンパイル時ではなく実行時に選択されます。 サーバが自分で開始すると、 デフォルトでは自動的にバックグラウンド実行に移ります。 .Em RPC_SVC_FG を定義することで、 サーバをフォアグラウンドで実行させることもできます。 .Pp 第二の書式は、更に洗練された .Tn RPC サーバを生成する特別な機能をもちます。 その特別な機能として、 ユーザが定義した .Em #define と .Tn RPC ディスパッチテーブル のサポートがあります。 .Tn RPC ディスパッチテーブルのエントリには以下のものがあります: .Bl -bullet -offset indent -compact .It -そのプロシージャに対応するサービスルーチンへのポインタ +その手続きに対応するサービスルーチンへのポインタ .It 入出力引数へのポインタ .It これらのルーチンのサイズ .El サーバはディスパッチテーブルを用いて認証チェックを行い、 それからサービスルーチンを実行することができます。 クライアントライブラリはそれを用いて、 記憶領域管理や XDR データ変換の詳細に対処することができます。 .Pp 上に示した他の 3 つの書式は、出力ファイルの全てではなく、 そのうちの特定のものだけを生成したい場合に用いられます。 .Nm の使用例については下の .Sx 使用例 のセクションを参照して下さい。 .Fl s オプション付きで実行されると、 .Nm は特定のトランスポートクラス用のサーバを生成します。 .Fl n オプション付きで実行されると、 .Nm は .Ar netid で指定されたトランスポート用サーバを生成します。 .Ar infile が指定されない場合、 .Nm は標準入力から入力を受け付けます。 .Pp 入力ファイルは、実際に .Nm に処理される前に、 C プリプロセッサ .Em cc -E で処理されます。 .Nm は、出力ファイルの各タイプ毎に .Nm プログラマ向けの特別なプリプロセッサシンボルを定義します: .Bl -tag -width indent .It RPC_HDR ヘッダをコンパイルする際に定義されます .It RPC_XDR XDR ルーチンをコンパイルする際に定義されます .It RPC_SVC サーバ側スタブをコンパイルする際に定義されます .It RPC_CLNT クライアント側スタブをコンパイルする際に定義されます .It RPC_TBL RPC ディスパッチテーブルをコンパイルする際に定義されます .El .Pp .Dq % で始まる行は全て、 .Nm に解釈されることなく、 出力ファイルに直接引き継がれます。 C プリプロセッサのパス名を指定するには .Fl Y フラグを使用して下さい。 .Pp .Ar infile で参照される全てのデータ方に対し、 .Nm は、そのデータ型名の前に .Em xdr_ を付与した名前の ルーチンが存在することを仮定します。 このルーチンが .Tn RPC/XDR ライブラリ中に存在しない場合は、 それを提供しなければなりません。 未定義データ型を提供することで .Xr XDR ルーチンをカスタマイズすることが可能です。 .Sh オプション オプションは以下の通りです: .Bl -tag -width indent .It Fl a サンプルファイルを含め、全てのファイルを生成します。 .It Fl b 従来互換モード。 以前のバージョンの OS のために、トランスポート固有の .Tn RPC コードを生成します。 .Pp 注: .Bx Free ではこの互換フラグはデフォルトで有効になっています。 .Bx Free は以前の .Tn ONC RPC ライブラリのみサポートしているからです。 .It Fl c .Tn XDR ルーチンをコンパイル出力します。 .It Fl C .Tn ANSI C コンパイラで使用できるヘッダおよびスタブファイルを生成します。 このオプションで生成したヘッダファイルは C++ プログラムでも使用できます。 .It Fl D Ns Ar name .It Fl D Ns Ar name=value .\".It Fl D Ns Ar name Ns Op Ar =value シンボル .Ar name を定義します。 ソース中の .Em #define 指示行と等価です。 .Ar value が指定されない場合、 .Ar value は .Em 1 と定義されます。 このオプションは複数回の指定が可能です。 .It Fl h C のデータ定義 (ヘッダファイル) をコンパイル出力します。 同時に .Fl T オプションを指定することで、 .Tn RPC ディスパッチテーブルをサポートするヘッダファイルを生成できます。 .It Fl i Ar size インラインコードを生成し始めるサイズを指定します。 最適化を行う際に用いられます。デフォルト値は 5 です。 .Pp 注: .Bx Free プラットホームでの以前の .Nm と互換性を保つため、デフォルト値は実際には 0 (つまり、 デフォルトではインラインコードは生成しない) となっています。 このデフォルト値を上書きするには明示的にゼロ以外の値を 指定しなければなりません。 .It Fl I サーバ側スタブにおける .Xr inetd 8 サポートコードを生成します。 このようにして生成したサーバは、単独で起動することも、 .Nm inetd から起動することもできます。 単独で起動した場合、デフォルトでは自らバックグラウンド動作に移ります。 特殊シンボル .Em RPC_SVC_FG を定義するか、 単に .Fl I オプションなしでコンパイルすると、 サーバプロセスはフォアグラウンドで動作します。 .Pp クライアントからの未処理リクエストがなければ、 .Nm inetd サーバは 120 秒 (デフォルト値) 経過の後、終了します。 このデフォルト値は .Fl K オプションにより変更できます。 .Nm inetd サーバの全エラーメッセージは常に .Xr syslog 3 によってログに残されます。 .\" .IP .\" Note: .\" this option is supported for backward compatibility only. .\" By default, .\" .B rpcgen .\" generates servers that can be invoked through portmonitors. .Pp .It Fl K Ar seconds デフォルトでは、 .Nm を用いて作成され、ポートモニタから起動された サービスは、リクエストを処理した後 120 秒待って終了します。 この時間は .Fl K オプションを用いて変更できます。 リクエスト処理が済むと直ちに終了するようなサーバを生成するには、 .Fl K Ar 0 と指定します。また、決して終了しないサーバを生成するには、 .Fl K Ar -1 として下さい。 .Pp サーバをモニタする場合、 あるサービスリクエストに対して .Em 常に 新しいプロセスを生成するようなポートモニタがあります。 そのようなモニタを用いてサーバを使用することがわかっている場合は、 サーバは処理完了後直ちに終了すべきです。 そのようなサーバを生成するには、 .Nm は .Fl K Ar 0 オプションとともに使用すべきです。 .It Fl l クライアント側スタブをコンパイル出力します。 .It Fl L サーバがフォアグラウンドで起動された場合、 サーバのエラーを記録するのに、標準エラー出力に出力する代わりに .Xr syslog 3 を使用します。 .It Fl m サーバ側スタブをコンパイル出力しますが、 .Qq main ルーチンは生成しません。 コールバックルーチンのみを作成したり、初期化を行うために 独自の .Qq main ルーチンを必要とする場合に便利です。 .It Fl M rpcgen が生成したコードとユーザが書いたコードの間で 引数や結果を受渡しするために、 マルチスレッド対応の (MT-safe な) スタブを生成します。 ユーザプログラム中でスレッドを使用する場合に有用です。 しかし関数 .Xr rpc_svc_calls 3 はまだ MT-safe にはなっていません。 つまり rpcgen が生成したサーバ側コードは MT-safe ではありません。 .It Fl N -プロシージャが複数の引数を持てるようにします。 +手続きが複数の引数を持てるようにします。 これはまた、C 言語に大変似たパラメータ渡し方法を用います。 -ですからリモートプロシージャにある引数を渡す場合、 +ですから遠隔手続きにある引数を渡す場合、 その引数へのポインタを渡す必要はなく、引数そのものを渡せます。 この動作は .Nm が生成したコードの以前の振る舞いとは異なっています。 以前との互換性を保つため、このオプションはデフォルトでは有効ではありません。 .It Fl n Ar netid .Ar netid で指定したトランスポート用のサーバ側スタブをコンパイル出力します。 netconfig データベースには .Ar netid 用エントリが存在しなければなりません。 このオプションを複数回指定することで、 複数のトランスポートに対してサービスするサーバを作成することができます。 .It Fl o Ar outfile 出力ファイル名を指定します。 何も指定されなければ標準出力が用いられます ( .Fl c , .Fl h , .Fl l , .Fl m , .Fl n , .Fl s , .Fl \&Sc , .Fl \&Sm , .Fl \&Ss , .Fl t モード時のみ)。 .It Fl s Ar nettype クラス .Ar nettype に属する全てのトランスポート用の サーバ側スタブをコンパイル出力します。 サポートされているクラスは以下の通りです: .Em netpath , .Em visible , .Em circuit_n , .Em circuit_v , .Em datagram_n , .Em datagram_v , .Em tcp , .Em udp (これらのクラスの意味については .Xr rpc 3 を参照して下さい) このオプションは複数回指定できます。 注: トランスポートはコンパイル時ではなく実行時に選択されます。 .It Fl \&Sc -リモートプロシージャ呼び出しを用いるサンプルクライアントコードを生成します。 +遠隔手続き呼び出しを用いるサンプルクライアントコードを生成します。 .It Fl \&Sm アプリケーションをコンパイルする際に用いるサンプル .Pa Makefile を生成します。 .It Fl \&Ss -リモートプロシージャ呼び出しを用いるサンプルサーバコードを生成します。 +遠隔手続き呼び出しを用いるサンプルサーバコードを生成します。 .It Fl t .Tn RPC ディスパッチテーブルをコンパイル出力します。 .It Fl T .Tn RPC ディスパッチテーブルをサポートするコードを生成します。 .Pp ある特定のタイプのファイルを生成するために、 以下のオプション .Fl c , .Fl h , .Fl l , .Fl m , .Fl s , .Fl \&Sc , .Fl \&Sm , .Fl \&Ss , .Fl t は排他的に使用されます。 他方、オプション .Fl D と .Fl T は大域的であり、他のオプションと組み合わせて使用できます。 .It Fl Y Ar pathname .Nm が C プリプロセッサを探し始めるディレクトリ名を指定します。 .El .Sh 使用例 以下の例: .Dl example% rpcgen -T prot.x .Pp は 5 種類のファイル: .Pa prot.h , .Pa prot_clnt.c , .Pa prot_svc.c , .Pa prot_xdr.c , .Pa prot_tbl.i の全てを生成します。 .Pp 次の例は C のデータ定義 (ヘッダ) を標準出力に出力します。 .Dl example% rpcgen -h prot.x .Pp .Fl D Ns Ar TEST のテストバージョンを作成するため、 クラス .Ar datagram_n に属する全トランスポート用サーバ側スタブを標準出力に出力するには次のよ うにします: .Dl example% rpcgen -s datagram_n -DTEST prot.x .Pp .Ar netid tcp で指定されたトランスポート用のサーバ側スタブを作成するには次のようにし ます: .Dl example% rpcgen -n tcp -o prot_svc.c prot.x .Sh 関連項目 .Xr cc 1 , .Xr rpc 3 , .Xr syslog 3 , .Xr inetd 8 .\" .BR rpc_svc_calls (3) .Pp .Tn NETP マニュアルの .Nm の章。 diff --git a/ja_JP.eucJP/man/man1/sh.1 b/ja_JP.eucJP/man/man1/sh.1 index 3ddc308006..cff084dddb 100644 --- a/ja_JP.eucJP/man/man1/sh.1 +++ b/ja_JP.eucJP/man/man1/sh.1 @@ -1,1201 +1,1200 @@ .\" Copyright (c) 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" Kenneth Almquist. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95 .\" %Id: sh.1,v 1.23 1998/12/18 03:51:18 jkoshy Exp % .\" .\" jpman %Id: sh.1,v 1.2 1997/05/31 16:40:31 jsakai Stab % .\" Japanese Translation amended by Norihiro Kumagai, 3/29/96, .\" based on the version of NetBSD Japanese Man Project .\" This amended version is for the FreeBSD-jpman Project, convened .\" by Kazuo Horikawa. .\" .Dd May 5, 1995 .Dt SH 1 .Os BSD 4 .Sh 名称 .Nm sh .Nd コマンドインタプリタ(シェル) .Sh 書式 .Nm .Op Fl /+abCEefIimnpsuVvx .Op Fl /+o Ar longname .Op Fl c Ar string .Op Ar arg ... .Sh 解説 .Nm はシステムの標準コマンドインタープリタです。 現在 .Nm は .St -p1003.2 のシェル規約に対応する途上にあります。 本バージョンのシェルは、見方によっては Korn shell と同様に 見える機能を多数持っていますが、 Korn shell のクローンではありません(もし Korn shell クローンを望むなら、 Gnu の bash を使いましょう)。 このシェルには、POSIX で規定された仕様といくつかの Berkeley 拡張のみが 取り入れられています。 本マニュアルは、shell のチュートリアルでは ありませんし、仕様を完全に記述するものでもありません。 .Ss 概要 シェルは、ファイルまたは端末から 1 行ずつ読み込み、それを解釈し、 コマンドを実行します。シェルはユーザがシステムにログインしたときに起動 されるプログラムです(ただし、ユーザは chsh(1) コマンドによって他のシェルを選択することもできます)。 シェルは、制御構文を持つ言語であり、 データ記憶をはじめとして多様な機能を提供するマクロ機能、 ヒストリ、行編集機能も内蔵しています。 このシェルは対話的に使うときに便利な機能を多くとり入れており、 対話的に用いるときも非対話的に (シェルスクリプトとして) 用いるときも、 共通のインタプリタ言語を用いることができる利点があります。 すなわち、コマンド名をシェルに直接タイプする ことも、コマンド名をファイルに書いておいてそのファイルをシェルに 実行させることもできます。 .Ss 起動 引数が与えられず、かつシェルの標準入力が端末の場合 (または -i フラグが指定 された場合)、シェルは対話的に動作します。対話的シェルは、通常、コマンド 入力時にプロンプトを表示し、文法的なエラーとコマンドエラーを 異なった方法で処理します (後述します)。 起動時に、シェルは 0 番目の引数を検査します。もしそれが ダッシュ `-' で始まっているなら、シェルはログインシェルとして 動作します。ユーザがシステムにログインした場合は自動的にこの状況に なります。ログインシェルは、まず (以下の各ファイルが存在する場合)、 .Pa /etc/profile と .Pa .profile ファイルからコマンドを読み込みます。 シェル起動時に、もしくはログインシェルで .Pa .profile を実行中に環境変数 .Ev ENV が設定されているなら、シェルは、その次に環境変数 .Ev ENV で示されたファイルからコマンドを読み込みます。 つまり、ユーザはログイン時にのみ実行したいコマンドを .Pa .profile に書き、シェルが起動されるたびに実行したいコマンドを環境変数 .Ev ENV で示すファイルに書くことになります。 環境変数 .Ev ENV を設定するには、ユーザのホームディレクトリ下のファイル .Pa .profile に以下のように記述します。 .sp .Dl ENV=$HOME/.shinit; export ENV .sp ここで、 .Pa .shinit のかわりに好きな名前を指定することができます。 オプション以外にコマンドライン引数が指定された場合、シェルは最初の引数 を、コマンドを読み込むべきファイル (シェルスクリプト) の名前であると解釈し、 それ以後の引数はシェルの位置パラメータ ($1, $2, ...) に設定します。 それ以外の場合、シェルはコマンドを標準入力から読み込みます。 .Pp 古いバージョンの .Nm とは異なり、環境変数 .Ev ENV で指定したスクリプトが実行されるのは、対話的シェルの呼び出し時のみです。 これにより、いい加減に書かれた .Ev ENV スクリプトに起因する、簡単に食いものにされることが多い有名な セキュリティホールがふさがれたことになります。 .Ss 引数リスト処理 .Nm の 1 文字からなるオプションはそれぞれ対応する名前を持っており、 .Xr set 1 組み込みコマンド (後述) の引数として用いることができます。 これらの名前は、以下の説明で 1 文字オプションのすぐあとに書いてあります。 マイナス記号 .Dq - でオプションを指定することは、そのオプションを有効にすることを意味し、 プラス記号 .Dq + でオプションを指定することは、そのオプションを無効にすることを意味します。 .Dq -- または、単なる .Dq - はオプション処理を終了させ、 コマンドラインの残りの語を引数として解釈することを強制します。 .Bl -tag -width Ds .It Fl a Li allexport 値が代入された変数の全てをエクスポートします(未実装です)。 .It Fl b Li notify バックグラウンドジョブ実行の完了を、コマンドが実行中でも即座に報告しま す(未実装です)。 .It Fl C Li noclobber すでに存在するファイルに対して .Dq > リダイレクトにより上書きしません (未実装です)。 .It Fl E Li emacs 組み込みの .Xr emacs 1 風のコマンド行編集機能を有効にします (それ以前に .Fl V オプションが指定された場合、それを無効にします)。 .It Fl e Li errexit 非対話的シェルで、テスト状態にないコマンドの実行に失敗した場合、 直ちにシェルを終了します。 コマンドは、if, elif, while, until 構文を 制御するのに用いられている場合に、テスト状態であるとみなされます。 また、 .Dq && や .Dq || の左辺値として用いられているコマンドも、テスト状態とみなされます。 .It Fl f Li noglob パス名展開を行ないません。 .It Fl I Li ignoreeof 対話的シェルの場合、入力の EOF を無視します。 .It Fl i Li interactive シェルが対話的に動作するように強制します。 .It Fl m Li monitor ジョブ制御を可能にします (対話的シェルの場合は自動的に設定されます)。 .It Fl n Li noexec 非対話的シェルの場合、コマンドを読み込みますが、そのコマンドの実行は しません。シェルスクリプトの文法を検査する場合に便利です。 .It Fl p Li privileged 特権モードを有効にします。 起動時に実効ユーザ ID あるいは実効グループ ID が、実ユーザ ID や実グルー プ ID と一致していなければ、このモードが有効になります。このモードを無 効化すると、実効ユーザ ID および実効グループ ID は、実ユーザ ID および 実グループ ID に設定されます。 対話的シェルでこのモードが有効になっていると、 .Pa /etc/profile の後で .Pa ~/.profile に代わり、 .Pa /etc/suid_profile を読み込みます。一方、環境変数 .Ev ENV の内容は無視されます。 .It Fl s Li stdin コマンドを標準入力から読み込みます (引数でファイル名が指定されていない 場合には、このオプションが自動的に設定されます)。 シェルが実行されてから本オプションを( .Xr set 1 などによって)設定しても効果はありません。 .It Fl u Li nounset 値が設定されていない変数を展開しようとした場合、 標準エラー出力にエラーメッセージを出力し、 さらに非対話的シェルならば、ただちにシェルを終了します (未実装です)。 .It Fl V Li vi 組み込みの .Xr vi 1 風の行編集機能を有効にします (それ以前に .Fl E オプションが指定されていた場合、それは無効になります)。 .It Fl v Li verbose 入力を読み込むごとに標準エラー出力に書き出します。デバッグのときに便利です。 .It Fl x Li xtrace 各コマンドを実行する前に、そのコマンドを標準エラー出力に (各コマンドの 前に `+' を付加して) 書き出します。デバッグのときに便利です。 .It Fl c Ar string 文字列引数 string はシェルに渡され、入力として解釈されます。このオプショ ンは引数として文字列を一つだけ受け取ることに注意して下さい。ですから、複 数の単語からなる文字列は引用符で囲う必要があります。 .El .Ss 構文構造 シェルは、ファイルを行単位で読み込み、空白文字 (ブランクおよびタブ) や シェルにとって特別な意味を持つ特定の文字列 ( .Dq 演算子 と呼ばれるもので す) を区切りとして、複数の単語に分割します。演算子には、制御演算子とリ ダイレクト演算子の 2 種類があります (これらの意味については後述します)。 以下に、それらの一覧を示します。 .Bl -tag -width Ds .It No 制御演算子: & && ( ) ; ;; | || .No \en .It No リダイレクト演算子: < > >| << >> <& >& <<- <> .El .Ss 引用(クォート) 引用は、特殊な意味を持つ文字や単語 (演算子、空白、キーワードなど) の意味 を打ち消すために用います。引用には、シングルクォート文字のペアを使う方法、 ダブルクォート文字のペアを使う方法、バックスラッシュ文字を使う方法 の 3 種類があります。 .Bl -tag -width Ds .It シングルクォート文字 シングルクォートのペアで囲まれた文字は、すべてその文字そのまま(リテラ ル)として扱われます (ただしシングルクォートは別です。シングルクォート で囲った文字列の中にシングルクォートを含めることはできません)。 .It ダブルクォート文字 ダブルクォートのペアで囲まれた文字は、ドル記号文字($)、バッククォート 文字(`)、バックスラッシュ文字(\\) を除き、すべてリテラルとして扱われま す。ダブルクォート文字による引用の中にあるバックスラッシュ文字は、歴史 的経緯によりすこし変わった扱いを受けます。つまり、直後に $, `, ", \\, 改行文字 が来るときにのみ、それらの文字がリテラルとして扱われます。そ れ以外の文字が来る場合、バックスラッシュ文字自体がリテラルとして扱われ ます。 .It バックスラッシュ バックスラッシュは、その後ろの 1 文字を、リテラルとして扱うように指示 します。ただし改行文字は別です。改行文字の直前のバックスラッシュは、行 の継続であるとみなされます。 .El .Ss 予約語 予約語はシェルにとって特別な意味を持つ単語で、行の先頭または制御演算子 の直後でのみ予約語として認識されます。以下に予約語の一覧を挙げます。 .Bd -literal -offset indent ! { } case do done elif else esac fi for if then until while .Ed .Ss エイリアス エイリアスは、名前とそれと対応する値が対になったもので、 組み込みコマンド .Xr alias 1 によって定義されます。 シェルは、予約語が現れる可能性がある場所(上記を参照)で、 ある単語に対して、それが予約語かどうかの検査を済ませたのち、 それがエイリアスに一致するかどうかを検査します。 もし一致したならば、入力行の中で、その単語をエイリアスの値に置き換えます。 たとえば、``lf'' という名前で ``ls -F'' という値を持つエイリアスが 存在したとすると、次の入力行 .Bd -literal -offset indent lf foobar .Ed .Pp は、以下のように置換されます。 .Bd -literal -offset indent ls -F foobar .Ed .Pp エイリアスは、初心者に対し、引数付きの関数を生成する面倒を求めることなく、 短いコマンドをつくり出す便利な方法を提供するものです。 しかし、構文的にあいまいなコードを作り出すことにもつながりかねません。 そのような使い方はお勧めできません。 .Ss コマンド シェルは、読み込んだ単語を、文法に従って解釈します。 本マニュアルでは文法については解説しません。 .St -p1003.2 の BNF 表記を参照してください。要するに、行を1行を読み込み、読み込んだ 行の最初の単語 (制御演算子がある場合は、そのあとの最初の単語) が予約語 でない場合、シェルはその行を単純コマンドとして解釈します。それ以外の場 合、複合コマンドあるいは特殊構造であると解釈します。 .Ss 単純コマンド 単純コマンドを解釈する場合、シェルは以下のような動作をします。 .Bl -enum .It 単語の前にある ``name=value'' の形式の単語を取り除き、 単純コマンドの環境に代入します。 リダイレクト演算子とその引数 (後述) を取り除き、 あとで処理できるように保存します。 .It 残った単語を、「展開」の節で説明する方法で展開します。 展開後の最初の単語をコマンド名とみなし、コマンドの位置を探索します。 残りの単語はコマンドへの引数とみなされます。 処理の結果、コマンド名が残らなかった場合、手順 1) で 取り出した ``name=value'' の変数代入を、現在のシェルの環境に反映します。 .It 次節で説明する方法で、リダイレクトを行ないます。 .El .Ss リダイレクト リダイレクトは、コマンドがどこから入力するか、どこへ出力するかを 変更するときに用います。 一般には、リダイレクトでは、ファイルのオープン、クローズ、または ファイルへの参照の複写 (duplicate) を行います。 リダイレクトで用いられる全般的な形式は、以下のとおりです。 .sp .Dl [n] redir-op file .sp ここで、redir-op は前述したリダイレクト演算子のいずれかです。 これらの演算子をどのように利用するかの例をいくつか以下に挙げます。 .Bl -tag -width "1234567890" -offset indent .It [n]> file 標準出力 (またはファイル記述子 n への出力) をファイル file に書き出します。 .It [n]>| file 上と同様。ただし、-C オプションの効果を打ち消します。 .It [n]>> file 標準出力 (またはファイル記述子 n への出力) をファイル file に追加します。 .It [n]< file 標準入力 (またはファイル記述子 n からの入力) をファイル file から取ります。 .It [n1]<&n2 ファイル記述子 n2 を標準入力 (またはファイル記述子 n1) に複写します。 .It [n]<&- 標準入力 (またはファイル記述子 n) をクローズします。 .It [n1]>&n2 ファイル記述子 n2 を標準出力 (またはファイル記述子 n1) に複写します。 .It [n]>&- 標準出力 (またはファイル記述子 n) をクローズします。 .It [n]<> file 標準入力 (あるいはファイル記述子 n) により、ファイル file を 読み書きするようにします。 .El .Pp 以下のリダイレクトは、しばしば``ヒア・ドキュメント(here-document)''と 呼ばれます。 .Bd -literal -offset indent [n]<< delimiter here-doc-text... delimiter .Ed .Pp シェルは、delimiter までの行を保存し、コマンドへの標準入力またはファイ ル記述子 n にリダイレクトします。最初の行の delimiter が引用 (クォー ト) されていた場合、here-doc-text の内容をリテラルとして扱います。そ うでない場合、パラメータ展開、コマンド置換、数値演算 (「展開」の節で説 明します) を適用します。演算子が (``<<'' でなく) ``<<-'' の場合は、 here-doc-text の各行の行頭のタブを取り除きます。 .Ss コマンド検索と実行 コマンドには、シェル関数、組み込みコマンド、通常プログラムの 3 種類があり、 コマンドを検索する際には、シェルは名前の検索をこの順序で行います。 それぞれのコマンドは異なる方法で実行されます。 .Pp シェル関数を実行するとき、$0 を除くすべての位置パラメータ ($1, $2,..) をシェル関数への引数として設定します。$0 は変更されません。シェル関数 の環境として指定された変数 (関数名の直前に ``name=value'' を置いて指定 されたもの) は、その関数に局所的な変数となり、指定された初期値が設定さ れます。そして、シェルは関数定義で与えられたコマンドを実行します。コマ ンドの実行が完了すると、位置パラメータを元の値に戻します。これは全て現 在のシェルの中で処理されます。 .Pp 組み込みコマンドは、新たなプロセスを作成せずにシェル内部で実行されます。 .Pp コマンドが関数でも組み込みコマンドでもない場合は、通常のプログラムとみなし (次節で説明するとおり) ファイルシステムの中でそのコマンドを検索します。 通常のプログラムを実行する場合、シェルは引数と 環境をプログラムに渡して、そのプログラムを実行します。 プログラムが通常の実行ファイル形式ではない場合 (つまり、 .Tn ASCII 表現で "#!" となる「マジックナンバ」でファイルが始まっておらず、 .Fn execve 2 が .Er ENOEXEC を返す場合)、 -サブシェルの中でそのプログラムを解釈実行します。この場合、あたかも新た -にシェルが起動されたかのような効果を得るために、子シェルは自分自身を再 -初期化します。ただし、子プロセスは、親シェル中のハッシュされたコマンド +サブシェルの中でそのプログラムを解釈実行します。この場合、あたかも新たに +シェルが起動されたかのような効果を得るために、子シェルは自分自身を +再初期化します。ただし、子プロセスは、親シェル中のハッシュされたコマンド 位置情報を憶えており、これは再初期化されません。 .Pp -本ドキュメントの古いバージョンや古いソースコードでは、ときおり、マジッ -クナンバのないシェルスクリプトのことを「シェルプロシージャ」と呼んでい -て、まぎらわしい場合がありますので注意して下さい。 +本ドキュメントの古いバージョンや古いソースコードでは、ときおり、 +マジックナンバのないシェルスクリプトのことを「シェル手続き」と呼んでいて、 +まぎらわしい場合がありますので注意して下さい。 .Ss パス検索 コマンドを検索するとき、シェルは、まず、その名前のシェル関数があるかどうかを 調べます。次に、その名前の組み込みコマンドがあるかどうかを調べます。 組み込みコマンドでもない場合、以下のいずれかの処理が行われます: .Bl -enum .It コマンド名にスラッシュが含まれていれば、検索は行わず、 単にそのコマンドが実行されます。 .It 変数 .Ev PATH に含まれる各エントリに対して、順にそのコマンドを検索します。 変数 .Ev PATH の値はコロン(``:'')で区切られたエントリの列でなければなりません。 各エントリは、それぞれディレクトリ名一つに対応します。 カレントディレクトリは、 空のディレクトリ名を指定することで暗黙的に、 あるいは 1 個のピリオドを指定することで明示的に 指示することができます。 .El .Ss コマンドの実行ステータス 各コマンドは終了ステータスを持ち、それにより他のシェルコマンドの動作に 影響を与えることができます。基本的な考え方として、終了ステータス 0 は 通常の終了または成功を示します。0 以外の終了ステータスは失敗、エラーを 意味します。各コマンドのマニュアルにそれぞれの終了ステータスがどのよう な意味を持つかが記述されているはずです。組み込みコマンドと(実行された) 関数も終了ステータスを返します。 .Pp コマンドがシグナルにより終了(terminate)させられた場合、 終了ステータスは 128 にシグナル番号を加えたものになります。 シグナル番号はヘッダファイル .Aq Pa sys/signal.h に定義されています。 .Ss 複合コマンド(Complex Commands) 複合コマンドは、単純コマンドの組み合わせで作ります。 制御演算子または予約語と組み合わせることで、より大きな複合コマンドを生 成します。一般に、コマンドは以下のうちのいずれかです。 .Bl -item -offset indent .It 単純コマンド .It パイプライン .It リストまたは合成リスト(compound-list) .It 合成コマンド(compound command) .It 関数定義 .El .Pp 特に指定のない場合、コマンドの終了ステータスは最後に実行された 単純コマンドの終了ステータスとなります。 .Ss パイプライン パイプラインは、複数のコマンドを制御演算子 `|' によってつないだものです。 最後のコマンドを除くすべてのコマンドの標準出力は、次のコマンドの標準入力に 接続されます。 最後のコマンドの標準出力は、通常通り、シェルから受け継がれます。 .Pp パイプラインの形式は次のとおりです。 .Bd -literal -offset indent [!] command1 [ | command2 ...] .Ed .Pp command1 の標準出力は command2 の標準入力に接続されます。コマンドの標 -準入出力がパイプラインによって割り当てられるのは、各コマンドに属するリ -ダイレクト演算子で指定されたリダイレクトを処理する前のことだと考えて下 -さい。 +準入出力がパイプラインによって割り当てられるのは、各コマンドに属する +リダイレクト演算子で指定されたリダイレクトを処理する前のことだと考えて +下さい。 .Pp パイプラインがバックグラウンド (後述) でなければ、シェルはすべての コマンドが終了するのを待ちます。 .Pp パイプラインの直前に予約語 `!' が置かれなかった場合、終了ステータスは パイプラインの最後のコマンドの終了ステータスとなります。 `!' が前置された場合、終了ステータスはパイプラインの最後のコマンドの 終了ステータスの論理否定を取った値となります。 すなわち、最後のコマンドが 0 を返した場合、パイプラインの 終了ステータスは 1 に、最後のコマンドが 0 より大きな値を返した場合、 終了ステータスは 0 になります。 .Pp パイプラインによる標準入出力の接続はリダイレクトに先立って行われるため、 パイプラインの接続をリダイレクトによって修正することができます。たとえば、 .Bd -literal -offset indent $ command1 2>&1 | command2 .Ed .Pp は、command1 の標準出力と標準エラー出力の両方を command2 の標準入力に 接続します。 .Pp \&; または改行文字を終端として用いることにより、直前の AND-OR リスト (後述) を 順次実行します。& は、直前の AND-OR リストを非同期に実行します。 .Pp 注: 他のいくつかのシェルと異なり、パイプラインの各プロセスは 起動したシェルの子プロセスとなります (シェルの組み込みコマンドである ときは別です。その場合は現在のシェルで実行されます --- ただし 環境に対して行った操作は取り消されます)。 .Ss バックグラウンドコマンド -- & コマンドが制御演算子 & で終了している場合、シェルはそのコマンドを 非同期に実行します。すなわち、シェルはそのコマンドの終了を待たずに、 次のコマンドの実行を開始します。 .Pp コマンドをバックグラウンドで実行させるための形式は以下のとおりです。 .Bd -literal -offset indent command1 & [command2 & ...] .Ed .Pp シェルが対話的でない場合、非同期コマンドの標準入力には /dev/null が 接続されます。 .Ss リスト -- 一般的な話 リストは 0 個またはそれ以上のコマンドを改行文字、セミコロン文字、アン -パーサント文字 (&) で区切った列です。リストは、これら 3 つの記号のいず -れかで終了させることもできます。リスト中のコマンドは並べられた順に実行 +パーサント文字 (&) で区切った列です。リストは、これら 3 つの記号のいずれかで +終了させることもできます。リスト中のコマンドは並べられた順に実行 されます。もし、コマンドに続けてアンパーサント文字が置かれている場合、 -シェルはそのコマンドを起動したあと、すぐに次のコマンドの処理を開始しま -す。その他の場合、そのコマンドの終了を待ってから次のコマンドの処理を開 -始します。 +シェルはそのコマンドを起動したあと、すぐに次のコマンドの処理を開始します。 +その他の場合、そのコマンドの終了を待ってから次のコマンドの処理を開始します。 .Ss 短絡リスト演算子(Short-Circuit List Operators) ``&&'' と ``||'' は AND-OR リスト演算子です。 ``&&'' は最初のコマンド を実行し、もし最初のコマンドの終了ステータスが 0 ならば次のコマンドを 実行します。 ``||'' も同様ですが、最初のコマンドの終了ステータスが 0 でない場合に、次のコマンドを実行します。 ``&&'' と ``||'' の優先順位は 同じです。 .Ss 制御構造 -- if, while, for, case if コマンドの文法は以下のとおりです。 .Bd -literal -offset indent if list then list [ elif list then list ] ... [ else list ] fi .Ed .Pp while コマンドの文法は以下のとおりです。 .Bd -literal -offset indent while list do list done .Ed .Pp 最初のリストの終了ステータスが 0 であるかぎり、2 つのリストを繰り返し 実行します。until コマンドも同様に実行しますが、 単語 while の代わりに単語 until を使うことと、 最初のリストの終了ステータスが 0 になるまで、 2 つのリストを繰り返し実行することが異なります。 .Pp for コマンドの文法は以下のとおりです。 .Bd -literal -offset indent for variable in word... do list done .Ed .Pp 各 word は展開され、変数 variable に word を順に設定しながらリストを 繰り返し実行します。do と done は ``{'' と ``}'' で置き換えることができます。 .Pp break と continue コマンドの文法は以下のとおりです。 .Bd -literal -offset indent break [ num ] continue [ num ] .Ed .Pp break は内側から num 個の for ループまたは while ループを終了します。 continue は、 num 個目のループの次の繰り返しに制御を移します。 .\" 上の文、原文では以下のようになっているが、the *num* innermost loop が .\" 正しいと思われる。実際の sh の動作もそうなっているようだ。 .\" --- 97/05/31 sakai@jp.freebsd.org ↓ .\" Continue continues with the next iteration of the innermost loop. これらのコマンドは組み込みコマンドとして実装されています。 .Pp case コマンドの文法は以下のとおりです。 .Bd -literal -offset indent case word in pattern) list ;; ... esac .Ed .Pp pattern は、1 つあるいは複数のパターン (後述の「シェルパターン」を参照 のこと) を ``|'' で接続したものです。 .Ss 複数のコマンドのグループ化 -コマンドは、以下のいずれかの方法によりグループ化することができます +コマンドは、以下のいずれかの方法によりグループ化することができます。 .Bd -literal -offset indent (list) .Ed .Pp または、 .Bd -literal -offset indent { list; } .Ed .Pp 最初の形式では、コマンドはサブシェル上で実行されます。 (list) のなかの組み込みコマンドは、現在のシェルには影響を与えません。 2 つめの形式では新たなシェルを fork しないので、やや効率が良くなります。 このようにして複数コマンドをグループ化することで、 あたかも単一プログラムであるかのように、それらの出力をまとめて リダイレクトすることができます。 .Bd -literal -offset indent { echo -n "hello"; echo " world"; } > greeting .Ed .Ss 関数 関数定義の構文は以下のとおりです。 .Bd -literal -offset indent name ( ) command .Ed .Pp 関数定義は実行可能文の一種です。実行されると、名前 name の関数 が定義され、終了ステータスとして 0 を返します。command は 通常、``{'' と ``}'' で囲まれたリストです。 .Pp local コマンドを用いて関数に局所的な変数を宣言することができます。 これは関数定義中の最初の文で行わなければなりません。構文は次のとおりです。 .Bd -literal -offset indent local [ variable | - ] ... .Ed .Pp local コマンドは、組み込みコマンドとして実装されています。 .Pp 変数を局所変数にする場合、関数を呼び出した環境に同じ名前の変数があれば、 -新しい局所変数は値と export、readonly フラグを引き継ぎます。もし同じ名 -前の変数がなければ、局所変数は初期値を持ちません。シェルは動的スコープ -を用います。すなわち、関数 f に局所的な変数 x を作成し、関数 f から関 -数 g を呼び出した場合、関数 g 内部での変数 x に対する操作は大域変数 x +新しい局所変数は値と export、readonly フラグを引き継ぎます。もし同じ名前の +変数がなければ、局所変数は初期値を持ちません。シェルは動的スコープ +を用います。すなわち、関数 f に局所的な変数 x を作成し、関数 f から +関数 g を呼び出した場合、関数 g 内部での変数 x に対する操作は大域変数 x ではなく、関数 f で宣言された変数 x への操作となります。 .Pp 特殊パラメータのうち局所宣言できるのは ``-'' だけです。 ``-'' を 局所宣言すると、関数内で set コマンドを用いてシェルオプションを 変更しても、関数が終了するとそれらのオプションは元の値に戻ります。 .Pp return コマンドの文法は以下のとおりです。 .Bd -literal -offset indent return [ exitstatus ] .Ed .Pp return は現在実行中の関数を終了させます。return は組み込みコマンドとして 実装されています。 .Ss 変数とパラメータ シェルはパラメータの集合を管理しています。名前を持つパラメータを 変数と呼びます。シェルは、起動時にすべての環境変数をシェル変数に取り込みます。 新たな変数は、次の形式によって設定できます。 .Bd -literal -offset indent name=value .Ed .Pp ユーザが設定する変数は、アルファベット、数字、アンダースコア (_) のみ からなる名前を持つ必要があります。また、最初の文字が数字であっては いけません。 パラメータは、以下に示す数字または特殊記号により参照することもできます。 .Ss 位置パラメータ 位置パラメータは、数字 (n > 0) によって参照されるパラメータです。シェルは 位置パラメータの初期値としてシェルスクリプト名に続く引数を設定します。 組み込みコマンド .Xr set 1 により再設定や消去ができます。 .Ss 特殊パラメータ 特殊パラメータは、以下に挙げる特殊文字のいずれかにより参照される パラメータです。各パラメータの値の説明を各文字の後ろに示します。 .Bl -hang .It * 位置パラメータ 1,2,... に展開されます。ダブルクォート文字列内部で展開 される場合、展開結果は各位置パラメータの間を変数 IFS の先頭の文字 (IFS が設定されていない場合は空白文字) で区切った単一の文字列になります。 .It @ 位置パラメータ 1,2,... に展開されます。ダブルクォート引用の内部で展開 される場合、各位置パラメータは別々の引数となります。 もし、位置パラメータが設定されていない場合には、 @ の展開結果は 0 個の引数となります (ダブルクォート引用の内部であっても)。 -すなわち、$1 が ``abc''、$2 が ``def ghi'' であっ -た場合、"$@" は次の 2 つの引数に展開されます。 +すなわち、$1 が ``abc''、$2 が ``def ghi'' であった場合、"$@" は +次の 2 つの引数に展開されます。 .Bd -literal -offset indent "abc" "def ghi" .Ed .It # 位置パラメータの数に展開されます。 .It ? 最後に実行したパイプラインの終了ステータスに展開されます。 .It - (ハイフン) 現在のオプションフラグ (1文字オプション名をつないだ文字列) に展開されます。起動時に指定されたもの、組み込みコマンド set で指定した もの、シェルが暗黙に設定したもののすべてを含みます。 .It $ 起動されたシェルのプロセス ID に展開されます。 サブシェルも親シェルと同じ値を持ちます。 .It ! 現在のシェルが最後にバックグラウンドで実行したコマンドのプロセス ID に 展開されます。パイプラインの場合、パイプラインの最後のコマンドの プロセス ID になります。 .It 0 (ゼロ) シェルの名前またはシェルスクリプト名に展開されます。 .El .Ss 単語展開 本節では、単語に対して適用されるさまざまな展開について説明します。あとで 述べるように、すべての展開がすべての単語に対して適用されるわけではありません。 .Pp 単一の単語に対して適用されたチルダ展開、パラメータ展開、コマンド置換、 数式展開、クォート削除の結果は単一のフィールドになります。単一の単語が 複数のフィールドに分割される可能性があるのは、フィールド分割または パス名展開の場合だけです。この規則の唯一の例外は、ダブルクォート中の パラメータ @ の展開です (前述)。 .Pp 単語展開の順序は以下のとおりです。 .Bl -enum .It チルダ展開、パラメータ展開、コマンド置換、数式展開 (これらはすべて 同時に行われます) .It 変数 IFS の値が空でなければ、(1) の結果の各フィールドに対して フィールド分割が行われる .It パス名展開 (-f オプションが無効の場合) .It クォート削除 .El .Pp 文字 $ はパラメータ展開、コマンド置換、数式評価を行うきっかけになります。 .Ss チルダ展開 (ユーザのホームディレクトリ名への置換) 引用されていないチルダ文字 (~) で始まる単語は、チルダ展開の対象になります。 チルダ文字からスラッシュ文字または単語の終端までのすべての文字がユーザ名 とみなされ、そのユーザのホームディレクトリに置換されます。もしユーザ名が 省略された場合(たとえば ~/foobar)、チルダ文字は変数 HOME の値(現在のユーザ のホームディレクトリ)に置換されます。 .Ss パラメータ展開 パラメータ展開の形式は以下のとおりです。 .Bd -literal -offset indent ${expression} .Ed .Pp ここで、expression は対応した `}' までのすべての文字です。対応する`}' を調べる際に、バックスラッシュ文字によりエスケープされたり、クォート文字に 狭まれた `}' や、数式展開に埋め込まれている文字や、コマンド置換や変数展開中に ある文字は調べる対象になりません。 .Pp パラメータ展開の形式のうちもっとも単純なものは以下のとおりです。 .Bd -literal -offset indent ${parameter} .Ed .Pp そのパラメータに値が存在する場合、その値に置き換えられます。 .Pp パラメータ名やシンボルを中括弧({})で囲んでも構いません。この中括弧は、 数字 2 文字以上からなる位置パラメータの場合や、パラメータ名の直後に パラメータ名の一部であるとみなし得る文字が続く場合を除き、 省略可能です。ダブルクォート引用中のパラメータ展開は以下 のようになります。 .Bl -enum .It パラメータ展開を行った結果の単語に対しては、パス名展開は適用されません。 .It パラメータが @ の場合を除き、フィールド分割は適用されません。 .El .Pp さらに、以下の形式を用いることにより、パラメータ展開の結果に修正を加える ことができます。 .Bl -tag -width Ds .It Li ${parameter:-word} デフォルト値への置換: パラメータ parameter が設定されていないか空の値 を持つ場合、word を展開した結果に置換されます。さもなければ、パラメー タ parameter の値に置換されます。 .It Li ${parameter:=word} デフォルト値の代入: パラメータ parameter が設定されていないか空の値を持つ場合、word を展開 した結果が parameter に代入されます。最終的にパラメータ parameter の値 に置換されます。位置パラメータや特殊パラメータは、この方法で代入すること はできません。 .It Li ${parameter:?[word]} 空か設定されていないときにエラーとする: パラメータ parameter が設定されていないか空の値を持つ場合、word を展開 した結果 (word が省略された場合にはパラメータが設定されていないことを表す デフォルトのメッセージ) が標準エラー出力に書き出され、 シェルは非 0 の終了ステータスで終了します。 それ以外の場合、パラメータ parameter の値に置換されます。対話的シェルの場合は 必ずしも終了しません。 .It Li ${parameter:+word} 代替値の使用: パラメータ parameter が設定されていないか空の値を持つ場合、空の値に 置換されます。さもなければ、word を展開した結果に置換されます。 .Pp 以上のパラメータ展開において、`:' を用いた場合はパラメータが設定されていない かまたは空の値であることが検査され、`:' を省略するとパラメータが 設定されていないことのみを検査します。 .It Li ${#parameter} 文字列の長さ: パラメータの値の(文字列としての)長さに置換されます。 .Pp 以下の 4 通りのパラメータ展開は部分文字列切り出し処理を行います。各場合 において、パターンは正規表現ではなく、パターンマッチ記法 (シェルパターン の項を参照) が用いられます。パラメータが` * 'または` @ 'の場合、展開の結果 がどうなるかは規定しません (unspecified)。 パラメータ展開全体をダブルクォートで囲んでも パターンは引用されません。中括弧のなかで引用することにより パターンを引用することができます。 .It Li ${parameter%word} 最短後置パターンの削除: まず word が展開され、その結果をパターンとして扱います。 パラメータ parameter の右から、パターンに一致する最短の部分を削除した文字列に 置換されます。 .It Li ${parameter%%word} 最長後置パターンの削除: まず word が展開され、その結果をパターンとして扱います。 パラメータ parameter の右から、パターンに一致する最長の部分を削除した文字列に 置換されます。 .It Li ${parameter#word} 最短前置パターンの削除: まず word が展開され、その結果をパターンとして扱います。 パラメータ parameter の左から、パターンに一致する最短の部分を削除した文字列に 置換されます。 .It Li ${parameter##word} 最長前置パターンの削除: まず word が展開され、その結果をパターンとして扱います。 パラメータ parameter の左から、パターンに一致する最長の部分を削除した文字列に 置換されます。 .El .Ss コマンド置換 コマンド置換により、コマンド名自身をコマンドの出力で置き換えることができます。 コマンド置換は、以下のように、コマンド command を囲った場合、 .Bd -literal -offset indent $(command) .Ed .Pp または(``バッククォート'' バージョン)、 .Bd -literal -offset indent `command` .Ed .Pp とした場合に行なわれます。 シェルは、コマンド command をサブシェルの環境で実行し、command が標準出力 に出力したものから最後の改行文字を削除した結果で置換します (最後以外の 改行は削除しません。ただし、フィールド分割の際に、IFS の値や引用のされかたに よっては、ここで残った改行文字が結局は空白に置換されることもあります)。 .Ss 数式展開 数式展開とは、数式を評価し、その値に置換する仕組みです。数式展開の形式は以下 のとおりです。 .Bd -literal -offset indent $((expression)) .Ed .Pp 数式 expression は、その中のダブルクォート文字が特別扱いを受けないという 点を除いては、ダブルクォート文字で囲まれている文字列と同様に扱われます。 シェルは expression 中のすべてのトークンにパラメータ展開、コマンド置換、 クォート削除を適用します。 .Pp 次にシェルはその結果を数式として扱い、その値に置換します。 .Ss 空白文字による分割 (フィールド分割) パラメータ展開、コマンド置換、数式展開のあと、シェルは展開結果を調べて、 ダブルクォートの外にある部分に対してフィールド分割を適用します。 その結果、複数のフィールドになる場合もあります。 .Pp シェルは、変数 IFS に設定されている文字それぞれ区切り文字とみなし、 パラメータ展開の結果、およびコマンド置換の結果をフィールドに分割します。 .Ss パス名展開 (ファイル名生成) -f フラグが設定されていなければ、フィールド分割が行われたあと、ファイル名生成 が行われます。各単語は、スラッシュで区切られたパターンの列であるとみなさ れます。パス名展開処理において、単語は、条件を満たすファイル すべてのファイル名の列で置換されます。この各ファイル名は、単語の 各パターン部分を、そのパターンに一致する文字列に置換することで 生成されるものです。 これには 2 つの制限があります: まず、パターンはスラッシュを含む文字列には 一致しません。次に、パターンは、そのパターンがピリオドで始まらないかぎり、 ピリオドで始まる文字列に一致しません。 次節では、パス名展開と .Xr case 1 コマンドで用いられるパターンについて説明します。 .Ss シェルパターン パターンは、通常の文字とメタキャラクタからなります。通常の文字は、 その文字そのものに一致します。 メタキャラクタは ``!''、 ``*''、 ``?''、 ``['' です。これらの文字を引用 すると、各々の特殊な意味を失います。コマンド置換や変数置換において、 ドル記号やバッククォート文字がダブルクォート文字の中にない場合には、 変数の値やコマンドの出力の中に、これらの特殊な文字が存在するかどうかが 調べられ、それらがあれば、メタキャラクタとして扱われます。 .Pp アスタリスク文字 (``*'') は、どのような文字列とも一致します。 クエスチョンマーク文字 (``?'') は、任意の文字 1 文字と一致します。 左大括弧 (``['') は文字クラスを開始します。 文字クラスの最後は右大括弧 (``]'') です。``]'' がない場合 は、``['' は文字そのものに一致し、文字クラスの開始とは見なされません。文字 クラスは大括弧内に出現するすべての文字に一致します。 マイナス記号を用いれば、文字の範囲を指定することができます。 文字クラスの最初にエクスクラメーションマーク (``!'') を置くことで、 文字クラスの意味を反転させることができます。 .Pp 文字クラスに文字 ``]'' を含めるには、 ``]'' を文字クラスの最初 (``!'' を 置く場合はそのあと) に置きます。 文字クラスにマイナス記号を含めるときも同様で、 リストの最初もしくは最後に置きます。 .Ss 組み込みコマンド 本節では、別プロセスでは実行できない処理を行なうために組み込まれている コマンドを列挙します。 さらに、効率を上げるために組み込まれているかもしれないコマンド (例えば .Xr printf 1 , .Xr echo 1 , .Xr test 1 , 等) もあわせて列挙します。 .Bl -tag -width Ds .It : 終了ステータス 0 (真) を返すヌルコマンドです。 .It \&. file 指定されたファイル file に記述されたコマンドがシェルに読み込まれ、 実行されます。 .Ar file に .Ql / 文字を含む場合、その通りに扱われます。 そうでなければ、シェルは .Ev PATH を使用して、ファイルを検索します。 .Ev PATH を使用しても見付からない場合、カレントディレクトリを検索します。 .It alias [ name[=string] ... ] name=string が指定されている場合、シェルは名前 ``name'' を持つ値 ``value'' のエイリアスを定義します。単に ``name'' だけが指定された場合、 エイリアス ``name'' の値が表示されます。引数が指定されない場合、定義さ れているすべてのエイリアスの名前と値を表示します (unalias も参照)。 .It bg [ job ] ... 指定されたジョブ (指定されなかった場合は現在のジョブ) を、 続けてバックグラウンドで実行させます。 .It command command arg ... 指定された組み込みコマンドを実行します (組み込みコマンドと同じ名前のシェル関数 がある場合に使います)。 .It cd [ directory ] 指定されたディレクトリに移動します (directory 無指定時は $HOME に移動します)。 cd コマンドの 環境に CDPATH 変数があるか、シェル変数 CDPATH が設定されていて、かつ 指定されたディレクトリ directory がスラッシュ文字から始まっていないなら、 CDPATH に列挙されたディレクトリ以下に 指定されたディレクトリ directory がないか検索されます。 CDPATH の形式は PATH と同様です。対話的シェルでは、ユーザ が指定したディレクトリと異なる場所に移動した場合、移動先のディレクトリ名 を表示します。これは、CDPATH の機構が動作した場合と、シンボリックリンクを 辿った場合に発生します。 .It eval string ... 指定されたすべての引数を空白で結合し、その結果を解析し直してから コマンドとして実行します。 .It exec [ command arg ... ] コマンドが省略されない場合、そのシェルプロセスは指定されたプログラムに 置き換えられます (command は、シェル組み込みコマンドや関数ではない、本物の プログラムでなければなりません)。exec コマンドにおけるリダイレクトは、 永久性を持つと見なされ、 exec コマンド完了後にも引き続き効力を持ちます。 .It exit [ exitstatus ] シェルを終了します。指定された exitstatus は、シェルの終了ステータスに なります。exitstatus が省略された場合、直前に実行したコマンドの 終了ステータスがシェルの終了ステータスとなります。 .It export name ... それ以後にシェルから実行されるコマンドの環境に、指定された名前の変数が 含まれるようにします (変数のエクスポート)。 変数のエクスポートを取り消す唯一の方法は、変数を unset することです。 以下のように記述することで、エクスポートすると 同時に変数の値を設定することができます。 .Bd -literal -offset indent export name=value .Ed .Pp 引数を指定しない場合、すべてのエクスポートされている名前と値が表示されます。 .It fc [-e editor] [first [last]] .It fc -l [-nr] [first [last]] .It fc -s [old=new] [first] fc は、対話的シェルにそれ以前に入力されたコマンドの内容を 表示、編集、再実行します。 .Bl -tag -width Ds .It -e editor 編集に際し、指定されたエディタ editor を使用します。 editor は変数 PATH を通して検索できるコマンド名です。 -e が指定されなかった場合は、変数 FCEDIT の値が 用いられます。FCEDIT が設定されていないか空に設定されている場合は EDITOR の値が用いられ、それも設定されていないか空ならば .Xr ed 1 が用いられます。 .It -l (ell) (小文字のエル) エディタを起動せずに、コマンド履歴の内容を一覧出力します。 パラメータ first と last で指定した範囲のコマンドが順に (出力の順番は -r オプションの影響を受けます)出力されます。 各コマンドの出力の際にはコマンド番号が付加されます。 .It -n -l で一覧出力する際にコマンド番号を付加しません。 .It -r -l オプションでの一覧や、 編集時 (-l も -s も指定されなかった場合) の順序を反転します。 .It -s エディタを起動せずにコマンドを再実行します。 .It first .It last 一覧出力や編集の対象となるコマンドを選択します。アクセス可能なコマンド の数は変数 HISTSIZE の値で決まります。 first、last の値は以下のいずれかの形式で指定します。 .It [+]number 正の数で、コマンド番号を指定します。コマンド番号は -l オプションで表示させて 調べることができます。 .It -number 負の数で、指定された数だけ現在から遡ったコマンドを指定します。たとえば、 -1 は直前に実行されたコマンドを指定します。 .It string 文字列 string は、過去に実行されたコマンドのうち、 その文字列から始まる最新のものを指定します。 もし -s オプションが指定されて ``old=new'' が指定されていなければ、 最初のオペランドにイコール記号(``='')を含めることはできません。 .El .\" 次の行の .Pp はもともとコメントアウトされていた .Pp fc コマンドの実行にあたり、以下の環境変数の影響を受けます。 .Bl -tag -width Ds .It Va FCEDIT 使用するエディタ名 .It Va HISTSIZE アクセス可能なコマンド数 .El .It fg [ job ] 指定されたジョブまたは現在のジョブをフォアグラウンドに移動します。 .It getopts optstring var POSIX に準拠した getopts コマンドです。 この getopts コマンドにより、以前の getopt コマンドの必要性は減少しました。 最初の引数は文字の列です。各文字の後ろにはコロンをつけることができ、 そのオプションが引数をとることを指示します。 指定された変数に、解析され見つかったオプションが設定されます。 見つかったオプションの次の引数のインデックスはシェル変数 OPTIND に格納されます。 あるオプションが引数をとる場合、その引数はシェル変数 OPTARG に置かれます。 有効でないオプションに出くわすと、変数 var には `?' がセットされます。 getopts はオプション群の末尾に到達すると偽の値 (1) を返します。 .It hash -rv command ... シェルは、コマンドの位置を保持するハッシュテーブルを維持管理しています。 hash コマンドに引数が指定されなかった場合、このテーブルの内容が出力されます。 最後に cd コマンドが実行されてから参照されていない項目には アスタリスク文字 (``*'') が表示されます。 この項目は無効になっているかもしれません。 .Pp 引数を指定した場合、hash コマンドは指定したコマンドをハッシュテーブル から削除し (command が関数ではない場合)、その後でそのコマンドを検索します。 --v オプションを指定した場合、発見したコマンドの位置を表示します。-r オ -プションを指定した場合、関数以外のすべてのエントリをハッシュテーブルから +-v オプションを指定した場合、発見したコマンドの位置を表示します。-r オプション +を指定した場合、関数以外のすべてのエントリをハッシュテーブルから 削除します。 .It jobid [ job ] ジョブ job 中の各プロセスのプロセス ID を表示します。引数 job が 省略された場合、現在のジョブに対して処理を行います。 .It jobs バックグラウンドで走行中の、現在のシェルプロセスの子プロセスの 一覧を出力します。 .It pwd カレントディレクトリを表示します。組み込みコマンドの pwd は カレントディレクトリ名を覚えており、表示するときに再計算しないので、 組み込みコマンドの pwd は同名のプログラムとは異なった表示をする場合があります。 このため処理は高速ですが、カレントディレクトリ の名前を変更した場合でも、以前のディレクトリ名を表示し続けます。 .It Li "read [ -p prompt ] [ -e ] variable ... -p オプションが指定され、かつ標準入力が端末の場合、 prompt をプロンプトとして表示します。 そして標準入力から 1 行入力します。行端の改行文字を削除し、行を前述の 単語分割の方法に従って分割し、各単語を、valiable... で指定する各変数に 順に代入します。 もし、指定された変数の数より分割された単語の数が多ければ、最後の変数に 残りの単語すべて (IFS の文字を区切りにしてそれらも一緒に) が代入されます。 分割された単語の数より多くの変数が指定されていたなら、 余った変数には空文字列が設定されます。 .Pp -t オプションが指定され、かつ入力がなされる前にタイムアウトすると、 read コマンドは値を割当てずに戻ります。 タイムアウト値の後にはオプションで 's', 'm', 'h' のいずれかの一文字 を付けることが出来、それぞれ秒, 分, 時間を陽に指定します。 どれも指定しない場合には 's' であるものとします。 .Pp -e オプションを指定すると、入力中のバックスラッシュ文字を特別扱いします。 バックスラッシュ文字が改行文字の直前にある場合、 バックスラッシュ文字と改行文字は削除されます。 その他の文字の直前にバックスラッシュがある場合、バックスラッシュは削除され、 文字が IFS に含まれていても、IFS の文字でないかのように扱われます。 .It readonly name ... 指定された名前の変数を読み出し専用とし、あとで値を変更したり unset した りすることができないようにします。以下のように記述することで、 変数を読み出し専用と宣言するのと同時に値を設定することも可能です。 .Bd -literal -offset indent readonly name=value .Ed .Pp 引数が指定されない場合、読み出し専用になっている変数の名前の一覧が表示され ます。 .It Li "set [ { -options | +options | -- } ] arg ... set コマンドは 3 通りの異なった機能を持ちます。 .Bl -item .It 引数を指定しなかった場合、すべてのシェル変数の名前と値の一覧を表示します。 .It options が指定された場合、「引数リスト処理」の節で説明した方法で、 指定されたオプションフラグを設定あるいは解除します。 .It 第 3 の用法は、シェルの位置パラメータを変更する際に使用します。オプションの 設定を変更せずに位置パラメータのみを変更したい場合は set コマンドへの最初 の引数として ``--'' を指定します。arg が指定されない場合、 すべての位置パラメータはクリアされます (``shift $#'' を実行することと 等価です)。 .El .Pp .It setvar variable value 変数に値を代入します。(一般に、setvar を使うよりも variable=value と書くほう が望ましいといえます。setvar は、関数内で、パラメータとして渡された名前を持つ 変数に値を代入するためのものです。) .It shift [ n ] 位置パラメータを n 回シフトします。1 回のシフトにより、$2 の値が $1 に、$3 の 値が $2 に代入されます (以下同様)。また、$# の値は 1 減少します。 位置パラメータがない場合、shift は何もしません。 .It trap [ action ] signal ... シェルが指定されたシグナル signal を受けとったときに、action を解析し実行する ように設定します。シグナルはシグナル番号で指定します。action は空文字列に したり、省略したりすることができます。空文字列の場合、指定されたシグナルは 無視され、省略した場合は、指定したシグナルを受けとったときデフォルトの処理を 行ないます。シェルがサブシェルを起動するとき、trap で指定された (かつ 無視するように設定されていない) シグナルの動作をデフォルトの処理に戻します。 シェルが起動したときにすでに無視されるように設定されていたシグナルに対して trap コマンドを使用しても効果はありません。 .It type [name] ... 各 name をコマンドとして解釈し、コマンド検索の結果を出力します。出力さ れる結果は以下のものがあります。シェルのキーワード、エイリアス、シェル の組み込みコマンド、コマンド、痕跡つきエイリアス(tracked alias)、最後に not found (見つからず)があります。エイリアスについては、エイリアス展開 -の結果が出力されます。コマンドと痕跡つきエイリアスについては、そのコマ -ンドの完全なパス名が印刷されます。 +の結果が出力されます。コマンドと痕跡つきエイリアスについては、そのコマンドの +完全なパス名が印刷されます。 .It ulimit [ -HSacdflmnust ] [ limit ] リソースのリミット値 (リミット値については .Xr getrlimit 2 参照) を設定あるいは表示します。 ``limit'' が指定されている場合、指定されたリソースが設定されます。 それ以外の場合、現在のリソース設定値が表示されます。 .Pp ``-H'' が指定された場合、ハードリミットが設定ないし表示されます。 ハードリミット値を下げることは誰にでもできますが、 それを増やすことができるのはスーパユーザだけです。 オプション ``-S'' を指定した場合はソフトリミットになります。 リミット値を表示する場合、``-S'' か ``-H'' のいずれか一方だけしか 指定できません。 デフォルトでは、表示はソフトリミット、設定はハード/ソフトリミット両方です。 .Pp オプション ``-a'' を指定すると全リソースの設定値が表示されます。 この場合、パラメータ ``limit'' は指定できません。 .Pp この他のオプションは、表示あるいは設定するリソースの種類を指定するものです。 これらは互いに排他的です。 .Bl -tag -width Ds .It -c coredumpsize コアダンプファイルの最大サイズ。512 バイトのブロック単位。 .It -d datasize プロセスのデータセグメントの最大サイズ。キロバイト単位。 .It -f filesize ファイルの最大サイズ。512 バイトブロック単位。これがデフォルトです。 .It -l lockedmem プロセスがロックできるメモリサイズの最大値。キロバイト単位。 .It -m memoryuse プロセスの常駐セットサイズの最大値。キロバイト単位。 .It -n nofiles あるプロセスがオープンできるファイル記述子の最大数。 .It -s stacksize スタックセグメントサイズの最大値。キロバイト単位。 .It -t time 各プロセスで消費できる CPU 時間の最大値。秒単位。 .It -u userproc このユーザ ID で同時に走らせうる最大プロセス数。 .El .It umask [ mask ] umask の値 ( .Xr umask 2 を参照) を、指定された 8 進数の値に設定します。引数が 省略された場合、現在の umask の値が表示されます。 .It unalias [-a] [name] ``name'' が指定された場合、指定された名前のエイリアスを削除します。 ``-a'' オプションが指定された場合、すべてのエイリアスを削除します。 .It unset name ... 指定された変数または関数を unset し、エクスポートされていない状態にします。 指定された名前の変数も関数も存在する場合、変数と関数の両方が unset されます。 .It wait [ job ] 指定されたジョブ job が終了するのを待ち、ジョブ内の最後のプロセスの 終了ステータスを返します。引数が省略された場合、すべてのジョブが終了する まで待ち、終了ステータス 0 を返します。 .El .Ss コマンド行編集 .Nm が端末から対話的に実行されている場合、現在入力中のコマンドおよび コマンド履歴 (組み込みコマンド fc 参照) を vi モードのコマンド行編集機能 により編集することができます。 このモードでは、vi のマニュアルに示されているコマンドのサブセットを用います。 コマンド `set -o vi' により vi モードが開始され、vi の挿入モードに移行します。 vi モード中では、 挿入モードとコマンドモードの両方を自由に切り替えることが可能です。 vi モードは vi と同様であり、 キー によりコマンドモードに移行し、コマンドモードで キーを叩くことで、 行の内容がシェルに渡されます。 .Pp 同様に、コマンド `set -o emacs' により emacs 風のコマンド行編集機能の サブセットを使うことができるようになります。 .Sh 関連項目 .Xr expr 1 , .Xr test 1 .Sh 歴史 .Nm コマンドは、 .At V.1 で登場しました。 .\" -Amended by N.Kumagai 97.12.30 diff --git a/ja_JP.eucJP/man/man1/tcpdump.1 b/ja_JP.eucJP/man/man1/tcpdump.1 index db95b907cd..e1fb776339 100644 --- a/ja_JP.eucJP/man/man1/tcpdump.1 +++ b/ja_JP.eucJP/man/man1/tcpdump.1 @@ -1,1283 +1,1283 @@ .\" @(#) %Header: tcpdump.1,v 1.67 97/06/30 16:31:50 leres Exp % (LBL) .\" .\" Copyright (c) 1987, 1988, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1997 .\" The Regents of the University of California. All rights reserved. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that: (1) source code distributions .\" retain the above copyright notice and this paragraph in its entirety, (2) .\" distributions including binary code include the above copyright notice and .\" this paragraph in its entirety in the documentation or other materials .\" provided with the distribution, and (3) all advertising materials mentioning .\" features or use of this software display the following acknowledgement: .\" ``This product includes software developed by the University of California, .\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of .\" the University nor the names of its contributors may be used to endorse .\" or promote products derived from this software without specific prior .\" written permission. .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. .\" .\" jpman %Id: tcpdump.1,v 1.3 1997/05/23 22:18:59 yugawa Stab % .TH TCPDUMP 1 "30 June 1997" .SH 名称 tcpdump \- ネットワーク上のトラフィックデータをダンプします .SH 書式 .na .B tcpdump [ .B \-adeflnNOpqStvx ] [ .B \-c .I count ] [ .B \-F .I file ] .br .ti +8 [ .B \-i .I interface ] [ .B \-r .I file ] [ .B \-s .I snaplen ] .br .ti +8 [ .B \-T .I type ] [ .B \-w .I file ] [ .I expression ] .br .ad .SH 解説 .LP \fItcpdump\fP は、オプションで指定されたネットワークインタフェース上で 取得可能なパケットのヘッダのうち \fIexpression\fP にマッチするものを出力 します。 .LP .B SunOS 上の nit ないし bpf の場合: .I tcpdump を実行するには、 .I /dev/nit ないし .IR /dev/bpf* への読み込みアクセス権が必要です。 .B Solaris 上の dlpi の場合: .IR /dev/le 等のネットワーク仮想デバイスへの読み込みアクセス権が必要です。 .B HP-UX 上の dlpi の場合: root か root に setuid されてインストールされている場合のみ実行可能です。 .B IRIX 上の snoop の場合: root か root に setuid されてインストールされている場合のみ実行可能です。 .B Linux の場合: root か root に setuid されてインストールされている場合のみ実行可能です。 .B Ultrix および Digital UNIX の場合: スーパユーザが、 .IR pfconfig (8) を用いて promiscuous-mode での操作を許可していれば、どのユーザも .BR tcpdump を起動できます。 .B BSD の場合: .IR /dev/bpf* への読み込みアクセス権が必要です。 .SH オプション .TP .B \-a ネットワークアドレスとブロードキャストアドレスを名前に変換しようとします。 .TP .B \-c \fIcount\fP で指定した数のパケットを受信した後に終了します。 .TP .B \-d 解釈されたパケットマッチングコードを読みやすい形に整形した後、 標準出力にダンプして停止します。 .TP .B \-dd .B C プログラムの断片の形でパケットマッチングコードをダンプします。 .TP .B \-ddd (先頭に個数を付加した)十進数の形でパケットマッチングコードをダンプします。 .TP .B \-e 各ダンプ行ごとに、リンクレベルのヘッダを出力します。 .TP .B \-f 外部ホストの IP アドレスについては、シンボルでなく数値で表示します。 (本オプションは、Sun の yp サーバに重大な障害が発生するのを回避するこ とを意図してます。\(em 通常は、Sun の yp サーバは、ローカルに存在しない IP アドレスを永久に変換しつづけてハングします。) .TP .B \-F フィルタの表現として、\fIfile\fP に記述してある内容を用います。 コマンドラインで指定された追加表現は、無視されます。 .TP .B \-i \fIinterface\fP で指定されたインタフェースを監視します。 指定されない場合には、\fItcpdump\fP はシステムインタフェースリストの中で 最も小さい番号の稼働中のものを検索し、監視するインタフェースとして設定 します(ループバックインタフェースは検索しません)。 この動作は、最初にインタフェースが選択された時点で終了します。 .TP .B \-l 標準出力を行バッファリングにします。データを捕捉しつつ、 そのデータを見たい場合には、本オプションは有効です。例えば .br ``tcpdump\ \ \-l\ \ |\ \ tee dat'' や ``tcpdump\ \ \-l \ \ > dat\ \ &\ \ tail\ \ \-f\ \ dat'' のように使用します。 .TP .B \-n アドレス(IP アドレスやポート番号など)を名前に変換しません。 .TP .B \-N ホスト名のうち、ドメイン名の表示をしません。例えば、本オプションを 指定すると、``nic.ddn.mil'' とは表示されず、かわりに ``nic'' とだけ表示し ます。 .TP .B \-O パケットマッチングコードのオプティマイザを動かしません。本オプションは、 オプティマイザ中のバグを疑う場合にのみ有効なものです。 .TP .B \-p ネットワークインタフェースを、promiscuous mode に設定しません。 ネットワークインタフェースは、何らかの理由により promiscuous mode に設定 されることもあり得るということに注意してください。ゆえに `-p' オプションは、`ether host {local-hw-addr} or ether broadcast' の短縮形として使うことは出来ません。 .TP .B \-q 素早い(静かな?)出力を行ないます。出力する行を短くするために、通常出力 されるプロトコル情報の一部は出力されません。 .TP .B \-r パケットを、\fIfile\fR で指定したファイル (-w オプションで作成されます)か ら読み込みます。\fIfile\fR として``-''が指定された場合は標準入力が用いら れます。 .TP .B \-s デフォルトの 68 バイト(SunOS の NIT では最小値は実際には 96)ではなくて、 \fIsnaplen\fP だけのデータを各パケットから取得します。68 バイトという データ長は、IP, ICMP, TCP, UDP のパケットを取得する分には十分ですが、 ネームサーバや NFS のパケットについてはプロトコル情報が切り詰められるこ とがあります(これについては、以後の説明を参照して下さい)。 スナップショットが限られた量しかとれずに切り 詰められたパケットは、出力に ``[|\fIproto\fP]'' という文字列がいっしょ に表示されます。 \fIproto\fP は、切り詰めが行われたプロトコルレベルの名 前です。大きなスナップショットをとる場合には、それだけパケット処理の時 間がかかるということと、パケットバッファリング用のバッファの量が減ると いうことに注意してください。これにより、パケットが消失するかもしれませ ん。\fIsnaplen\fP の大きさを、必要なプロトコル情報を取得できる最小の値に とどめるようにしてください。 .TP .B \-T "\fIexpression\fP" により選択されたパケットを強制的に \fItype\fR で 指定されたタイプと解釈します。有効なタイプは、 \fBrpc\fR (リモートプロシージャコール) \fBrtp\fR (リアルタイムアプリケーションプロトコル) \fBrtcp\fR (リアルタイムアプリケーション制御プロトコル) \fBvat\fR (ビジュアルオーディオツール) \fBwb\fR (ディストリビューテッドホワイトボード) です。 .TP .B \-S TCP シーケンス番号を相対番号ではなく、絶対番号で出力します。 .TP .B \-t 各ダンプ行のタイムスタンプを出力しません。 .TP .B \-tt 各行毎にタイムスタンプを人間が読みやすい形に変換せずに出力します。 .TP .B \-v (少しではありますが)出力情報を増やします。例えば、IP パケット中の TTL や、サービス情報の型を出力します。 .TP .B \-vv さらに多くの情報を出力します。例えば、NFS の返答パケットの追加 フィールドを出力します。 .TP .B \-w 受信した生パケットを、解析したり画面に出力したりせずに \fIfile\fR で指定 したファイルに出力します。本オプションを用いて取得したパケットは \-r オプションを用いることで情報を見ることができます。\fIfile\fR で指定す るファイル名が ``-'' の場合には、標準出力を用います。 .TP .B \-x リンクレベルヘッダを除いた各パケットの内容を 16 進出力します。 パケットサイズが .I snaplen バイトより小さい場合にはパケットの全部の内容を、それ以外の場合には、 .I snaplen バイト分のデータをパケットごとに出力します。 .IP "\fI expression\fP" .RS ダンプするパケットを選択します。\fIexpression\ が指定されない場合には、 ネットワーク上のすべてのパケットがダンプ対象になります。それ以外の場 合には、\fIexpression\fP の条件が真になるパケットのみダンプします。 .LP \fIexpression\fP は、1 つ以上の .I プリミティブ から成り立ちます。 プリミティブは通常 1 つ以上の限定子のついた .I id (名前もしくは番号)から成り立ちます。限定子は、3 種類あります。 .IP \fI型\fP 限定子は id 名や番号が参照するものの種類を指します。型には .BR host 、 .B net 、 .B port があります。例えば、`host foo', `net 128.3', `port 20' のように用います。 型限定子が指定されない場合には、 .B host が指定されたものとみなされます。 .IP \fI方向\fP 限定子は、 パケットが .I id へ出ていく方向か、 .I id から来る方向か、 もしくはその両方かという、特定の転送方向を指定します。 指定可能な方向は、 .BR src、 .BR dst、 .B "src or dst"、 .BR "src and dst" の 4 つです。 例えば、`src foo'、 `dst net 128.3'、 `src or dst port ftp-data' のように 指定します。もし方向限定子が指定されない場合には、 .B "src or dst" が指定されたものとみなします。 `null' リンクレイヤ (つまり、slip などポイント・トゥ・ポイント・プロトコル) では、 必要な方向を指定するのに .B inbound や .B outbound 限定子を用いる事ができます。 .IP \fIプロトコル\fP 限定子は、特定のプロトコルに一致するパケットのみに制限します。 プロトコルとして指定可能なものは、 .BR ether, .BR fddi, .BR ip, .BR arp, .BR rarp, .BR decnet, .BR lat, .BR sca, .BR moprc, .BR mopdl, .BR iso, .BR esis, .BR isis, .B tcp, .BR udp です。 例えば `ether src foo'、 `arp net 128.3'、 `tcp port 21' のように使用 します。もしプロトコル限定子が指定されない場合には、上記のプロトコルの うち、型に矛盾しないすべてのものが指定されたものとみなします。 例えば `src foo' は、`(ip or arp or rarp) src foo' (これが正しい形式でな い事を除いて)と、`net bar' は `(ip or arp or rarp) net bar' と同義であ り、また `port 53' は `(tcp or udp) port 53' と同義です。 .LP [`fddi' は実際には `ether' の別名になっています。解析ではこれらを``特定の ネットワークインタフェースで使われるデータリンクレベル''を意味するもの として同様に扱います。FDDI ヘッダはイーサネットに似た送信元と宛先 アドレスを含み、そしてしばしばイーサネットに似たパケット型を含むので、 イーサネットのフィールドと同じように FDDI のフィールドをフィルタリング できます。FDDI ヘッダは他のフィールドも含みますが、フィルタ表現の中で 明示的にそれらを指定することはできません。] .LP 上記に追加して、いくつかの特別な`プリミティブ'キーワードがあります。 これらのキーワードは .BR gateway, .BR broadcast, .BR less, .B greater, と算術演算表現 です。これらの後ろにパターンが続く事はありません。 プリミティブキーワードについては後述します。 .LP より複雑なフィルタの表現は、プリミティブの結合に .BR and, .B or, .B not を用いることで実現されます。例えば、 `host foo and not port ftp and not port ftp-data' です。 タイプ量を少なくするために、同一の限定子リストは、省略することが可能です。 例えば、`tcp dst port ftp or ftp-data or domain' は、 `tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain' と同じ意味です。 .LP 許されるプリミティブは、以下の通りです。 .IP "\fBdst host \fIhost\fR" IP パケットの宛先フィールドが \fIhost\fP で指定したものの場合に真となります。 \fIhost\fP は、ホスト名もしくは IP アドレスです。 .IP "\fBsrc host \fIhost\fR" IP パケットの送信元フィールドが \fIhost\fP で指定したものの場合に真となります。 .IP "\fBhost \fIhost\fP IP パケットの送信元フィールドもしくは宛先フィールドが \fIhost\fP で指定した ものの場合に真となります。 上記の host プリミティブの表現には、\fBip\fP, \fBarp\fP, \fBrarp\fP を 以下のように付加することが可能です。 .in +.5i .nf \fBip host \fIhost\fR .fi .in -.5i という表記は、 .in +.5i .nf \fBether proto \fI\\ip\fB and host \fIhost\fR .fi .in -.5i と同じ意味です。 \fIhost\fR が複数の IP アドレスを持つホスト名であった場合、それぞれのアドレス について照合を検査します。 .IP "\fBether dst \fIehost\fP イーサネットパケットの宛先アドレスが \fIehost\fP だった場合に真となります。 \fIehost\fP は、/etc/ethers に記述された名前もしくはイーサネットアドレスの値が用いられます (イーサネットアドレスの形式については、 .IR ethers (3N) を参照)。 .IP "\fBether src \fIehost\fP イーサネットパケットの送信元アドレスが \fIehost\fP だった場合に真となります。 .IP "\fBether host \fIehost\fP イーサネットパケットの送信元アドレスもしくは宛先アドレスが \fIehost\fP だった 場合に真となります。 .IP "\fBgateway\fP \fIhost\fP パケットが \fIhost\fP で指定したアドレスのマシンをゲートウェイとしている場合に 真となります。言い替えると、送信元もしくは宛先のイーサネットアドレスが \fIhost\fP であり、送信元と宛先のどちらの IP アドレスも \fIhost\fP でない ということです。 \fIhost\fP は /etc/hosts ファイルと /etc/ethers の両方で定義されている名前を 指定する必要があります(等価な表現は、 .in +.5i .nf \fBether host \fIehost \fBand not host \fIhost\fR .fi .in -.5i です。この場合 \fIhost / ehost\fP のどちらにも名前もしくは値を用いることが 可能になります。) .IP "\fBdst net \fInet\fR" パケットの宛先 IP アドレスが、\fInet\fP で指定されたネットワークに属するもので ある場合に真となります。\fInet\fP は、アドレス値もしくは /etc/networks で 定義されたネットワーク名のいずれかを指定可能です(詳しくは、\fInetworks(4)\fP を参照)。 .IP "\fBsrc net \fInet\fR" パケットの送信元 IP アドレスが、\fInet\fP で指定されたネットワークに属するもので ある場合に真となります。 .IP "\fBnet \fInet\fR" 送信元 IP アドレスもしくは宛先 IP アドレスが \fInet\fP で指定された ネットワークに属するものである場合に真となります。 .IP "\fBnet \fInet\fR \fBmask \fImask\fR" IP アドレスが、指定された \fInet\fR および netmask の値で決まる ネットワークに属するものである場合に真となります。 \fBsrc\fR や \fBdst\fR を指定する事も可能です。 .IP "\fBnet \fInet\fR/\fIlen\fR" IP アドレスが、指定された \fInet\fR および \fIlen\fR のビット長のネットマスクで 決まるネットワークに属するものである場合に真となります。 \fBsrc\fR や \fBdst\fR を指定する事も可能です。 .IP "\fBdst port \fIport\fR" パケットが ip/tcp (TCP パケット)もしくは ip/udp(UDP パケット)であり、宛先 ポート番号が \fIport\fP の場合に真となります。 \fIport\fP で指定されるポート番号は、値もしくは /etc/services で定義 されているサービス名で指定可能です( .IR tcp (4P) や .IR udp (4P) を参照)。 ポート番号がサービス名にて指定された場合、ポート番号とプロトコルの両方がチェック 対象になります。ポート番号や、あいまいなサービス名が指定された場合には、 ポート番号のみがチェック対象となります(例えば、\fBdst port 513\fR は、 tcp/login と udp/who の両方を出力し、\fBport domain\fR は、tcp/domain と udp/domain の両方を出力します)。 .IP "\fBsrc port \fIport\fR" パケットが \fIport\fP で指定した送信元ポート番号を保持している場合に 真となります。 .IP "\fBport \fIport\fR" パケットの送信元ポート番号もしくは宛先ポート番号が \fIport\fP の場合に真と なります。上記のポート番号の指定については、すべてキーワード \fBtcp\fP もし くは \fBudp\fP を用いて、ある程度候補を絞り込むことが可能です。例えば、 .in +.5i .nf \fBtcp src port \fIport\fR .fi .in -.5i と指定した場合には、tcp パケットのみが条件一致の評価対象となります。 .IP "\fBless \fIlength\fR" パケットが \fIlength\fP で指定した長さ以下の場合、真となります。 これは、 .in +.5i .nf \fBlen <= \fIlength\fR .fi .in -.5i の指定と等価です。 .IP "\fBgreater \fIlength\fR" パケットが \fIlength\fP で指定した長さ以上の場合、真となります。 これは、 .in +.5i .nf \fBlen >= \fIlength\fR .fi .in -.5i と等価です。 .IP "\fBip proto \fIprotocol\fR" パケットが \fIprotocol\fP で指定したプロトコル型の IP パケット( 詳細は .IR ip (4P) を参照)の場合に真となります。 \fIprotocol\fP は、数字もしくは \fIicmp\fP, \fIigrp\fP, \fIudp\fP, \fInd\fP, \fItcp\fP のいずれかの名前が指定可能です。\fItcp\fP, \fIudp\fP, \fIicmp\fP の 各識別子はキーワードでもであり、バックスラッシュ(\\)(C-shell では \\\\)を用 いてエスケープしなければならないことに注意してください。 .IP "\fBether broadcast\fR" パケットがイーサネットブロードキャストパケットの場合に真となります。\fIether\fP キーワードは、省略可能です。 .IP "\fBip broadcast\fR" パケットが IP ブロードキャストパケットの場合に真となります。オール 1 と オール 0 の二つの形式のブロードキャストアドレスを検査し、そして ローカルサブネットマスクを調べます。 .IP "\fBether multicast\fR" パケットがイーサネットマルチキャストパケットの場合に真となります。\fIether\fP キーワードは、省略可能です。 なお、この指定は、`\fBether[0] & 1 != 0\fP' の短縮系です。 .IP "\fBip multicast\fR" パケットが IP マルチキャストパケットの場合に真となります。 .IP "\fBether proto \fIprotocol\fR" パケットが \fIprotocol\fR で指定した ether 型の場合に真になります。 \fIprotocol\fP は、数字もしくは \fIip\fP, \fIarp\fP, \fIrarp\fP のような 名前を指定可能です。 これらの識別子はキーワードでもあり、バックスラッシュ(\\)でエスケープし なければならないことに注意してください。 [FDDI の場合(例えば `\fBfddi protocol arp\fR')、プロトコルの識別は IEEE802.2 の論理リンク制御(LLC)ヘッダによって行われます。通常これは FDDI ヘッダの上の層にあります。\fItcpdump\fP は、プロトコル識別子で フィルタリングするときは、すべての FDDI パケットは LLC ヘッダを含み、 かつその LLC ヘッダがいわゆる SNAP 形式であると仮定します。] .IP "\fBdecnet src \fIhost\fR" DECNET パケットの送信元アドレスが .IR host の場合に真となります。これは ``10.123'' という形式のアドレスでも DECNET の ホスト名でも構いません。[DECNET のホスト名は DECNET を動かすように設定され た Ultrix システムのみでサポートされます。] .IP "\fBdecnet dst \fIhost\fR" DECNET パケットの宛先アドレスが .IR host の場合に真となります。 .IP "\fBdecnet host \fIhost\fR" DECNET パケットの送信元あるいは宛先アドレスが .IR host の場合に真となります。 .IP "\fBip\fR, \fBarp\fR, \fBrarp\fR, \fBdecnet\fR, \fBiso\fR" .in +.5i .nf \fBether proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 .IP "\fBlat\fR, \fBmoprc\fR, \fBmopdl\fR" .in +.5i .nf \fBether proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 \fItcpdump\fP は今のところこれらのプロトコルを解釈できない事に注意して ください。 .IP "\fBtcp\fR, \fBudp\fR, \fBicmp\fR" .in +.5i .nf \fBip proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 .IP "\fBesis\fR, \fBisis\fR" .in +.5i .nf \fBiso proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 \fItcpdump\fR はこれらのプロトコルを完全には解釈できない事に注意して ください。 .IP "\fIexpr relop expr\fR" \fIrelop\fRは、>, <, >=, <=, =, != のいずれかであり、\fIexpr\fR の部分に は、(標準 C 言語の構文で表現された)整数定数や通常の二項演算子 [+, -, *, /, &, |]、length 演算子、そして特殊なパケットデータへのアクセス演算子などか らなる算術表現が入って、その関係が成立する場合に真となります。 パケット内部のデータにアクセスするためには、以下の構文を用います。 .in +.5i .nf \fIproto\fB [ \fIexpr\fB : \fIsize\fB ]\fR .fi .in -.5i \fIproto\fRは、\fBether, fddi, ip, arp, rarp, tcp, udp, \fR, または \fBicmp\fR のいずれかであり、インデックス操作を行うプロトコル層を指示 します。 指示したプロトコル層からの相対バイトオフセットは、\fIexpr\fR で指定します。 \fIsize\fR は省略可能で、取得するフィールドのデータ長を表します。 データ長としては、1,2,4 のいずれかを指定することが可能であり、デフォルトでは 1 が指定されたものとみなされます。 キーワード \fBlen\fP で示されるデータ長演算子は、パケット長を与えます。 例えば、`\fBether[0] & 1 != 0\fP' は、全てのマルチキャストパケットを捕捉します。 `\fBip[0] & 0xf != 5\fP' という表現は、すべてのオプション付きIPパケットを捕捉す ることを意味します。`\fBip[6:2] & 0x1fff = 0\fP' という表現は、フラグメントのな いデータグラムパケット、もしくはフラグメント化されたデータグラムのうち 最初のフラグメントを捕捉します。 この検査は、\fBtcp\fP および \fBudp\fP のインデックス操作においては、暗黙のうち に適用されます。 例えば、\fBtcp[0]\fP は常に TCP ヘッダの先頭バイトを指し、 決して各フラグメントの先頭バイトを指すものではありません。 .LP プリミティブは、以下のように組み合わせることが可能です。 .IP 括弧で括られた一連のプリミティブや演算子 (括弧はシェルの特殊文字なのでエスケープする必要があります)。 .IP 否定 (`\fB!\fP' or `\fBnot\fP'). .IP 論理積 (`\fB&&\fP' or `\fBand\fP'). .IP 論理和 (`\fB||\fP' or `\fBor\fP'). .LP 否定は、最も高い演算優先度を持ちます。論理和と論理積は、同じ演算優先度を持ち、 左から右へ評価されます。論理積の場合には、単に識別子を並べるのではなく、 明示的に \fBand\fR を使用しなければならないことに注意して下さい。 .LP キーワードなしで識別子が与えられている場合には、最も最近用いられたキーワードが 付加されているものと仮定されます。 例えば、 .in +.5i .nf \fBnot host vs and ace\fR .fi .in -.5i は、 .in +.5i .nf \fBnot host vs and host ace\fR .fi .in -.5i の短縮形ですが、 .in +.5i .nf \fBnot ( host vs or ace )\fR .fi .in -.5i と混同してしまいがちなので気をつけましょう。 .LP 引数 expression は、単一の引数としても複数の引数としても、どちらか便利な 方で、tcpdump に渡すことができます。 一般的に、引数がシェルのメタキャラクタを含む場合、その引数をクォート された単一の引数としてプログラムに渡す方が容易です。 複数の引数は、解析される前にスペースで連結されます。 .SH 使用例 .LP \fIsundown\fP に到達する、もしくはそこから送信されるパケットのすべてを 表示する場合には、以下のように実行します。 .RS .nf \fBtcpdump host sundown\fP .fi .RE .LP \fIhelios\fR と、\fIhot\fR もしくは \fIace\fR の間のトラフィックを表示する 場合には、以下のように実行します。 .RS .nf \fBtcpdump host helios and \\( hot or ace \\)\fP .fi .RE .LP \fIace\fR と、\fIhelios\fR 以外のホストとの間でやりとりされるすべての IP パケットを表示する場合には、以下のように実行します。 .RS .nf \fBtcpdump ip host ace and not helios\fP .fi .RE .LP ローカルなホストと Berkeley のホストとの間でやりとりされるすべての トラフィックを表示する場合には、以下のように実行します。 .RS .nf .B tcpdump net ucb-ether .fi .RE .LP インターネットゲートウェイ \fIsnup\fP を通過するすべての ftp トラフィックを表示する場合には、以下のように実行します (シェルが括弧を誤って解釈しないよう、フィルタを表現する引数がクォートさ れていることに注意して下さい)。 .RS .nf .B tcpdump 'gateway snup and (port ftp or ftp-data)' .fi .RE .LP 送信元アドレスと宛先アドレスの両方がローカルネットワーク内のホスト のものでないトラフィックについて表示する場合には、以下のように実行しま す (実行するホストが他のネットワークに対するゲートウェイの場合、そのホスト が属すローカルネットワークでは、このコマンドは成功しないでしょう)。 .RS .nf .B tcpdump ip and not net \fIlocalnet\fP .fi .RE .LP ローカルネットワーク外のホストとの通信において、TCP による各通信単位 のスタートパケットとエンドパケット(SYN と FIN パケット)を表示するには、以 下のように実行します。 .RS .nf .B tcpdump 'tcp[13] & 3 != 0 and not src and dst net \fIlocalnet\fP' .fi .RE .LP ゲートウェイ \fIsnup\fP を中継される IP パケットのうち、576 バイトより大きいもの を表示するには、以下のように実行します。 .RS .nf .B tcpdump 'gateway snup and ip[2:2] > 576' .fi .RE .LP イーサネット上でブロードキャストもしくはマルチキャストを経由して送られる もの以外の IP ブロードキャストもしくはマルチキャストパケットを表示するには、 以下のように実行します。 .RS .nf .B tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224' .fi .RE .LP echo 要求/応答以外(つまり ping パケット以外)の全ての ICMP パケットを 表示するには、以下のように実行します。 .RS .nf .B tcpdump 'icmp[0] != 8 and icmp[0] != 0' .fi .RE .SH 出力形式 .LP \fItcpdump\fP の出力は、プロトコル依存です。以下の説明では、簡単な パラメータの記述と、おおよそのフォーマットの説明を行ないます。 .de HD .sp 1.5 .B .. .HD リンクレベルヘッダ .LP もし '-e' オプションが指定されると、リンクレベルヘッダが出力されます。 イーサネットにおいては、送信元と宛先のアドレス、プロトコル、そして パケット長が出力されます。 .LP FDDI ネットワークにおいては、'-e' オプションが指定されると \fItcpdump\fP は、`フレーム制御'フィールド、発信元と宛先アドレス、そしてパケット長を 出力します。`フレーム制御'フィールドはパケットの残りの部分の解釈を決定 します。(IP データグラムを含むような)通常のパケットは `async' パケットで、 0 から 7 の間の優先順位を持ちます。例えば、`\fBasync4\fR' です。こうした パケットは IEEE802.2 の論理リンク制御 (LLC) パケットを含むと仮定されます。 LLC ヘッダは、それが ISO データグラムでない場合やいわゆる SNAP パケットのと きには出力されます。 .LP \fI(注意:以下の記述は、利用者が RFC1144 に記述されている SLIP 圧縮ア ルゴリズムについての知識がある前提で書いてます。)\fP .LP SLIP によるリンクにおいては、方向指示子(``I'' が入力方向、``O'' が出力方向)、パケット型、そして圧縮情報が出力されます。 パケット型は、最初に出力されます。パケット型には \fIip\fP、\fIutcp\fP、そして \fIctcp\fP の 3 つがあります。 \fIip\fR 型パケットの場合、上記以上のリンク情報は表示されません。 TCP パケットの場合には、コネクション識別子がパケット型に続いて出力されます。 パケットが圧縮されている場合、符号化されたヘッダが出力されます。 特殊な場合は \fB*S+\fIn\fR や \fB*SA+\fIn\fR のように出力されます。ここ で \fIn\fR は、シーケンス番号(もしくはシーケンス番号および ack)が変更された回 数です。特殊な場合でなければ、0 回以上の変更について出力されます。 変更は、U (緊急(urgent)ポインタ)、W(ウィンドウ)、A(ack)、S(シーケンス番号)、 そして I(パケット ID)で示され、変動量(+n or -n)もしくは新しい値(=n)が続きます。 最後に、パケット内のデータの総量および圧縮ヘッダ長が出力されます。 .LP 例えば、以下の行は、出力方向の圧縮 TCP パケットを、暗黙のコネクション識別子 とともに表示しています。ack は 6 変わり、シーケンス番号は 49 変わり、パケット ID は 6 変わってます。3 バイトのデータと6 バイトの圧縮ヘッダが存在します。 .RS .nf \fBO ctcp * A+6 S+49 I+6 3 (6)\fP .fi .RE .HD ARP/RARP パケット .LP arp/rarp パケットの出力は、要求型とその引数を示してい ます。出力形式は、その出力のみで理解可能なように作られています。 以下に、ホスト \fIrtsg\fP からホスト \fIcsam\fP への `rlogin' 開始時の パケットの実例を示します。 .RS .nf .sp .5 \f(CWarp who-has csam tell rtsg arp reply csam is-at CSAM\fP .sp .5 .fi .RE 1行目は、ホスト rtsg が、ホスト csam のイーサネットアドレスを問い合わせる 目的で arp パケットを送信していることを意味します。ホスト csam は、自分自身 のイーサネットアドレスを返答しています(この例では、イーサネットアドレス は大文字で、インターネットアドレス部は小文字で表記してます)。 .LP \fBtcpdump \-n\fP として起動した場合には、少し冗長になります。 .RS .nf .sp .5 \f(CWarp who-has 128.3.254.6 tell 128.3.254.68 arp reply 128.3.254.6 is-at 02:07:01:00:01:c4\fP .fi .RE .LP \fBtcpdump \-e\fP として起動した場合には、最初のパケットはブロードキャスト パケットであり、次のパケットはポイントツーポイントのパケットであることが わかります。 .RS .nf .sp .5 \f(CWRTSG Broadcast 0806 64: arp who-has csam tell rtsg CSAM RTSG 0806 64: arp reply csam is-at CSAM\fP .sp .5 .fi .RE 最初のパケットについては、送信元のイーサネットアドレスは RTSG であり、 宛先はイーサネットブロードキャストアドレス、型フィールドには 16 進数の値 0806(ETHER_ARP を意味します)が格納されており、総パケット長は 64 バイトである と表示してます。 .HD TCP パケット .LP \fI(注意:以下の記述は、RFC793 に記述されている TCP プロトコルについての知識 があることを前提に記述されてます。この知識がない場合、本記述と tcpdump の いずれもあなたには役に立たないでしょう。)\fP .LP TCP プロトコル行の一般的な形式は、以下の通りです。 .RS .nf .sp .5 \fIsrc > dst: flags data-seqno ack window urgent options\fP .sp .5 .fi .RE \fIsrc\fP と \fIdst\fP は、それぞれ送信元と宛先の IP アドレスと ポート番号です。\fIflags\fP の部分には、S (SYN),F (FIN), P (PUSH) ,R (RST) の組み合わせ、もしくは単なる `.' (フラグなし)が入ります。 \fIdata-seqno\fP は、このパケット内のデータがシーケンス空間のどの部分に あたるかを示します(以下の例を参照して下さい)。 \fIack\fP は、本コネクション上を逆方向に次に流れるデータパケットの シーケンス番号です。 \fIwindow\fP は、本コネクションの逆方向のパケットを格納するバッファサイズ です。 \fIurg\fP は、パケット中に `urgent'(緊急)データが格納されていることを示しま す。 \fIoptions\fP は、例えば のように、アングルブラケット(大小記号)で くくられた tcp オプションです。 .LP \fIsrc、dst\fP、そして \fIflags\fP は、常に表示されます。他のフィールドは、 パケットの TCP ヘッダに依存し、表示できる場合だけ表示されます。 .LP 以下の例は、ホスト \fIrtsg\fP からホスト \fIcsam\fP への rlogin 開設時のシーケンスの一部です。 .RS .nf .sp .5 \s-2\f(CWrtsg.1023 > csam.login: S 768512:768512(0) win 4096 csam.login > rtsg.1023: S 947648:947648(0) ack 768513 win 4096 rtsg.1023 > csam.login: . ack 1 win 4096 rtsg.1023 > csam.login: P 1:2(1) ack 1 win 4096 csam.login > rtsg.1023: . ack 2 win 4096 rtsg.1023 > csam.login: P 2:21(19) ack 1 win 4096 csam.login > rtsg.1023: P 1:2(1) ack 21 win 4077 csam.login > rtsg.1023: P 2:3(1) ack 21 win 4077 urg 1 csam.login > rtsg.1023: P 3:4(1) ack 21 win 4077 urg 1\fP\s+2 .sp .5 .fi .RE 最初の行は、ホスト rtsg の TCP ポート 1023 番からホスト csam の \fIlogin\fP ポートに対してパケットを送信していることを意味します。\fBS\fP は、 パケットの \fISYN\fP フラグが設定されていることを意味します。 パケットのシーケンス番号は 768512 番であり、データは含みません。 (表記は `first:last(nbytes)' であり、これは`シーケンス番号 \fIfirst\fP か ら \fIlast\fP までの \fIlast\fP を含まない \fInbytes\fP のユーザデータという こと'を意味しています。) このパケット中に ack はなく、有効な受信ウィンドウの大きさは 4096 バイトで あり、1024 バイトの最大セグメントサイズ要求を行なうオプションが付加され ています。 .LP csam は、rtsg から送られたパケットと類似したパケットを送り返しますが、 rtsg の送った SYN に対する ack が含まれるところが異なり ます。続いて、rtsg は csam の SYN に対する ack を返します。 `.' は、S (SYN),F (FIN), P (PUSH) ,R (RST) のいずれのフラグも 立っていないことを意味します。 パケットはデータを含まないため、データシーケンス番号は入りません。 ack シーケンス番号が小さい整数 (1) であることに注意して下さい。 \fBtcpdump\fP は、初めて TCP の`通信'を検出すると、パケットから取得した シーケンス番号を表示します。通信のその後のパケットについては、現在の パケットシーケンス番号と、この最初のシーケンス番号の間の差を表示します。 このことは、最初に取得した以降のシーケンス番号は、通信データストリーム の相対位置として解釈できることを意味します(最初の各方向のデータバイト は 1 です)。`-S' は、本機能を無効にし、元のシーケンス番号を表示します。 .LP 6 行目では、rtsg は csam に 19 バイトのデータを送信しています (rtsg \(-> csam の 方向の通信における、2 バイト目から 20 バイト目までのデータ)。PUSH フラグが このパケットでは設定されています。 7 行目では、csam は rtsg から 20 バイトまでのデータを受けとった旨の レスポンスを rtsg に返してます。csam の受信ウィンドウが19バイト小さくなっ たことから、これらのデータのほとんどは、ソケットバッファの中に存在する ことが分かります。 csam は、rtsg に 1 バイトのデータを送信してます。 8 行めと 9 行めでは、csam は緊急 (urgent) で PUSH フラグの設定された 2 バイトデータを送信しています。 .LP スナップショットが小さ過ぎて \fBtcpdump\fP が TCP ヘッダ全体を捕えなかった場合、 可能な限りのヘッダを解釈し、``[|\fItcp\fP]'' を表示して 残りを解釈できなかったことを示します。 (短か過ぎるまたはヘッダを越えてしまうといった) 不正なオプションを ヘッダが持つ場合には、tcpdump は ``[\fIbad opt\fP]'' を表示して 残りのオプションを解釈しません (どこから開始したら良いのか分からないからです)。 ヘッダ長によりオプションが存在することが分かるが、 IP データグラム長がオプションがそこにあるために十分な長さではない場合に、 tcpdump は ``[\fIbad hdr length\fP]'' を表示します。 -HD +.HD .B UDP パケット .LP UDP フォーマットは、以下の rwho パケットで例示します。 .RS .nf .sp .5 \f(CWactinide.who > broadcast.who: udp 84\fP .sp .5 .fi .RE これは、ホスト \fIactinide\fP の \fIwho\fP ポートが UDP データグラムを インターネットブロードキャストアドレスであるホスト \fIbroadcast\fP の \fIwho\fP ポートに対して送信していることを意味します。本パケットは、 84 バイトのユーザデータを含みます。 .LP いくつかの UDP サービスは(送信元もしくは宛先のポート番号から)種 類の判断が可能で、さらに上位レベルのプロトコル情報が出力されます。 ドメインネームサービス要求 (RFC1034/1035)、そして、Sun RPC 呼びだし (RFC1050) を用いた NFS サービスなどがこの条件に該当します。 .HD UDP ネームサーバ要求 .LP \fI(注意:以下の記述は、RFC1035 に記述されている ドメインサービスプロトコルの知識があることを前提に書かれてます。もしこ れらの知識がない場合には、以下の記述は未知の言語で書かれているかのよう に見えるでしょう。)\fP .LP ネームサーバ要求は、以下のような表示になります。 .RS .nf .sp .5 \fIsrc > dst: id op? flags qtype qclass name (len)\fP .sp .5 \f(CWh2opolo.1538 > helios.domain: 3+ A? ucbvax.berkeley.edu. (37)\fP .sp .5 .fi .RE ホスト \fIh2opolo\fP は、\fIhelios\fP 上のドメインサーバに対して \fIucbvax.berkeley.edu\fP のホスト名に対応するアドレスレコード (qtype=A) を問い合わせてます。 問い合わせの ID は `3' であり、`+' は\fI再帰要求\fPフラグが設定されて いることを意味します。問い合わせの長さは 37 バイトであり、この中に UDP および IP のプロトコルヘッダの長さは含みません。質問操作は普通の操作 (\fIQuery\fP) であり、op フィールドは省略されます。op が他のいずれかであった場合、 その op は `3' と `+' の間に表示されます。 これと同様に、qclass は普通のもの (\fIC_IN\fP) であり、省略されます。 他の qclass が入った場合、`A' の直後に表示されます。 .LP 少数の変則的なパケットは検査され、カギカッコで囲まれた付加 フィールドにその結果が表示されます。query が返答、ネームサーバ もしくはオーソリティセクションを含む場合、 .IR ancount , .IR nscount , もしくは .I arcount が、`[\fIn\fPa]'、 `[\fIn\fPn]' 、もしくは `[\fIn\fPau]' のような形式で 表示されます。\fIn\fP は、それぞれの個数です。 応答ビットのいずれかが設定されている(AA, RA もしくは rcode)場合、 もしくは`0 でなければならない'ビットが 2 バイト目と 3 バイト目に設定されてい る場合には、`[b2&3=\fIx\fP]' が出力されます。\fIx\fP は、ヘッダの 2 バイト 目および 3 バイト目の値を 16 進で表したものです。 .HD UDP ネームサーバ応答 .LP ネームサーバ応答の形式は、以下の通りです。 .RS .nf .sp .5 \fIsrc > dst: id op rcode flags a/n/au type class data (len)\fP .sp .5 \f(CWhelios.domain > h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273) helios.domain > h2opolo.1537: 2 NXDomain* 0/1/0 (97)\fP .sp .5 .fi .RE 最初の例は、\fIh2opolo\fP からの質問 ID 3 の要求に対し、\fIhelios\fP が 3 つのアンサーレコード、3 つのネームサーバレコード、そして 7 つの オーソリティレコードを持っているパケットで返答しているというものです。 最初のアンサーレコードは、タイプ A(アドレス)であり、そのデータは IP アドレス 128.32.137.3 です。UDP と IP のヘッダを除いた総サイズは 273 バイトです。 A レコードのクラス (C_IN) と同様に, op (Query) および応答コード (NoError) は、省略されます。 .LP 2 つめの例は、\fIhelios\fP が質問 ID 2 の要求に対し、存在しない ドメイン (NXDomain) という返答コードとともに、0 個のアンサーレコード、1 つ のネームサーバレコード、そして 0 個のオーソリティレコードを含んだ レスポンスを返しています。`*' は、\fIauthoritative answer\fP ビットが設定され ていることを示します。 アンサーレコードがないため、型、クラス、データは出力されません。 .LP 出力される可能性のある他のフラグキャラクタは、`\-' (再帰利用,RA,が 設定されていない)および `|' (メッセージ切捨て, TC, が設定されてい る)です。 `question' セクションに含まれるエントリがちょうど 1 つでない場合には、 `[\fIn\fPq]' が出力されます。 .LP ネームサーバ要求および応答は、大きくなる傾向にあり、デフォルトの \fIsnaplen\fP の値である 68 バイトの長さは、パケットを捕捉してその内容を 表示するには十分でないかも知れないことに注意して下さい。 もしネームサーバトラフィックの調査を真剣に 行なおうとするならば、\fB\-s\fP オプションを用いて、\fIsnaplen\fP を増やし て下さい。自分の経験上、`\fB\-s 128\fP' で十分使い物になります。 .HD NFS 要求と応答 .LP Sun NFS (Network File System) 要求および応答は、以下のように 表示されます。 .RS .nf .sp .5 \fIsrc.xid > dst.nfs: len op args\fP \fIsrc.nfs > dst.xid: reply stat len op results\fP .sp .5 \f(CW sushi.6709 > wrl.nfs: 112 readlink fh 21,24/10.73165 wrl.nfs > sushi.6709: reply ok 40 readlink "../var" sushi.201b > wrl.nfs: 144 lookup fh 9,74/4096.6878 "xcolors" wrl.nfs > sushi.201b: reply ok 128 lookup fh 9,74/4134.3150 \fP .sp .5 .fi .RE 最初の行では、ホスト \fIsushi\fP が ID\fI6709\fP のトランザクションを \fIwrl\fP に送信します(送信元ホストに続く数字はトランザクション ID であり、送信元ポート番号で\fIない\fPことに注意して下さい)。要求 サイズは、UDP および IP ヘッダのサイズを除いて 112 バイトです。操作は、 ファイルハンドル (\fIfh\fP) 21,24/10.731657119 に対する \fIreadlink\fP (シンボリックリンク読み込み)です。 (この例のように運が良ければ、ファイルハンドルはデバイスのメジャー、 マイナー番号のペアと、それに続く i ノード番号と世代番号と解釈することがで きます。) \fIwrl\fP はリンクの内容とともに `ok' と返答しています。 .LP 3 行めでは、\fIsushi\fP は \fIwrl\fP に対し、ファイルハンドル 9,74/4096.6878 のディレクトリ中の `xcolors' ファイルの検索を要求していま す。出力されたデータは、操作の型に依存することに注意して下さい。本形式 は、NFS のプロトコル仕様とともに読めば、それ自身を見れば分かるよう に意図して作成されています。 .LP \-v (verbose, 冗長) フラグがある場合、追加情報が出力されます。 例えば .RS .nf .sp .5 \f(CW sushi.1372a > wrl.nfs: 148 read fh 21,11/12.195 8192 bytes @ 24576 wrl.nfs > sushi.1372a: reply ok 1472 read REG 100664 ids 417/0 sz 29388 \fP .sp .5 .fi .RE (\-v は IP ヘッダの TTL, ID, そしてフラグメンテーションフィールドも出力し ますが、この例では省略しています。)最初の行では、\fIsushi\fP は \fIwrl\fP に対してファイル 21,11/12.195 のオフセット 24576 バイト目か ら 8192 バイトを読むように要求しています。\fIwrl\fP は `ok' と返答してい ます。2 行めに示したパケットは応答の最初のフラグメントなので、1472 バイトしかありません(その他のデータは継続するフラグメント中に続きます が、これらのフラグメントは NFS ヘッダも UDP ヘッダさえも持たないので、使わ れるフィルタリングの表現によっては出力されないでしょう)。\-v フラグがあ るのでいくつかのファイル属性(ファイルデータに追加されて返されてくる)が 出力されます。それらはファイルの型(普通のファイルなら``REG'')、(8 進数 表現の)ファイルモード、uid と gid、そしてファイルの大きさです。 .LP \-v フラグが 2 回以上指定されると、さらに詳しい情報が出力されます。 .LP NFS 要求は非常に大きなデータになるため、\fIsnaplen\fP を大きくし ないと詳しい出力は得られません。NFS トラフィックを監視するには、 `\fB\-s 192\fP' と指定してみて下さい。 .LP NFS 応答パケットは RPC 操作であることを明示的には示しません。その代わ り、\fItcpdump\fP は``最近の''要求を追跡して、トランザクション ID を用い て応答と照合します。応答が対応する要求のすぐ後に続かないと、解 析することはできません。 .HD KIP Appletalk (DDP in UDP) .LP UDP データグラムでカプセル化された Appletalk DDP パケットは、カプセル化 を解かれ、DDP パケットとしてダンプされます(全ての UDP ヘッダ情報は破棄 されます)。 ファイル .I /etc/atalk.names が、Appletalk ネットワークおよびノード番号を名前に変換するのに用い られます。 本ファイルの内容は、以下のように記述されます。 .RS .nf .sp .5 \fInumber name\fP \f(CW1.254 ether 16.1 icsd-net 1.254.110 ace\fP .sp .5 .fi .RE 最初の 2 行は、Appletalk ネットワーク名を決めています。3 行めは、 特定のホストの名前を決めています(ホストは、3 オクテット目の有無で ネットワークと区別されます。ネットワーク番号は、2 オクテットの数字 から、ホスト番号は 3 オクテットの数字から構成される必要があります。) 数字と名前は、空白文字もしくはタブ文字で区切られます。この .I /etc/atalk.names ファイルは、空行もしくは、`#' 文字で始まるコメント行を含んでもかま いません。 .LP Appletalk アドレスは、以下のように表示されます。 .RS .nf .sp .5 \fInet.host.port\fP \f(CW144.1.209.2 > icsd-net.112.220 office.2 > icsd-net.112.220 jssmag.149.235 > icsd-net.2\fP .sp .5 .fi .RE (もし、この .I /etc/atalk.names がないか、このファイルの中にホスト番号及びネットワーク番号のエントリが 存在しない場合には、アドレスは数字で表示されます。) 最初の例は、ネットワーク 144.1 の中のノード 209 の NBP(DDP port 2) が、ネットワーク icsd のノード 112 のホストの ポート 220 を開いている何者かにデータを送信しています。 次の行は、1 行めとほぼ同じ例ですが、送信元のノード名が既知である (`office') ところが異なります。 3 行目の例は、ネットワーク jssmag のノード 149 のポート 235 から、icsd-net の NBP ポートにブロードキャストでデータ送信をしています (ブロードキャストアドレス(255)は、ホスト番号なしでネットワーク番号のみ が表示されているところでわかります。このことから、/etc/atalk.names では ノード名とネットワーク名を区別する方がよいことが分かります)。 .LP NBP (name binding protocol) および ATP (Appletalk transaction protocol) パケットでは、その内容は解釈されます。 他のプロトコルは、プロトコル名(もしくは、プロトコルが登録されていない場 合には、プロトコル番号)およびパケットサイズをダンプします。 \fBNBP パケット\fP は、以下のような形式で表示されます。 .RS .nf .sp .5 \s-2\f(CWicsd-net.112.220 > jssmag.2: nbp-lkup 190: "=:LaserWriter@*" jssmag.209.2 > icsd-net.112.220: nbp-reply 190: "RM1140:LaserWriter@*" 250 techpit.2 > icsd-net.112.220: nbp-reply 190: "techpit:LaserWriter@*" 186\fP\s+2 .sp .5 .fi .RE 最初の行は、レーザライタの名前検索要求であり、ネットワーク icsd のホスト 112 から送られ、ネットワーク jssmag へとブロードキャストされています。 検索のための nbp の ID は 190 です。 次の行は jssmag.209 からの、この要求の応答(同じ ID を持つことに注意して下さ い)で、 ポート 250 に登録された RM1140 という名前のレーザライタがあると答 えています。 3 行めは、同じ要求に対する他のホストからの応答で、 ホスト techpit が、ポート 186 に登録されたレーザライタ "techpit" を持ってい ると答えています。 \fBATP パケット\fP の形式は、以下のように表示されます。 .RS .nf .sp .5 \s-2\f(CWjssmag.209.165 > helios.132: atp-req 12266<0-7> 0xae030001 helios.132 > jssmag.209.165: atp-resp 12266:0 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:1 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:2 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:4 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:6 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp*12266:7 (512) 0xae040000 jssmag.209.165 > helios.132: atp-req 12266<3,5> 0xae030001 helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000 jssmag.209.165 > helios.132: atp-rel 12266<0-7> 0xae030001 jssmag.209.133 > helios.132: atp-req* 12267<0-7> 0xae030002\fP\s+2 .sp .5 .fi .RE jssmag.209 は、ホスト helios に対し最大8個 ('<0-7>') までのパケットを 要求することで、トランザクション ID 12266 を開始します。行の最後の 16 進数は、 要求の中の`ユーザデータ'のフィールドの値です。 .LP helios は、8 つの 512 バイトのパケットで応答しています。トランザクション ID の後につづく`:数'は、パケットシーケンス番号を、括弧中の数値は ATP ヘッダ を除いたパケット中のデータ量を示してます。パケットシーケンス 7 のところ の `*' は、EOM ビットが設定されていることを示してます。 .LP jssmag.209 は、パケットシーケンス番号 3 と 5 のパケットの再送要求をしてます。 helios はそれらを再送し、その後 jssmag.209 はトランザクションを解放します。 最後の行で、jssmag.209 は次の要求を開始します。この要求の表示 で付加されている `*' は、XO(`exactly once') が設定されていないことを示します。 .HD IP フラグメンテーション .LP フラグメントのあるインターネットデータグラムは、以下のように表示されます。 .RS .nf .sp .5 \fB(frag \fIid\fB:\fIsize\fB@\fIoffset\fB+)\fR \fB(frag \fIid\fB:\fIsize\fB@\fIoffset\fB)\fR .sp .5 .fi .RE (最初の形式では、まだフラグメントがあることを示し、2 番めの形式は、 これが最後のフラグメントであることを示してます。) .LP \fIId\fP は、フラグメント ID です。\fIsize\fP は、フラグメントサイズを バイト単位であらわしたものです。ただし IP ヘッダサイズは含みません。 \fIoffset\fP は、元のデータグラムでの本フラグメントのオフセットをバイト 単位であらわしたものです。 .LP フラグメント情報は、各フラグメントごとに表示されます。最初の フラグメントには、上位レベルのプロトコルヘッダが含まれるので、フラグ情 報がプロトコル情報の後に表示されます。2 つ目以降のフラグメントについて は、上位レベルのプロトコルヘッダを含まないので、フラグ情報は送信元およ び宛先アドレスの後ろに表示されます。 例えば、これは arizona.edu から lbl-rtsg.arpa への CSNET 接続での ftp の様子の一部分ですが、どうやら 576 バイト以上ののデータグラムを扱えないよ うです。 .RS .nf .sp .5 \s-2\f(CWarizona.ftp-data > rtsg.1170: . 1024:1332(308) ack 1 win 4096 (frag 595a:328@0+) arizona > rtsg: (frag 595a:204@328) rtsg.1170 > arizona.ftp-data: . ack 1536 win 2560\fP\s+2 .sp .5 .fi .RE 注意すべきことがいくつかあります。まず最初に、2 行目は ポート番号を含みません。これは、TCP プロトコル情報は、最初のフラグメント に全て入っており、後のフラグメントを出力する時にはポート番号やシーケンス 番号を知る術がないからです。 次に、最初の行の TCP シーケンス情報は、パケットが 308 バイトのユーザデータ を持ってるかのように表示されますが、実際には 512 バイトのユーザデータを 持ってます(308 バイトが最初のフラグ分で、204 バイトが 2 番目のフラグ分で す)。シーケンススペースの穴をさがしたり、パケットの ack の対応が正しい かをこのデータで見ようとしてはいけません。 .LP フラグメント不可フラグが設定されたパケットは、最後の部分に \fB(DF)\fP と 印が付けられます。 .HD タイムスタンプ .LP デフォルトでは、すべての出力行は最初にタイムスタンプが出力されます。 タイムスタンプは、以下の形式で、現在のクロックタイムを表示します .RS .nf \fIhh:mm:ss.frac\fP .fi .RE そして、クロックの精度は、カーネルクロックの精度に依存します。 タイムスタンプは、カーネルが最初にパケットを見つけた時間を反映します。 イーサネットインタフェースがケーブルからパケットを取り出してカーネルが `新規パケット'割り込みを受け付けるまでのタイムラグなどは補正されません .SH 関連項目 bpf(4), pcap(3) .SH 作者 Van Jacobson, Craig Leres and Steven McCanne, all of the Lawrence Berkeley National Laboratory, University of California, Berkeley, CA. .LP .RS .I ftp://ftp.ee.lbl.gov/tcpdump.tar.Z .RE .SH バグ バグレポートは、tcpdump@ee.lbl.gov へ送って下さい。 .LP NIT では、外に出ていくトラフィックを観察できません。BPF ならできます。 後者を用いることを推奨します。 .LP IP フラグメントを再構成するか、もしくは少なくとも上位プロトコルの正し いデータサイズを計算するように設計しなおす必要があります。 .LP ネームサーバについての逆引きについては、正しくダンプされません。 実際の要求ではなく、(empty)クエスチョンセクションが、 アンサーセクションに出力されます。 逆引きについてはそれ自体がバグであると信じ、tcpdump ではなく逆引きを要求する プログラムを修正するべきと考える人達もいます。 .LP Apple Ethertalk DDP パケットは、KIP DDP パケットと同様に簡単にダンプ出来 るようにしたいのですが、実際はそうではありません。 もし我々が、Ethertalk の利用を奨めるために何かやろうという気になったとし ても(そうではないのですが)、LBL(Lawrence Berkeley Laboratory) のどの ネットワーク上にも Ethertalk を通すことは許されていませんから、そのコード の試験は出来ません。 .LP 夏時間との変更の時にパケットトレースを行うと、タイムスタンプは変更後の 時刻とはずれてしまいます(時間変化は無視されます)。 .LP FDDI ヘッダを操作するようなフィルタの表現においては、全ての FDDI パケットはカプセル化された Ethernet パケットであると仮定します。 これは、IP, ARP, DECNET フェーズ 4 については正しいですが、ISO の CLNS 等の プロトコルについては正しくありません。したがって、フィルタ表現に正しく マッチしないようなパケットを偶然に受け入れてしまうことがあります。 diff --git a/ja_JP.eucJP/man/man5/stab.5 b/ja_JP.eucJP/man/man5/stab.5 index 55a8ec9c19..c48752db42 100644 --- a/ja_JP.eucJP/man/man5/stab.5 +++ b/ja_JP.eucJP/man/man5/stab.5 @@ -1,225 +1,225 @@ .\" Copyright (c) 1980, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)stab.5 8.1 (Berkeley) 6/5/93 .\" %Id: stab.5,v 1.3 1997/03/07 03:28:08 jmg Exp % .\" jpman %Id: stab.5,v 1.3 1998/07/21 23:07:45 jsakai Stab % .\" WORD: symbol table シンボルテーブル .\" WORD: directive ディレクティブ(命令、指令の類) .\" .Dd June 5, 1993 .Dt STAB 5 .Os BSD 4 .Sh 名称 .Nm stab .Nd シンボルテーブルの型 .Sh 書式 .Fd #include .Sh 解説 .Aq Pa stab.h ファイルは a.out ファイルで使われる、シンボルテーブルのいくつかの .Fa n_type フィールド値の定義します。 これらは、恒久的なシンボル形式であり (つまり、ローカルなラベルなどではない)、古いデバッガである .Em sdb や Berkeley パスカルコンパイラ .Xr pc 1 で使われます。 .\" (訳注) BerkeleyパスカルコンパイラはFreeBSDディストリビューション .\" に含まれない。 .\" 1998/05/05 Takeshi MUTOH シンボルテーブルエントリは .Pa .stabs アセンブラディレクティブによって生成することができます。 ここでは、ダブルクオートで区切られた名前、シンボルの型、シンボルに ついての char 1 つと short 1 つ分の情報、 そして (通常はアドレスを示す) unsigned long の整数を指定できます。 アドレスフィールドに明示的なラベルを生成するのを避けるため、 .Pa .stabd ディレクティブを使い、現在の場所を指すようにすることができます。 もし名前が必要ない場合、 .Pa .stabn ディレクティブを使うことで、シンボルテーブルエントリを生成することができます。 ローダは、 .Pa .stab ディレクティブによって生成されたシンボルテーブルのエントリ順を変えないこと を保証します。 .Xr a.out 5 に記述されているように、シンボルテーブルの要素は以下の構造を持ちます。 .Bd -literal /* * シンボルテーブルエントリの書式 */ struct nlist { union { char *n_name; /* コア内部 (in-core) で使用 */ long n_strx; /* ファイル文字列表へのインデックス */ } n_un; unsigned char n_type; /* 型のフラグ */ char n_other; /* 使用されていない */ short n_desc; /* 以下の struct desc 参照 */ unsigned n_value; /* アドレスまたはオフセットまたは行 */ }; .Ed .Pp .Fa n_type フィールドの下位ビットは、シンボルをたかだか 1 つのセグメントに置くため に使用します。どのセグメントに置くかは .Aq Pa a.out.h 内で定義されている以下のマスクに基づきます。 これらのセグメントビットを設定しないようにすることで、シンボルをどの セグメントにも属さないようにすることができます。 .Bd -literal /* * n_type の単純な値 */ #define N_UNDF 0x0 /* 定義されていない */ #define N_ABS 0x2 /* 絶対指定 */ #define N_TEXT 0x4 /* テキスト */ #define N_DATA 0x6 /* データ */ #define N_BSS 0x8 /* bss */ #define N_EXT 01 /* 外部参照を表すビット(or して使う) */ .Ed .Pp シンボルの .Fa n_value フィールドは、リンカ .Xr ld 1 によって、正しいセグメント内のアドレスに再配置されます。 どのセグメントにも入っていないシンボルの .Fa n_value フィールドは、リンカによって変更されません。 さらに、 .Fa n_type フィールドで、以下のビットのいずれもセットされていない場合は、 リンカは自分が持っている規則にしたがって、 いくつかのシンボルを破棄します。 .Bd -literal /* * その他の永続的なシンボルテーブルエントリでは、N_STAB のいくつかのビットが * セットされています。これらは、 内に記述があります。 */ #define N_STAB 0xe0 /* もしこれらのビットのいずれかがセットされていれば破棄されません */ .Ed .Pp これで、112 (7 \(** 16) 個までのシンボルを、さまざまなセグメントで分けて 定義できるようになります。 これらのいくつかについては既に述べられています。 古いシンボリックデバッガ .Em sdb は、以下の 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 */ #define N_SLINE 0x44 /* ソース行: 0,,0,linenumber,address */ #define N_SSYM 0x60 /* structure elt: name,,0,type,struct_offset */ #define N_SO 0x64 /* ソースファイル名: name,,0,0,address */ #define N_LSYM 0x80 /* ローカルシンボル: name,,0,type,offset */ #define N_SOL 0x84 /* #includeされたファイル名: name,,0,0,address */ #define N_PSYM 0xa0 /* パラメータ: name,,0,type,offset */ #define N_ENTRY 0xa4 /* 別のエントリ: name,linenumber,address */ #define N_LBRAC 0xc0 /* 左かっこ: 0,,0,nesting level,address */ #define N_RBRAC 0xe0 /* 右かっこ: 0,,0,nesting level,address */ #define N_BCOMM 0xe2 /* 共通の開始符号: name,, */ #define N_ECOMM 0xe4 /* 共通の終了符号: name,, */ #define N_ECOML 0xe8 /* (ローカル名の)共通の終了符号: ,,address */ #define N_LENG 0xfe /* 長さ情報を持った2番目の stab エントリ */ .Ed .Pp ここで、コメントには 与えられた .Fa n_type の .Fa n_name , .Fa n_other , .Fa n_desc , .Fa n_value フィールド と .Pa .stab .Fa s の典型的な利用法が書かれています。 .Em sdb は、ポータブル C コンパイラ .Xr cc 1 によって使われる形式の型の指定子を持っている .Fa n_desc フィールドを使います。これらの型の値のフォーマットの詳細はヘッダファイル .Pa pcc.h を参照して下さい。 .Pp Berkeley パスカルコンパイラ .Xr pc 1 は、以下の .Fa n_type 値をつかいます: .Bd -literal #define N_PC 0x30 /* グローバルなパスカルシンボル: name,,0,subtype,line */ .Ed .Pp と、以下のサブ型を使い、別々のコンパイルファイルにまたがる型チェックを 行います。 .Bd -unfilled -offset indent 1 ソースファイル名 2 インクルードされたファイル名 3 グローバルなラベル 4 グローバルな定数 5 グローバルな型 6 グローバルな変数 7 グローバルな関数 8 グローバルな手続き 9 外部関数 10 外部手続き 11 ライブラリ変数 12 ライブラリルーチン .Ed .Sh 関連項目 .Xr as 1 , .Xr ld 1 , .Xr a.out 5 .Sh バグ .Pp もっと基本的な形式が必要でしょう。 .Sh 歴史 .Nm stab ファイルは .Bx 4.0 から登場しました。 diff --git a/ja_JP.eucJP/man/man7/man.7 b/ja_JP.eucJP/man/man7/man.7 index 3af8763a1f..cca8c1221d 100644 --- a/ja_JP.eucJP/man/man7/man.7 +++ b/ja_JP.eucJP/man/man7/man.7 @@ -1,376 +1,381 @@ .\" Copyright (c) 1998. .\" The FreeBSD Project. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %Id: man.7,v 1.1 1998/11/26 00:21:24 jkoshy Exp % .\" jpman %Id: man.7,v 1.3 1999/02/10 13:32:51 horikawa Stab % .\" .\" WORD: format (roffで)書式整形(する)[man.7] .\" WORD: indent インデント[man.7] .\" .Dd November 30, 1998 .Os .Dt MAN 7 .Sh 名称 .Nm man .Nd .Nm \-man マクロパッケージのクイックリファレンスガイド .Sh 書式 .Nm groff .Fl m Ns Ar an .Ar .Sh 解説 .Nm \-man パッケージは、 .Ux マニュアルページの書式整形に使用するマクロの集合です。 .Bx システムでは、 .Nm -の使用を大いに非としており、代わりに、それより表現力に富んだ +の使用は非推奨とされており、代わりに、それより表現力に富んだ .Nm mdoc パッケージが推奨されています。 .Sh 使用法 .Ss 慣習 .Nm で使用するマクロは、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) の間隔は、その後インデント状態の パラグラフが継続する間、保持されていますが、非インデント状態の パラグラフに到達するとデフォルト値にリセットされます。インデントに おけるデフォルトの単位は、 .Dq en です。 .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 プリプロセッサ .It e Ta Xr eqn 1 .It g Ta Xr grap 1 .It p Ta Xr pic 1 .It r Ta Xr refer 1 .It t Ta Xr tbl 1 .It v Ta Xr vgrind 1 .El .Ss 利用可能な文字列 .Nm パッケージで事前に定義されている文字列は次のとおりです。 .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 インチに戻します。 行分割は生じません。 .It ".HP" Op Ar indent パラグラフを、ハンギングインデント (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 .Op Ar footer Op Ar center .Xc セクション .Ar section に属するリファレンスページ .Ar name を開始します。 第 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 関数 必要なデータの宣言もしくは .Li "#include" 指示子を最初に置きます。その後ろに関数宣言を置きます。 .El .It ".SH DESCRIPTION" -コマンドや関数の外部挙動の概要を記述します。そこには、ファイルや -データとの相互作用、標準入力、標準出力、標準エラー出力がどのように -扱われるかが含まれます。普通、内部挙動や実装の詳細をここでは示しません。 +コマンドや関数の外部挙動の概要を記述します。それには、ファイルや +データとのやりとりや、標準入力、標準出力、標準エラー出力がどのように +扱われるかが含まれます。通常、内部挙動や実装の詳細をここでは示しません。 このセクションで解くべき疑問は、「これはなにをするのか?」もしくは、 「これは何のためのものか?」です。 .Pp リテラルテキスト、ファイル名、リファレンスマニュアルの他の場所にある 項目への参照は、固定幅書体で表さねばなりません。引数は斜体を用いて 表さねばなりません。 .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" 診断メッセージと対応する説明の一覧です。 .It ".SH BUGS" 既知の障害や使用上の制限があれば、それを記述します。 .El .Sh 関連ファイル .Bl -tag -width "/usr/share/lib/tmac/tmac.groff_an" .It "/usr/share/lib/tmac/tmac.an" .Nm パッケージを定義する初期ファイル。 .It "/usr/share/lib/tmac/tmac.groff_an" マクロ定義のための .Nm groff のソース。 .It "/usr/share/lib/tmac/man.local" .Nm パッケージに対するローカルな変更。 .El .Sh 関連項目 .Xr apropos 1 , .Xr groff 1 , .Xr man 1 , .Xr nroff 1 , .Xr troff 1 , .Xr whatis 1 , .Xr mdoc 7 , .Xr mdoc.samples 7 .Sh 歴史 このマニュアルページは .An "Joseph Koshy" .Ad Aq jkoshy@freebsd.org によって記述されました。 .Sh 訳注 この日本語訳マニュアルページにおけるセクションタイトルの英和対応は次の とおりです。 .Bl -column "RETURN VALUES" "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -offset indent .It Em 英文 Ta Em 和訳 .It NAME Ta 名称 .It SYNOPSIS Ta 書式 .It DESCRIPTION Ta 解説 .It OPTIONS Ta オプション .It USAGE Ta 使用法 .It RETURN VALUES Ta 戻り値 .It EXIT STATUS Ta 終了ステータス .It FILES Ta 関連ファイル .It SEE ALSO Ta 関連項目 .It DIAGNOSTICS Ta 診断 .It BUGS Ta バグ .El .\"ZZZ: 3.0-19990129-SNAP by Norihiro Kumagai diff --git a/ja_JP.eucJP/man/man7/security.7 b/ja_JP.eucJP/man/man7/security.7 index 534e92d12a..732cf741ef 100644 --- a/ja_JP.eucJP/man/man7/security.7 +++ b/ja_JP.eucJP/man/man7/security.7 @@ -1,634 +1,642 @@ .\" Copyright (c) 1998, Matthew Dillon. Terms and conditions are those of .\" the BSD Copyright as specified in the file "/usr/src/COPYRIGHT" in .\" the source tree. .\" .\" %Id: security.7,v 1.4 1998/12/26 05:19:42 dillon Exp % .\" jpman %Id: security.7,v 1.3 1999/02/11 11:18:48 vanitas Stab % .\" .Dd December 20, 1998 .Dt SECURITY 7 .Os .Sh 名称 .Nm security .Nd FreeBSD におけるセキュリティ入門 .Sh 解説 .Pp セキュリティは、システム管理者とともに始まり、システム管理者と -ともに終る機能です。すべての +ともに終る機能です。 .Bx -システムは昔からマルチユーザに対応しています。セキュリティの仕組みを +システムは昔からすべてマルチユーザに対応しています。セキュリティの仕組みを 組み込んで維持することで、ユーザを .Sq 正直に し続ける仕事は、システム管理者の最も大きな責務の一つでしょう。マシンは、 管理者が設定しただけのセキュリティしか示しません。セキュリティに関する 問題は、むしろ、便利さを求める人間との競合問題です。一般に、 .Ux -システムは莫大な数のプロセスを同時に実行させることも、また、その多くを -サーバとして動作させることもできます。これは、外部の何者かが -接続してきて、サーバプロセスと会話することができるということを -意味します。昨日までのミニコンピュータとメインフレームは、今日では -デスクトップコンピュータとなり、かつ、それらはネットワークで結ばれて +システムは莫大な数のプロセスを同時に実行させることができ、 +それも、サーバとして動作するものが多いのです。つまり、外部の何者かが +接続してきて、サーバプロセスと会話することができるということなのです。 +昨日まで使われていたミニコンピュータやメインフレームは、今日では +デスクトップコンピュータが取って代わり、しかも、それらはネットワークで結ばれて インターネットと接続されるようになりました。これにより、セキュリティは 昔と比べてはるかに大きな問題となっています。 .Pp セキュリティに関する問題は、いくつかのカテゴリに分類することができます。 .Bl -enum -offset indent .It サービス不能攻撃 .It ユーザアカウントにかかる危険 .It アクセス可能なサーバを経由した root 権限にかかる危険 .It ユーザアカウントを通した root 権限にかかる危険 .El .Pp サービス不能攻撃とは、マシンから必要な資源を奪う行為です。 サービス不能攻撃は、普通は、そのマシンで実行されるサーバや -ネットワークスタックを圧倒して、マシンを使えなくしたりクラッシュさせようと -するような力任せの仕組みです。サービス不能攻撃のいくつかは、 +ネットワークスタックを圧倒して、マシンをクラッシュさせたり、 +さもなければマシンを使えなくしたりするような力任せの方法です。 +サービス不能攻撃のいくつかは、 ネットワークスタックのバグを利用して、パケット一つでマシンを クラッシュさせようとします。後者は、 カーネルにバグ修正を施すことによってのみ修正することができます。 サーバプロセスに対する攻撃は、サーバのオプションを適切に指定して、 -逆境状況のシステムにおいて、サーバプロセスが引き起こす負荷に限界を設けることで +不利な状況にあるシステムにおいて、サーバプロセスが引き起こす負荷に限界を設けることで 修正することができます。これらに比べると、ネットワークへの力任せの攻撃への 対応はずっと難しくなります。たとえば、偽造パケットによる攻撃 .Pq spoof-packet attack -は、インターネットからシステムを切り離す以外の方法では、抑止することは +は、インターネットからシステムを切り離す以外の方法で防ぐことは ほとんど不可能です。 .Pp -ユーザアカウントを危険に晒すことは、サービス不能攻撃よりは多少はありふれた -ものです。このご時勢でも、システム管理者の多くは、自分たちのマシンで -標準の telnetd, rlogind, rshd, ftpd サーバを実行させています。これらの +ユーザアカウントを危険に晒してしまう問題は、サービス不能攻撃よりもずっとよくある +問題です。このご時勢でも、自分たちのマシンで標準の telnetd, rlogind, rshd, ftpd +サーバを実行させているシステム管理者は多いのです。これらの サーバは、デフォルトでは、暗号化されたコネクション上で動作していません。 -その結果、抱えているユーザ数が標準的な大きさならば、リモート -.Pq そのシステムにログインするのに最も普通で便利な場所 -からログインしているユーザのうち一人以上は、パスワードを覗き見られて +その結果、抱えているユーザ数が標準くらいであれば、リモートログイン +.Pq そのシステムにログインするには最も普通で便利な方法です +しているユーザのうち一人以上は、パスワードを覗き見られて しまうでしょう。 -システム管理者が注意深いならば、たとえログインが成功していたとしても、 +システム管理者が注意深い人ならば、たとえログインが成功していたとしても、 リモートアクセスログをときどき解析して、疑わしいソースアドレスを探すものです。 .Pp ひとたび攻撃者がユーザアカウントへのアクセス権を入手すると、攻撃者が root の権限を破る可能性があることを仮定するべきです。しかし、 -セキュリティを十分保ち、手入れの行き届いたシステムにおいては、 +セキュリティを十分維持し、手入れの行き届いたシステムにおいては、 あるユーザアカウントへのアクセスが可能となっても、攻撃者に必ずしも root へのアクセス権を与えるとは限らないのが現実です。この違いは重要です。 というのは、root へのアクセス権がなければ、一般的に、攻撃者は自分の 侵入の痕跡を隠蔽することができませんし、そのユーザのファイルを消して マシンをクラッシュさせることができるのがせいぜいで、他のユーザの ファイルには手出しできません。 .Pp システム管理者は、あるマシン上で root の権限を破る方法がいくつかあることを 心しておかねばなりません。攻撃者が root のパスワードを知ってしまうかも しれません。攻撃者が root の権限で実行されるサーバのバグを見つけ、 ネットワークからそのサーバへ接続して root の権限を破ることができるかも しれません。ひとたびユーザアカウントを破ると、ユーザアカウントから -root の権限を破ることが可能であるバグを持つ suid-root プログラムの +root の権限を破ることが可能であるというバグを持つ suid-root プログラムの 存在を、攻撃者は知っているかもしれません。 .Pp セキュリティを改善する方法は、常に、 .Sq タマネギの皮剥き のように 複数の層のアプローチで実装されます。これらは次のように分類できます。 .Bl -enum -offset indent .It root とスタッフのアカウントの安全性を高める。 .It root の安全性を高める - root 権限のサーバと suid/sgid バイナリ。 .It ユーザアカウントの安全性を高める。 .It パスワードファイルの安全性を高める。 .It カーネルのコア、raw デバイス、ファイルシステムの安全性を高める。 .It ファイルの完全性のチェック: バイナリ、設定ファイルなど。 .It 偏執狂的方法。 .El .Sh root アカウントとスタッフアカウントの安全性を高める .Pp root のアカウントの安全性を確保しないうちからスタッフのアカウントの安全性を うんぬんしてもしかたがありません。ほとんどのシステムでは、root アカウントに 割り当てたパスワードがひとつあります。まず最初にすべきことは、 このパスワードは .Sq いつでも 危険に晒されていると仮定することです。root アカウントの安全性を確保する ためには、ネットワーク越しに、あるいはどれか一般ユーザのアカウントから、 root のパスワードを使って root アカウントにログインすることが決して -できないことを確実にすることです。正しいパスワードが与えられようが +できないことを確認することです。正しいパスワードが与えられようが 与えられまいが、telnetd, rlogind, その他ログイン処理を行なうサーバ -すべてで root でのログインを拒絶するように設定していないとするなら、 -今すぐそういうふうに設定して下さい。直接 root でログインできるのは、 +すべてで root でのログインを拒絶するように設定していないのであれば、 +今すぐ必ず設定して下さい。直接 root でログインできるのは、 システムコンソールからだけにして下さい。ここで役に立つのが .Sq /etc/ttys ファイルです。ほとんどのシステムでは、デフォルトで安全ですが、 優れたシステム管理者は、設定がそうなっているか常にチェックを怠らない ものです。 .Pp システム管理者として、自分は root になれるようにしておかねばならないの はもちろんですから、穴をいくつか空けておきます。しかし、それらの穴を 動作させるには、さらに追加のパスワード認証が必要であるようにして おきます。root でアクセス可能とする方法の一つとして、 適切なスタッフアカウントを .Pq /etc/group の wheel グループに加えることがあります。 wheel グループに置かれたスタッフメンバには、 .Sq su を使って root になることが許されます。スタッフメンバに、 パスワードファイルのエントリでそのまま wheel のアクセス権を 与えてはいけません。スタッフは、 .Sq staff かその類のグループに置き、その中で本当に root になる必要がある人 -だけを wheel グループに加えるようにします。残念ながら、wheel の -仕組みだけだと、侵入者がパスワードファイルを手に入れると、攻撃者が -破る必要があるのは root のパスワードか、wheel グループにたまたま属す -staff アカウントの一つのパスワードだけです。wheel の仕組みは有益 -ですが、wheel グループがまったく存在しない状況と比べてそれほど +だけを wheel グループに加えるようにします。しかし、残念ながら、wheel の +仕組みだけだと、侵入者は、パスワードファイルを手に入れるとルート権限を +破ることができてしまいます。攻撃者が破る必要があるのは root のパスワード +か、wheel グループにたまたま属するstaff アカウントのパスワードどれかひとつだけだからです。 +wheel の仕組みは有益ですが、wheel グループがまったく存在しない状況と比べてそれほど 安全なわけではありません。 .Pp root アカウントの安全性を高める間接的な方法として、別のログインアクセス の方法を用いて、スタッフのアカウントの暗号化パスワードを\ * にして おくことで、スタッフのアカウントの安全性を高めるものがあります。この方法 だと、侵入者がパスワードファイルを盗むことができるかもしれませんが、 スタッフアカウントを破ることはできないでしょう。また、たとえ root が暗号化 パスワードをパスワードファイルに付けていたとしても、間接的には root アカウントも破ることができないでしょう。 スタッフメンバがスタッフアカウントでログインする際には、 .Xr kerberos 1 や .Xr ssh 1 .Po .Pa /usr/ports/security/ssh 参照 .Pc のような、公開鍵 / 秘密鍵の鍵の組を使う 安全性の高いログインの仕組みを使います。kerberos のような仕掛けを使う場合、 一般に、kerberos サーバを実行するマシンと自分のデスクトップ ワークステーションとの安全性を確保しなければなりません。ssh で -公開鍵 / 秘密鍵の鍵の組を使う場合、一般に、ログイン元マシン +公開鍵 / 秘密鍵の組を使う場合、一般に、ログイン元マシン .Pq 通常は自分のワークステーション の安全性を確保しなければなりません。ここで、 .Xr ssh-keygen 1 -で鍵の組を生成する際、鍵の組をパスワードで防御することにより、 -鍵の組を防護するための層を追加することもできます。スタッフアカウントの -パスワードを\ * で外すことができることにより、スタッフメンバが -管理者自身が設定した安全性の高い方法でのみログインできることも保証 -できます。かくして、多くの侵入者が使う重大なセキュリティの穴 +で公開鍵 / 秘密鍵の組を生成する際、鍵の組をパスワードで防御することにより、 +鍵の組への防御層を追加することもできます。スタッフアカウントの +パスワードを\ * で外すことができると、管理者自身が設定 +した安全性の高い方法でしかスタッフメンバがログインできないことも保証 +できます。こうして、多くの侵入者が使う重大なセキュリティの穴 .Pq 安全性の低い無関係なマシンからネットワークを覗き見る方法 -のないセッションを提供する、安全性の高い暗号化されたコネクションを -使うことを、すべてのスタッフメンバに強制することができるのです。 -.Pp -より間接的なセキュリティの仕組みは、より制限の強いサーバから制限の弱い -サーバへログインすることを前提としています。例えば、主マシンで、 -すべての種類のサーバを実行させている場合、ワークステーションではそれらの -サーバを実行させてはなりません。ワークステーションの安全性を比較的 -高めておくためには、実行するサーバの数を、果てはサーバなしまで、 -できるだけ減らしておくべきです。また、パスワード防護された -スクリーンセーバを走らせておくべきです。 -ワークステーションへの物理的アクセスが与えられたとすると、攻撃者は -管理者が設定したいかなる種類のセキュリティをもうち破ることができるのは -もちろんのことです。これは、管理者として考えておかねばならない決定的な -問題ですが、システム破りの大多数は、ネットワーク経由でリモートから、 -ワークステーションやサーバへの物理的アクセス手段を持たない人々によって -行なわれるという事実も、また、念頭に置いておく必要があります。 +を塞ぐようなセッションを提供する、安全性の高い暗号化されたコ +ネクションを使うことを、スタッフメンバ全員に強制することができ +るのです。 +.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 .Pq 普通、suid 設定されています を攻撃可能にしていました。 安全である方がよいので、用心深いシステム管理者は残念に思いながらも、 スタッフのみが実行する必要がある suid バイナリは、スタッフのみが アクセス可能な特別なグループに含めるように制限を加え、 -誰も使わない suid バイナリは chmod 000 して片付けてしまうでしょう。 +誰も使わない suid バイナリは chmod 000 を実行して片付けてしまうで +しょう。 ディスプレイを持たないサーバは、一般的に xterm のバイナリを必要としません。 sgid バイナリもほとんど同様の危険な存在になり得ます。 -侵入者が sgid-kmem のバイナリを破ることができた場合、 +侵入者が kmem に sgid されたバイナリを破ることができた場合、 その侵入者は /dev/kmem を読み出すことができるようになります。 つまり、暗号化されたパスワードファイルを読み出すことができる ようになるので、パスワードを持つどのアカウントをも、 .Pq 潜在的な 危険に晒すことになります。 tty グループを破った侵入者は、ほとんどすべてのユーザの端末に書き込みが できます。talk-back 機能を持つ端末プログラムやエミュレータをユーザが実行 していると、 .Pq 結局、そのユーザとして実行される コマンドをユーザの端末にエコーさせるデータストリームを 侵入者が生成できる可能性があります。 .Sh ユーザアカウントの安全性を高める .Pp ユーザアカウントは、普通、安全性を高めることが最も困難です。 スタッフに対して、アテナイのドラコのような厳格なアクセス制限を課し、 スタッフのパスワードを\ * で外すことができるとはいえ、管理者が持ちうる 一般ユーザすべてのアカウントに対して同じことはできないかも知れません。 -十分な管理を保つならば、管理者は勝利し、ユーザの -アカウントを適切な状態で安全を確保できるかもしれません。それが -保てないならば、一般ユーザのアカウントをモニタしていっそう気を配るように -するしかありません。一般ユーザアカウントでの ssh や kerberos の利用は、 -いろいろ問題をはらんでいます。それでも、暗号化パスワードと比較すると、 +管理者が十分に統率をとることができるなら、管理者は勝利し、ユーザの +アカウントの安全を適切に確保できるかもしれません。それが +できないならば、よりいっそう気を配って一般ユーザのアカウントを +監視するよりほかありません。一般ユーザアカウントに対し +ssh や kerberos を利用することには、いろいろと問題があります。 +それでも、暗号化パスワードと比較すると、 はるかに良い解です。 .Sh パスワードファイルの安全性を高める .Pp できるだけ多くのパスワードを\ * で外し、それらのアカウントのアクセスには ssh や kerberos を使うようにすることが、唯一の確実な方法です。たとえ暗号化 パスワードファイル .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 bpf デバイスを外し、モジュールローダを無効にしても、/dev/mem と /dev/kmem という悩みの種がまだ残っています。この問題に関しては、侵入者は raw デバイスに書き込むこともできます。この問題を避けるため、システム管理者は カーネルをより高い安全レベル .Pq securelevel 、少なくとも安全レベル 1 で実行させる必要があります。 sysctl を使って kern.securelevel 変数に安全レベルを設定することが できます。ひとたび安全レベルに 1 を設定すると、 raw デバイスに対する書き込みアクセスは拒否され、例えば .Sq schg のような 特別な chflags フラグが効果を発揮します。これに加えて、 -起動において重要なバイナリ・ディレクトリ・スクリプトファイルなど、 +起動時において重要なバイナリ・ディレクトリ・スクリプトファイルなど、 安全レベルが設定されるまでの間に実行されるものすべてに対しても .Sq schg フラグを確実に on にしておく必要があります。この設定をやり過ぎても 構いませんが、より高い安全レベルで動作している場合、システムの アップグレードがはるかに困難になります。システムをより高い安全レベルで 実行させるようにするが、お天道さまの下にあるすべてのシステムファイルと ディレクトリに schg フラグを設定しないという妥協をする方法もあります。 .Sh ファイルの完全性のチェック: バイナリ、設定ファイルなど .Pp -ことここに至るとシステム管理者にできることは、 -便利度がその醜い頭を上げない程度に、 +ことこの問題に至ると、システム管理者にできることは、 +便利さという要素がその醜い頭を上げない程度に、 コアシステムの設定 / 制御ファイルを防御することだけです。 セキュリティのタマネギの最後の層はおそらく最も重要なもの、すなわち探知です。 .Pp システムファイルの完全性をチェックする唯一の正しい方法は、別の、より安全な システム経由で行なう方法だけです。 .Sq 安全 なシステムを準備することは比較的 -容易です。単に、サービスを一切実行しないようにするだけです。安全なシステム +容易です。単にそのシステム上で、サービスを一切実行しないようにするだけです。安全なシステム を用いて、ssh 経由で他のシステムの root 空間にアクセスします。これは セキュリティの末端のように見えるかもしれません。しかし、管理者には信頼を どこかに置く必要があります。いきあたりばったりでサーバプロセスを 実行するような馬鹿げたことをしない限りは、安全度の高いマシンを構築する ことは本当に可能です。ここで .Sq 安全 という場合、物理アクセスに対する -セキュリティをも含めて仮定していることはもちろんです。安全なマシンで、 -他のすべてのマシンに root のアクセス権限を持つものが得られると、 +セキュリティをも含めて仮定していることはもちろんです。他のすべてのマシンに root のアクセス権限を持つ、安全なマシンがあれば、 「安全なマシンの上で」システムの他のマシンをチェックする セキュリティスクリプトを書くことができるようになります。 最も普通のチェック方法は、セキュリティスクリプトで、 まず、find と md5 のバイナリファイルをリモートマシンに .Xr scp 1 してから、 リモートシステムのすべてのファイル .Pq もしくは、少なくとも /, /var, /usr パーティション! に対して md5 を適用するシェルコマンドを ssh を使ってリモートマシンで実行するものです。 -安全なマシンは、チェック結果をファイルにコピーし、前回のチェック結果と -diff を取り -.Pq または、安全なマシン自身のバイナリと比較する -違いを -毎日のレポートとしてスタッフメンバひとりひとりにメールを送ります。 -.Pp -この種のチェックを行なうもう一つの方法として、安全なマシンに対して、 -他のマシンの主なファイルシステムを NFS export する方法があります。 +安全なマシンは、チェック結果をファイルにコピーし、前回のチェック結果との差分を取り +.Pq または、安全なマシン自身が持っているバイナリと比較する +、その差分を +毎日のレポートとしてスタッフメンバひとりひとりにメールで送ります。 +.Pp +この種のチェックを行うもう一つの方法として、 +他のマシンから主なファイルシステムを 安全なマシンに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 を破ったかを -追跡するのに際して特に有益です。 -.Pp -最後に、セキュリティスクリプトはログファイルを処理するようにして、 -ログファイル自体はできるだけ安全性の高い方法で -(リモート syslog は極めて有益になり得ます) +は、比較的オーバヘッドの低いオペレーティングシステムの機能で、 +マシンに侵入されてしまった後の評価の仕組みとして使用することをお勧め +します。 +侵入を受けた後でも当該ファイルが無傷である場合に、 +侵入者が実際にどのようにしてシステムの root を破ったかを +追跡するのに特に有益です。 +.Pp +最後に、セキュリティスクリプトはログファイルを処理するようにし、 +ログファイル自体もできるだけ安全性の高い方法で +.Sq リモート syslog は極めて有益になり得ます 生成するようにすべきです。侵入者は自分の侵入の痕跡を覆い隠そう -としますし、ログファイルはシステム管理者が最初の侵入の時刻と方法を -追跡してゆくために極めて重要です。 +としますし、また、ログファイルはシステム管理者が最初の侵入の時 +刻と方法を追跡してゆくために極めて重要です。 .Sh 偏執狂的方法 .Pp 多少偏執狂的になっても決して悪いことにはなりません。原則的に、 システム管理者は、便利さに影響を与えない範囲でいくつでもセキュリティ 機能を追加することができます。また、いくらか考慮した結果、便利さに 影響を与えるセキュリティ機能を追加することもできます。 -.Sh サービス不能攻撃 (D.O.S attack) についての特記事項 +.Sh サービス不能攻撃 (D.O.S. attack) についての特記事項 .Pp このセクションではサービス不能攻撃を扱います。サービス不能攻撃は、普通は、 パケット攻撃です。ネットワークを飽和させる最先端の偽造パケット .Pq spoofed packet 攻撃に対してシステム管理者が打てる手はそれほど多く -ありませんが、一般的に、その種の攻撃がサーバをダウンさせないことを -確実にすることで、被害を制限することはできます。 +ありませんが、一般的に、その種の攻撃によってサーバがダウン +しないことを確実にすることで、被害をある限度に食い止める +ことはできます。 .Bl -enum -offset indent .It サーバの fork の制限 .It 踏み台攻撃の制限 .Pq ICMP 応答攻撃、ping broadcast など .It カーネルの経路情報のキャッシュ .El .Pp 普通に見られるサービス不能攻撃に、fork するサーバプロセスに対する ものがあります。これは、サーバにプロセス・ファイル記述子・メモリを 食い尽くさせて、マシンを殺そうとするものです。 inetd .Po .Xr inetd 8 参照 .Pc には、この種の攻撃を制限するオプションがいくつかあります。マシンが ダウンすることを防止することは可能ですが、この種の攻撃によりサービスが -崩壊することを防止することは一般的に可能とは限らないことに注意する必要が -あります。inetd のマニュアルページを注意深く読んで下さい。とくに、 +崩壊することを防止することは一般的に言ってできないことに注意する必要が +あります。inetd のマニュアルページを注意深く読んで下さい。特に、 .Fl c , .Fl C , .Fl R オプションに注意して下さい。IP 偽造攻撃 .Pq spoofed-IP attack は inetd の .Fl C -オプションを出し抜くので、普通はオプションを +オプションの裏をかけるので、一般にオプションを 組み合わせて使用するべきであることに注意して下さい。スタンドアロンサーバ -のいくつかは、自己の fork 上限のパラメータを持っています。 +の中には、自分自身で fork を制限するパラメータを持っているものがあります。 .Pp sendmail には、 .Fl OMaxDaemonChildren オプションがあります。負荷には遅れがあるので、 sendmail の負荷に限界を設けるオプションを使うよりも、 このオプションを使う方がまともに動作する可能性ははるかに高いです。 sendmail の実行を開始する際に、 .Cm MaxDaemonChildren パラメータを設定するべきです。その値は、 通常見込まれる負荷を扱える程度に十分高いが、 それだけの数の 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 オプションを使って下さい。 .Pp tcpwrapper の逆 identd などの接続返し .Pq connect-back -を行なうサービスに -ついては十分注意を払うようにするべきです。これらは直接攻撃を食らう可能性が +を行うサービスに +ついては十分注意を払うようにするべきです。これらは直接攻撃を受ける可能性が あります。こういう事情があるので、tcpwrapper の逆 ident 機能を使おうとは -思わないのが一般的なところです。 +思わないのが一般的です。 .Pp 境界ルータのところでファイアウォールを設けて、外部からのアクセスに対して -内部サービスを防御することは実によい考えです。この考え方は、LAN の外 -からの飽和攻撃を防ぐことにあり、root からのネットワークベースの root -権限への攻撃から内部サービスを防御することに、あまり考慮を払って +内部サービスを防御するという考えは実によいものです。この考えは、LAN の外部 +からの飽和攻撃を防ぐことにあり、root ネットワークベースの root +権限への攻撃から内部サービスを防御することには、あまり考慮を払って いません。ファイアウォールは常に排他的に設定して下さい。つまり、 「ポート A, B, C, D と M から Z まで .Eo * 以外 .Ec * のすべてに防火壁を設ける」というふうにです。 このようにすることで、named -.Pq そこがゾーンのプライマリである場合 , +.Pq ゾーンのプライマリである場合 , ntalkd, sendmail など、インターネットにアクセスを提供するサービス -として特に指定するもの以外の、すべての低めのポートをファイアウォールで -停止することができます。ファイアウォールをこの他のやり方、つまり +として特に指定するもの以外の、小さい番号のポートすべてをファイアウォールで +防御することができます。ファイアウォールをこの他のやり方、つまり 包含的もしくは受容的なファイアウォールとして設定しようとする場合、 -いくつかのサービスを .Sq close -することを忘れたり、新しい内部サービスを -追加してファイアウォールの更新を忘れたりすることはよくあります。 -ファイアウォールの高めの範囲のポートを開けておいて、低めのポートを +することを忘れてしまうサービスがいくつか出てきたり、新しい内部サービスを +追加したのにファイアウォールの更新を忘れたりする可能性がよく出てきます。 +ファイアウォール上の大きい番号のポートを開けておいて、小さい番号のポートを 危険に晒すことなく受容的な動作を許すことができます。 .Bx Free では、net.inet.ip.portrange への sysctl .Pq sysctl -a \&| fgrep portrange , をいろいろ使用することで、 動的バインドに使用されるポート番号の範囲を制御できることを記憶にとどめて おいて下さい。これによりファイアウォールの設定の複雑性を緩和できます。 -私は、ファイアウォールに通常の範囲として、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 エラー 応答を生成するパケットを生成することにより、攻撃者はサーバの 受信ネットワークを飽和させることができ、同時に、サーバが送信 ネットワークを 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 内部テストサービスのすべてを無効にしておくものです。 .Pp 偽造パケット攻撃は、カーネルの経路情報キャッシュに過負荷を生じさせるために 用いられることもあります。net.inet.ip.rtexpire, rtminexpire, rtmaxcache の sysctl パラメータを参照して下さい。でたらめなソース IP を用いた この偽造パケット攻撃により、カーネルは、一時的なキャッシュ経路を 経路情報テーブルに生成します。これは .Sq netstat -rna \&| fgrep W3 で見ることができます。これらの経路は、普通は 1600 秒程度でタイムアウトに なります。カーネルがキャッシュ経路テーブルが大きくなり過ぎたことを 検知すると、カーネルは動的に rtexpire を減らしますが、rtminexpire より 小さくなるようには決して減らしません。ここに問題が 2 つあります。 (1) 負荷の軽いサーバが突然攻撃された場合、カーネルが十分素早く反応 -しないこと。(2) カーネルが攻撃に耐え生き延びられるほど十分 -rtminexpire が低くなっていないこと。自分のサーバが T3 もしくはそれより +できないこと。(2) カーネルが攻撃に耐え生き延びられるほど十分 +rtminexpire が低く設定されていないこと。の2つです。 +自分のサーバが T3 もしくはそれより 良質の回線でインターネットに接続されている場合、 .Xr sysctl 8 を用いて rtexpire と rtminexpire とを手動で上書きしておくことが思慮深いこと といえます。 -.Pq 自分のマシンをクラッシュさせたくない限りは:- -どちらかを 0 に -するようなことは決してしないで下さい。両パラメータを 2 秒に設定すれば、 +.Pq 自分のマシンをクラッシュさせたくないのであれば:-) +どちらか一方でも 0 に +は決してしないで下さい。両パラメータを 2 秒に設定すれば、 攻撃から経路情報テーブルを守るには十分でしょう。 .Sh 関連項目 .Pp .Xr accton 1 , .Xr chflags 1 , .Xr find 1 , .Xr kerberos 1 , .Xr md5 1 , .Xr ssh 1 , .Xr sshd 1 , .Xr syslogd 1 , .Xr xdm 1 , .Xr sysctl 8 .Sh 歴史 .Nm マニュアルページは、もともと .An Matthew Dillon によって書かれました。 最初に現れたのは、 .Bx Free -3.0.1 で 1998 年 12 月のことです。 .\" translated by Norihiro Kumagai, 98-12-29 diff --git a/ja_JP.eucJP/man/man8/adding_user.8 b/ja_JP.eucJP/man/man8/adding_user.8 index 5bbcbb2298..597e5cc9fa 100644 --- a/ja_JP.eucJP/man/man8/adding_user.8 +++ b/ja_JP.eucJP/man/man8/adding_user.8 @@ -1,126 +1,126 @@ .\" Copyright (c) 1980, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)adduser.8 8.1 (Berkeley) 6/5/93 .\" %Id: adding_user.8,v 1.2 1997/03/07 03:28:19 jmg Exp % .\" jpman %Id: adding_user.8,v 1.3 1997/07/22 16:44:29 horikawa Stab % .\" .Dd June 5, 1993 .Dt ADDING_USER 8 .Os BSD 4 .Sh 名称 .Nm adding_user .Nd 新規ユーザ登録のためのプロシージャ .Sh 解説 新規ユーザはログイン名を選ばなければなりません。 ここで、ログイン名は既に .Pa /etc/passwd や .Pa /etc/aliases に登録されているものであってはいけません。 また、ハイフン .Ql Fl 文字で始まるものも使えません。 メーラを混乱させないためにも、全ての文字は英小文字でドット .Ql \&. 文字を含まないことが、強く推奨されています。 アカウントは、パスワードファイルを一行編集することで加えることが できます。これを行う時は、パスワードファイルはロックされていなければ なりません。このロックは、 .Xr chpass 1 や .Xr vipw 8 を使うことで可能です。 .Pp 新規ユーザには、グループとユーザ id を与えます。 ログイン名とユーザ id は、システム全体やしばしばシステムグループで 一意でなければなりません。これは、ファイルのアクセスを制御するために 使われるからです。 典型的には、似たようなプロジェクトで働いているユーザは同じグループに 入ります。 University of California の Berkley 校では、システムスタッフ・ 学部・大学院・大きなプロジェクトのための特別なプロジェクトのグループが あります。 .Pp 新規ユーザ \*(lqernie\*(rq のための骨格となるアカウントは、以下のようになります。 .Bd -literal ernie::25:30::0:0:Ernie Kovacs,508 Evans Hall,x7925, 642-8202:/a/users/ernie:/bin/csh .Ed .Pp 個々のフィールドの解説は、 .Xr passwd 5 を参照してください。 .Pp 新規ユーザに始めるにあたっていくつかの助けを与えることは良いことです。 このために、いくつかの骨格となるファイルを与えてあげれます。 .Pa /bin/sh ユーザには、 .Pa \&.profile を、 .Pa /bin/csh ユーザには、 .Pa \&.cshrc や .Pa \&.login を与えれば良いでしょう。 .Pa /usr/share/skel ディレクトリに、そのようなファイルの骨格の定義を置いておけます。 新規ユーザは、これらのファイルの複製を与えられます。 ここで、例えば .Xr tset 1 をログインする度に自動的に実行するように設定できます。 .Sh 関連ファイル .Bl -tag -width /etc/master.passwdxx -compact .It Pa /etc/master.passwd ユーザデータベース .It Pa /usr/share/skel ログインディレクトリのための骨格データ .El .Sh 関連項目 .Xr chpass 1 , .Xr finger 1 , .Xr passwd 1 , .Xr aliases 5 , .Xr passwd 5 , .Xr adduser 8 , .Xr pwd_mkdb 8 , .Xr vipw 8 .Sh バグ ユーザ情報は (段々とそうなってきていますが)、別のところに 記憶するべきです。 .Sh 歴史 .Nm -プロシージャは +手続きは .Bx 3.0 から導入されました. diff --git a/ja_JP.eucJP/man/man8/rpc.yppasswdd.8 b/ja_JP.eucJP/man/man8/rpc.yppasswdd.8 index 117e6c4075..4f9fc3a4f1 100644 --- a/ja_JP.eucJP/man/man8/rpc.yppasswdd.8 +++ b/ja_JP.eucJP/man/man8/rpc.yppasswdd.8 @@ -1,326 +1,327 @@ .\" Copyright (c) 1995, 1996 .\" Bill Paul . All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by Bill Paul. .\" 4. Neither the name of the author nor the names of contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %Id: rpc.yppasswdd.8,v 1.9 1998/03/23 08:28:39 charnier Exp % .\" jpman %Id: rpc.yppasswdd.8,v 1.3 1997/08/31 14:17:34 horikawa Stab % .\" .Dd February 8, 1996 .Dt RPC.YPPASSWDD 8 .Os .Sh 名称 .Nm rpc.yppasswdd .Nd "NIS パスワードを変更するためのサーバ" .Sh 書式 .Nm rpc.yppasswdd .Op Fl t Ar master.passwd template file .Op Fl d Ar default domain .Op Fl p Ar path .Op Fl s .Op Fl f .Op Fl a .Op Fl m .Op Fl i .Op Fl v .Op Fl u .Op Fl h .Sh 解説 .Nm デーモンは、ユーザが .Xr yppasswd 1 と .Xr ypchpass 1 コマンド使うことで、 NIS パスワードおよび他の情報を変更することを許します。 .Nm は、パスワードの変更要求を受け入れ、その認証を行い、 .Pa /var/yp/master.passwd ファイル中に更新された情報を配置し、 NIS の .Pa master.passwd マップと .Pa passwd マップを更新する、 RPC を使ったサーバです。 .Pp .Nm は、普通の NIS ユーザが、自分の NIS パスワード・ -('GECOS'フィールドとして知られている)フルネーム・シェルを変更することを許します。 +('GECOS'フィールドとして知られている) フルネーム・ +シェルを変更することを許します。 これらの更新は、典型的には .Xr yppasswd 1 , .Xr ypchfn 1 , .Xr ypchsh 1 , .Xr ypchpass 1 コマンドを使って行われます。 (管理者の中には、ユーザが名前の情報やシェルを変更することを 望まない人もいます。サーバは、オプションフラグを使うことで、そのような 変更ができない様にできます。)サーバが更新要求を受け取ると、 .Pa /var/yp/securenets ファイルに記述されている .Pa securenets 規則 (securenets に関する詳細な情報は .Xr ypserv 8 のマニュアルページを参照してください。 .Nm サーバは、 .Xr ypserv 8 -と同じアクセス制御機構を使います。)に照らして、 +と同じアクセス制御機構を使います。) に照らして、 要求を行ったクライアントのアドレスを比較します。 .Pp サーバは、その後ユーザが入力した '古い' パスワードが有効かどうかを 確認し、その後いくつかの更新情報のチェックを行います (これらには、制御文字のチェックやコロンや有効なシェルのチェックを 含みます)。ひとたび更新要求が有効であることが満足されると、 サーバはパスワードテンプレートファイル (デフォルトでは、 .Pa /var/yp/master.passwd です) を更新し、その後 NIS マップを再構築するために .Pa /usr/libexec/yppwupdate -スクリプトを実行します。(このスクリプトは、二つの引数を受け取ります: +スクリプトを実行します。(このスクリプトは、2 つの引数を受け取ります: それらは変更されたパスワードテンプレートの相対パス名と更新された ドメインの名前です。これらは、 .Pa /var/yp/Makefile に渡されます。) .Pp .Bx Free 版の .Nm は、NIS マスタサーバ上のスーパユーザが NIS パスワードマップを更新するための より洗練された方法を提供します。スーパユーザは任意のドメインの 任意のユーザの master.passwd エントリの任意のフィールドを変更できます。 これは、ユーザの現在の NIS パスワードについて知らなくても可能です (サーバがスーパユーザからの要求を受け取ると、パスワード認証は 省略します)。そのうえ、サーバが .Fl a フラグ付きで実行された時には、スーパユーザは .Xr ypchpass 1 を使って、新しいエントリをマップに付け加えることさえできます。 また、これは、 NIS マスタサーバ上のスーパユーザだけに適用されます。 これらの特別な機能はネットワークを介しては提供されません。 .Pp .Nm デーモンは、 NIS マスタサーバである機械上でだけ実行することが できます。 .Sh オプション 以下のオプションが使用可能です: .Bl -tag -width indent .It Fl t Ar master.passwd template file デフォルトでは、 .Nm は、デフォルトドメインの .Pa master.passwd と .Pa passwd を生成するために使われるテンプレートファイルは、 .Pa /var/yp/master.passwd であることを仮定しています。このデフォルトは、代わりのファイル名を .Fl t フラグとともに指定することで上書きできます。 .Pp (注意): このフラグとともに指定されたテンプレートファイルが .Pa /etc/master.passwd である場合、 .Nm は NIS のマップに加えてローカルのパスワードデータベースを 再構成するために、自動的に .Xr pwd_mkdb 8 を呼び出します。 .It Fl d Ar domain .Nm -サーバは複数のドメインを扱うことができますが、一つのドメインを +サーバは複数のドメインを扱うことができますが、1 つのドメインを デフォルトとして選ばなければなりません。 .Xr domainname 1 コマンドによって設定されたシステムデフォルトのドメイン名を 使おうとします。しかしながら、システムドメイン名が設定されていない場合、 デフォルトドメイン名はコマンドラインで指定しなければなりません。 システムデフォルトドメインが設定されている場合、このオプションはその 定義を上書きします。 .It Fl p Ar path このオプションは、デフォルトの NIS マップデータベースのパスを 上書きするために使われます。コンパイル時に指定されているデフォルトの パスは .Pa /var/yp です。 .It Fl s シェル情報の変更を認めません。 .It Fl f フルネーム ('GECOS') 情報の変更を認めません。 .It Fl a NIS パスワードデータベースへの追加を許可します。NIS マスタサーバ上の スーパユーザは、 .Xr ypchpass 1 コマンドでユーザの .Pa master.passwd マップエントリのどんなフィールドでも、無制限の変更を行うことが 許されています。 .Nm がこのフラグを付けて実行された場合、 .Xr chpass 1 を使用したローカルパスワードデータベース更新にて可能であるのと同様に、 スーパユーザが NIS パスワードマップに新しいレコードを追加することを許可します。 .It Fl m マルチドメインモードを有効にします。 .Xr ypserv 8 は同時にいくつかのドメインを扱うことができますが、ほとんどの .Nm -実装では、一つの NIS ドメインだけしか扱うことができません。 +実装では、1 つの NIS ドメインだけしか扱うことができません。 これは、一般に NIS マスタサーバのシステムデフォルトドメインと同じです。 .Bx Free の .Nm は、 .Pa yppasswd プロトコルでは .Pa domain 引数をクライアントの要求中に含めることが出来ないという プロトコル固有の制限にもかかわらず、 この問題を解決しようとしています。 マルチドメインモードでは、 .Nm は .Pa /var/yp 下の全ドメインの全パスワードマップを検索し、 与えられた更新要求で指定されたユーザ情報と一致するエントリを見付けます。 (一致したかどうかは、ユーザ名と UID および GID フィールドを調べることで 決定されます。) 一致したエントリとそのドメインはその後更新のために 使われます。 .Pp マルチドメインモードがうまく動くためには、各ドメイン毎に 別々のテンプレートファイルが必要なことに注意してください。 例えば、サーバが 3 つのドメイン .Pa foo , .Pa bar , .Pa baz を提供している時、 3 つの別の master.passwd テンプレートファイル .Pa /var/yp/foo/master.passwd , .Pa /var/yp/bar/master.passwd , .Pa /var/yp/baz/master.passwd が必要です。 .Pa foo がシステムデフォルトドメインであったとすると、そのテンプレートファイル は .Pa /var/yp/foo/master.passwd もしくは .Pa /var/yp/master.passwd のどちらであっても構いません。 サーバは、後のファイルを先に確認し、見付からない場合には先のファイルを 確認します。 .Pp デフォルトでは、マルチドメインモードにはなっていません。 これは、異なったドメインに同じもしくは似ているエントリが存在した場合 に失敗するからです。検索領域に複数のエントリを見付けた場合、 サーバは更新要求を停止します。 したがって、偏執的な管理者はマルチドメインモードを利用不可能にしたいと 思うでしょう。 .It Fl i .Nm がこのフラグ付きで呼び出された場合、マップ更新をその場で行おうとします。 この意味は、 パスワードテンプレートファイルを直接更新してマップ更新する代わりに、 サーバがマップデータベースを直接更新するということです。 これは、パスワードマップが大きい時に有効です。例えば、 パスワードデータベースに 10,000 ものエントリがある場合、マップの更新が 終了するまでに数分かかってしまいます。その場でマップを更新することで、 この時間を数秒までに減らすことができます。 .It Fl v 冗長なログモードに入ります。通常、サーバはエラー状態時や スーパユーザによる NIS マスタサーバ上での更新n時に、 .Xr syslog 3 の能力を使ってメッセージを記録します。サーバが .Fl v オプションを使って実行されている時には、全ての更新に対する 情報メッセージを記録します。 .It Fl u たくさんの商用の .Xr yppasswd 1 クライアントは、 .Nm への要求を送る時に予約ポートを使いません。 これは、 .Xr yppasswd 1 が root に set-uid されずにインストールされているか、 RPC の実装が スーパユーザのためにクライアント接続が確立されたとき、 予約ポートを割り当てることをしないようになっているためです。 デフォルトでは、 .Nm は、クライアントからの結果を予約ポートを使って受け取ることを期待します。 非特権ポートから受け取った要求は、排除されます。不幸にして、この振舞いは 特権ポートを使えないクライアントシステムからのパスワード更新要求を妨げます。 .Fl u フラグを指定することで、 .Nm は、特権ポートを使えない .Xr yppasswd 1 でも働くように、特権ポートのチェックを無効にします。 これは、少しセキュリティを低下させますが、クライアントの振舞いを 変更できない場合には必要になるでしょう。 .It Fl h .Nm が理解できるフラグやオプションのリストを表示します。 .El .Sh 関連ファイル .Bl -tag -width Pa -compact .It Pa /usr/libexec/yppwupdate NIS マップを更新し、その後でプッシュするために、 .Nm によって呼び出されるスクリプトです。 .It Pa /var/yp/master.passwd デフォルトドメインのためのテンプレートパスワードファイルです。 .It Pa /var/yp/[domainname]/[maps] 特定の NIS ドメインのための NIS マップです。 .It Pa /var/yp/[domainname]/master.passwd デフォルトでないドメインのための一時パスワードファイルです (マルチドメインモードだけで使われます)。 .El .Sh 関連項目 .Xr yp 4 , .Xr yppush 8 , .Xr ypserv 8 , .Xr ypxfr 8 .Sh バグ yppasswd.x プロトコル定義で記述されているように、 -YPPASSWDPROC_UPDATE プロシジャは二つの引数を取ります。 +YPPASSWDPROC_UPDATE 手続きは 2 つの引数を取ります。 更新するユーザ情報を含む V7 形式のパスワード構造および、 ユーザの暗号化されない (クリアテキスト) パスワードです。 .Nm はリモートの NIS クライアントマシンからの更新要求を扱うことを 仮定しています。これは、 .Xr yppasswd 1 や似たようなクライアントプログラムがネットワークを通して、 ユーザのクリアテキストパスワードを転送するということを意味します。 .Pp これはパスワード更新では問題ではありません。 なぜなら、更新と共に送られるプレインテキストパスワードは、 新しい暗号化されたパスワードが有効になった時には無効になっているからです。 しかし、ユーザが自分の 'GECOS' 情報やシェルを更新する場合には、 更新と共に送られるクリアテキストパスワードは、 更新完了時にも有効です。 ネットワークがセキュアでない場合、このクリアテキストパスワードは、 途中でとらえられ、 そのユーザアカウントに対する不正アクセスに使用されるかも知れません。 .Sh 作者 .An Bill Paul Aq wpaul@ctr.columbia.edu diff --git a/ja_JP.eucJP/man/man8/ypbind.8 b/ja_JP.eucJP/man/man8/ypbind.8 index db74f85b71..a05cf7ba15 100644 --- a/ja_JP.eucJP/man/man8/ypbind.8 +++ b/ja_JP.eucJP/man/man8/ypbind.8 @@ -1,182 +1,182 @@ .\" Copyright (c) 1991, 1993, 1995 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %Id: ypbind.8,v 1.12 1998/03/23 08:30:31 charnier Exp % .\" jpman %Id: ypbind.8,v 1.4 1997/06/18 16:55:44 horikawa Stab % .\" .Dd April 9, 1995 .Dt YPBIND 8 .Os .Sh 名称 .Nm ypbind .Nd "NIS ドメインをバインドするデーモン" .Sh 書式 .Nm ypbind .Op Fl ypset .Op Fl ypsetme .Op Fl s .Op Fl m .Op Fl S Ar domainname,server1,server2,... .Sh 解説 .Nm は NIS バインド情報を管理するプロセスです。 開始時にネットワークブロードキャストを行い、( .Xr domainname 1 コマンドにより設定された) システムデフォルトドメインに対して サービスする NIS サーバを探します。 返答を受け取ると、サーバのアドレス等の情報をファイル .Pa /var/yp/binding に格納します。 標準 C ライブラリ中の NIS ルーチンは、 NIS リクエストを処理する時にはこのファイルを使用します。 NIS クライアントは複数のドメインにバインドされる事がありうるため、 このようなファイルが複数ある場合があります。 .Pp バインドされると、 .Nm は DOMAIN_NONACK リクエストを NIS サーバ宛に 1 分置きに送ります。 リクエストに対する返答が得られない場合、 .Nm はサーバがもう実行していないものとし、 別サーバにバインドされるまでネットワークブロードキャストを再開します。 .Nm は、サーバが返答しなかったことを検知するたび および新たなサーバにバインドされるたび、 警告メッセージを .Xr syslog 3 の機能を使用して記録します。 .Sh オプション 以下のオプションが .Nm にてサポートされています: .Bl -tag -width indent .It Fl ypset .Xr ypset 8 コマンドを使用し、 指定されたドメインの特定の NIS サーバに .Nm を強制的にバインドする事は可能です。 しかし .Nm は、正確には誰が要求しているのかを知る事が出来ないため、 YPBINDPROC_SETDOM リクエストをデフォルトでは拒否します。 .Fl ypset フラグを使用する事により、 .Nm にあらゆるホストからの YPBINDPROC_SETDOM リクエストを受理させられます。 任意のユーザにより NIS クライアントのバインドがリセットされてしまうという セキュリティ上の危険がありますので、 このオプションは診断目的および短い期間のみ使用すべきです。 .It Fl ypsetme これは .Fl ypset フラグに似ていますが、YPBINDPROC_SETDOM リクエストがローカルホスト発の場合のみ 処理を許すという点のみ異なります。 .It Fl s .Nm を安全モードで実行します: root 以外により実行されている NIS サーバ (つまり、特権 TCP ポートを使用していないもの)へのバインドを拒否します。 .It Fl S Ar domainname,server1,server2,server3,... システム管理者は .Nm を特定のドメインおよび NIS サーバグループへロック出来ます。 10 サーバまで指定できます。 domain/server 指定においては、コンマの間には空白を入れてはなりません。 このオプションを指定する事により、 ある 1 つのドメインおよび指定されたサーバのうちの 1 つにのみに システムがバインドされる事を保証できます。 これは NIS サーバであり NIS クライアントでもあるシステムにて有用です: システムがバインド可能なマシンの限定を、 しばしばセキュリティホールであるとされる .Fl ypset や .Fl ypsetme といったオプションを指定する必要無く行えます。 指定されるサーバの有効なエントリが、ローカルの .Pa /etc/hosts ファイルに存在する必要があります。 ホスト名の代わりに IP アドレスを指定しても構いません。 .Nm が引数を解釈できない場合、 .Fl S フラグを無視し、通常の動作を行います。 .Pp .Nm は .Fl S フラグにより指定されるドメイン名を、システムデフォルトドメインと解釈 することに注意して下さい。 .It Fl m 制限されたモードのサーバリストからのサーバ選択において、 .Nm にブロードキャストではなく、 「メニーキャスト(many-cast)」を使用させます。 メニーキャストモードでは、制限されたリストで指定されるサーバの -YPPROC_DOMAIN_NONACK プロシジャに対して直接通信し、 +YPPROC_DOMAIN_NONACK 手続きに対して直接通信し、 最も速く返答したサーバに対してバインドします。 NIS サーバがローカルにない NIS クライアントにおいて、 このモードが有用です。 .Fl m フラグは上述の .Fl S フラグと組み合わせてのみ使用可能です ( .Fl S フラグと組み合わせない場合には効果がありません)。 .El .Sh 注釈 .Nm は 2 番目のドメインのバインドを連続して保持しようとはしません。 2 番目のドメインのサーバが ping に応答しない場合、 .Nm はあきらめる前に一度だけ新たなサーバを探してブロードキャストします。 クライアントプログラムがバインドされていないドメインを参照しようとした場合、 .Nm は再度ブロードキャストしようとします。 これとは対称的に、クライアントプログラムが参照していようといまいと、 .Nm はデフォルトドメインへのバインドを自動的に保持します。 .Sh 関連ファイル .Bl -tag -width /etc/rc.conf -compact .It Pa /var/yp/binding/[domainname].[version] NIS ドメインに関連したバインド情報を保持するファイル。 .It Pa /etc/rc.conf システムデフォルトのドメインと ypbind 開始オプションを指定する 設定ファイル。 .El .Sh 関連項目 .Xr domainname 1 , .Xr syslog 3 , .Xr yp 4 , .Xr ypserv 8 , .Xr ypset 8 .Sh 作者 .An Theo de Raadt Aq deraadt@fsa.ca