Scroll to navigation

NFSD(8) System Manager's Manual NFSD(8)

名前

nfsd - NFS サービスデーモン

書式

/usr/sbin/rpc.nfsd [ -f exports-file ] [ -d facility ] [ -P port ] [ -R dirname ] [ -Fhlnprstv ] [ --debug facility ] [ --exports-file=file ] [ --foreground ] [ --help ] [ --allow-non-root ] [ --re-export ] [ --public-root dirname ] [ --no-spoof-trace ] [ --port port ] [ --log-transfers ] [ --version ] [ numcopies ]

説明

nfsd プログラムは NFS サービスデーモンであり、クライアントからの ファイルシステム要求を取り扱う。 他のシステムと異なり、この nfsd は普通のユーザーレベルプロセスとして動作する。 またこのサーバーは、ファイルシステムの物理的な境界に制限されず、 ファイル階層すべてをマウントさせる点でも、他のシステムとは異なっている。 この実装では、サーバーマシンのファイルシステム階層に対して、 クライアントによる read-only アクセス、read-write アクセスのいずれも 行えるようになっている。

mountd プログラムは、補助的な役割をするユーザーレベルの mount デーモンを起動する。

inetd からの起動

通常 nfsd はシステムのブート時に起動されるが、 inetd から起動することもできる。 それには以下の 2 行を /etc/inetd.conf に追加する。

nfs/2 dgram  rpc/udp wait root /usr/sbin/rpc.nfsd rpc.nfsd
nfs/2 stream rpc/tcp wait root /usr/sbin/rpc.nfsd rpc.nfsd

ientd から起動した場合には、適当な期間に動作要求がないと nfsd は終了する。

オプション

このオプションはエクスポートファイルを指定する。 エクスポートファイルには、このサーバーがサービスを提供するクライアント と、それぞれのマウントに対して適用されるパラメータがリストされている (exports (5) を見よ)。 デフォルトのエクスポートファイルは /etc/exports である。
それぞれのトランザクションに対する詳細な内容を標準エラー出力にログ表示する。 facility に指定できるのは、 call (すべてのコールを記録)、 auth (クライアントの認証)、 fhcache (ファイルハンドルのキャッシュ操作)、 rmtab (/etc/rmtab の操作) である。 デフォルトでは、デーモンがフォアグラウンドで実行されなければ、 ログ出力は syslogd に送られる。
通常 nfsd は端末から分離 (detach) するが、このオプションが与えられると分離しない。 このとき debug 情報は標準エラー出力に表示される。
ヘルプの短い要約を表示する。
NFS サーバーから取り出されたファイル、あるいはサーバへ書き込まれた ファイルをすべてログに書き込もうとする。 これは主として anonymous NFS エクスポートに有用で、 ある種の FTP デーモンによってサポートしている xferlog をまねするためのものである。 ファイルが書き込み・取り出しされるたび、 syslog デーモンに一行の情報が送られ、 そこにはクライアントの IP アドレスとファイル名が書き込まれる。 この転送記録のログレベルは daemon.info である。
IP の特権ポート以外から来たマウント要求も許可する。 NFS クライアントの古い実装では、この指定が必要な場合がある。 逆に新しい実装には、特権ポートのチェックを信頼しないものがある。 このチェックはホスト単位で外すこともできる。 /etc/exports のエクスポートオプションに insecure を指定すればよい。
nfsdportnum ポートを監視するようにさせる。 デフォルトでは、 mountd/etc/services で指定されている nfs/udp ポートを監視する (あるいはこれが指定されていないと 2049 番のポートを監視する)。
サーバを「無制限 (promiscuous)」モードにする。 ネットワーク上のすべてのホストに対してサービスを提供する。
インポートしたファイルシステムの再エクスポートを許す。 これにより、マシンは NFS や Novel サーバの中継器となる。 ループバックマウントを再エクスポートするときには特に注意すること。 マウントポイントに再入すると、クライアントファイルシステムのコードと サーバーはデッドロックしてしまう。
(Linux では) 以下も注意しておきたい。 nfsd はファイルシステムのメジャーデバイス番号を見て、 それがリモートのボリュームであるかどうかを判別する。 もしメジャー番号が 0 でなければ、 nfsd はファイルシステムがローカルなものであると判断する。 しかし、リモートファイル以外にもメジャー番号 0 を利用するものがある。 procfs である。 NFS ファイルシステムを再エクスポートすることにした場合、 ファイルシステムの root をエクスポートした場合には /proc も含まれてしまうことに注意すること。 これはセキュリティ上の問題となることがある。 できればこのような状況は避けるべきである。
デフォルトでは、 nfsd は権限のないクライアントからの全てのアクセスをログに記録する。 このオプションを使うと、 exports ファイルに明示的にリストされている全てのホストについて、 このような成りすまし行為をログに記録しない。
ディレクトリを public なファイルハンドルと関連づける。 以下の WebNFS のセクションを参照のこと。
プログラムの現在のバージョン番号を表示する。
これは実験的な機能であり、 nfsd のいくつかのインスタンスを並行動作させるものである。 numcopies に 1 以上の値を与えると、 nfsd は指定した値の回数だけ fork する。 しかし、サーバーはファイルハンドルキャッシュを共有しないので、 ある種のファイル操作は不可能となる。
このため、 nfsd はこのオプションと共に起動されると、すべての書き込み操作を拒否する。 この制限は大きなものではあるが、 それでも公開 FTP 領域や Usenet News のスプールをエクスポートする場合には、 この機能は依然有用であろう。

WebNFS のサポート

WebNFS は Sun によって開発された通常の NFS プロトコルを拡張したもので、 インターネットを通してのファイル取得に特に適している。 また、特に Web ブラウザを通しての利用を意図して作成された。

このコンセプトの中心にあるのは、 「public なファイルハンドル」と呼ばれるものである。 これは特殊な NFS ファイルハンドルで、 これを用いると NFS クライアント (つまりブラウザ) は MOUNT プロトコルを利用せずにファイルを取得できるようになる。 このファイルハンドルはサーバーマシンのディレクトリに 関連づけられていなければならず、 またこのファイルハンドルによるファイル名の評価は、 そのディレクトリからの相対パスとして行われることになる。 これが public root ディレクトリ であり、 --public-root オプションを用いて指定できる。 例えば Web サーバなら、ドキュメントの root (例えば /home/httpd/) を この public root にすると良いだろう。 URL nfs://foo.bar.edu/zappa.html を要求した Web ブラウザは、ファイル /home/httpd/zappa.html を与えられることになる。 メンテナンスを容易にするため、public root ディレクトリの指定は、 exports で特殊なエントリを用いることによっても可能になっている (詳細は exports(5) を参照のこと)。

public root を指定しても、これが自動的にエクスポートされるわけではない。 このディレクトリを実際にアクセス可能にするためには、依然 /etc/exports で明示する必要がある。 WebNFS クライアントにデータをエクスポートする際に有用なオプションのセットは、 ro,all_squash,insecure である。 これらのフラグの詳細については exports(5) を参照してほしい。

WebNFS クライアントは、 public root ディレクトリ下に置かれていないファイルに関しても、 それが自分むけにエクスポートされていれば アクセスできてしまうことにも注意してほしい。 特に /home/ftp を Web サーバのホームディレクトリと共に外界にエクスポートしてしまうと、 Web クライアントは FTP ファイルに nfs://foo.bar.edu/../ftp/README のようにアクセスできてしまう。 もちろんエクスポートされていないクライアントに関しては、 これはあてはまらない。

シグナル

nfsd は以下のシグナルを認識する:

このシグナルを受けると、 nfsd は export ファイルを再読み込みし、 ファイルハンドルのキャッシュをフラッシュする。 public root が指定されていると、このシグナルによって public ディレクトリ名に関連づけられたファイルハンドルが再生成される (リムーバブルなファイルシステムをエクスポートする場合に便利)。
デバッグオプションを指定して nfsd 起動した場合、このシグナルを与えると デバッグ情報の生成をオン・オフできる。
-DCALL_PROFILING オプションを指定してコンパイルした場合、 SIGIOT を nfsd に送ると一回の NFS 操作あたりの平均実行時間が /tmp/nfsd.profile にダンプされる。

バグ

nfsd は、ディレクトリのファイル名が問い合わされたときに index.html ファイルを提供する機能をサポートしていない。 これは RFC の要求にはないので、実際にはバグではなく機能の欠如である。

--log-transfers オプションは必ずしも正しいログを残さない。 なぜなら UNIX ファイルシステムの open() および close() コールに対応するものが NFS プロトコルには存在しないからである。 代わりに nfsd は、READ または WRITE 要求のオフセット 0 に遭遇するたびに転送記録を書き出す。

関連項目

exports(5), mountd(8), ugidd(8C)

著者

Mark Shand がオリジナルの unfsd を書いた。 Don Becker は unfsd を拡張し、認証機能と read-write 機能を サポートして、これを hnfs と名づけた。 Rick Sladkey はホストマッチ、showmount -e のサポート、 mountd の認証、inetd のサポート、移植性の向上や設定に 必要なコードなどを追加した。 Olaf Kirch は一つ二つのセキュリティホールと、その他のバグを 修正し、uid マッピングとその他いくつかの機能を追加した。

11 August 1997