rpc.mountd、rpc.statd、lockd などの別の RPC サービスを必要とする場合があります。しかしながら、これらの RPC サービスはデフォルトで (portmapper の割り当てた) ランダムなポートを使うため、対象のサービスに関するトラフィックをフィルタすることが難しくなります。Falcot Corp 管理者はこの問題に対する次善策を見つけました。以下のようなものです。
rpc.mountd と rpc.statd はユーザ空間プログラムとして実装されており、それぞれ /etc/init.d/nfs-kernel-server と /etc/init.d/nfs-common を使って開始されます。どちらのプログラムも、ポートを強制するための設定オプションを備えています; 常に適用する設定オプションを変更するには、/etc/default/nfs-kernel-server と /etc/default/nfs-common を編集します。
例11.22 /etc/default/nfs-kernel-server ファイル
# Number of servers to start up RPCNFSDCOUNT=8 # Runtime priority of server (see nice(1)) RPCNFSDPRIORITY=0 # Options for rpc.mountd. # If you have a port-based firewall, you might want to set up # a fixed port here using the --port option. For more information, # see rpc.mountd(8) or http://wiki.debian.org/SecuringNFS # To disable NFSv4 on the server, specify '--no-nfs-version 4' here RPCMOUNTDOPTS="--manage-gids --port 2048" # Do you want to start the svcgssd daemon? It is only required for Kerberos # exports. Valid alternatives are "yes" and "no"; the default is "no". NEED_SVCGSSD= # Options for rpc.svcgssd. RPCSVCGSSDOPTS=
例11.23 /etc/default/nfs-common ファイル
# If you do not set values for the NEED_ options, they will be attempted # autodetected; this should be sufficient for most people. Valid alternatives # for the NEED_ options are "yes" and "no". # Do you want to start the statd daemon? It is not needed for NFSv4. NEED_STATD= # Options for rpc.statd. # Should rpc.statd listen on a specific port? This is especially useful # when you have a port-based firewall. To use a fixed port, set this # this variable to a statd argument like: "--port 4000 --outgoing-port 4001". # For more information, see rpc.statd(8) or http://wiki.debian.org/SecuringNFS STATDOPTS="--port 2046 --outgoing-port 2047" # Do you want to start the idmapd daemon? It is only needed for NFSv4. NEED_IDMAPD= # Do you want to start the gssd daemon? It is required for Kerberos mounts. NEED_GSSD=
rpc.mountd はポート番号 2048 番を使うようになります; rpc.statd はポート番号 2046 番をリッスンし、外向きの接続にポート番号 2047 番を使うようになります。
lockd サービスはカーネルスレッド (軽量プロセス) によって取り扱われます; この機能は Debian カーネルのモジュールとしてビルドされています。このモジュールは常に同じポートを使うための 2 種類のオプション nlm_udpport と nlm_tcpport を取ります。これらのオプションを系統的に使うには、以下のような /etc/modprobe.d/lockd ファイルが必要です:
/etc/exports には、ネットワークを介して利用可能にする (エクスポートされる) ディレクトリをリストします。各 NFS 共有について、リストされたマシンだけがアクセスを許可されます。よりきめ細かなアクセス制御をするには、幾つかのオプションを使います。/etc/exports ファイルの構文はとても単純です:
/directory/to/share machine1(option1,option2,...) machine2(...) ...
*.falcot.com などの構文を使うか 192.168.0.0/255.255.255.0 や 192.168.0.0/24 などの IP アドレス範囲を使います。
ro オプションを使えば) 読み込み専用として利用可能にされます。rw オプションを使えば読み書きアクセスが許可されます。典型的に NFS クライアントは root だけが使えるポート (言い換えれば、1024 番よりも低い番号のポート) から接続します; この制限を無くすには、insecure オプションを使います (secure オプションは暗黙的に有効化されていますが、明示する必要があればオプションを明示することも可能です)。
sync オプション) 後です; これを無効化するには、async オプションを使います。非同期書き込みを使うことで、性能はほんの少し向上しますが、信頼性は低下します。なぜなら、書き込み確認とディスクへの実際の書き込みの間にサーバがクラッシュした場合に、データを損失する危険性があるからです。デフォルト値が変更されたのは最近なので (NFS バージョンによってデフォルト値が違うので) 、明確に設定することを推奨します。
nobody ユーザからの問い合わせとして処理します。この挙動は root_squash オプションを使った場合の挙動に対応し、このオプションはデフォルトで有効化されています。no_root_squash オプションを使うことで、この挙動は無効化されますが、このオプションは危険であり管理された環境の中でのみ使われるべきです。anonuid=uid と anongid=gid オプションを使うことで、UID/GID 65534 (これは nobody ユーザと nogroup グループに対応します) の代わりに使う別の偽ユーザを指定することが可能です。
mount コマンドと /etc/fstab ファイルに幾つかの調整を行うパラメータを含める必要があります。
例11.25 mount コマンドを用いた手作業によるマウント
#mount -t nfs -o rw,nosuid arrakis.internal.falcot.com:/srv/shared /shared
arrakis サーバの /srv/shared/ NFS ディレクトリがローカルの /shared/ ディレクトリにマウントされます。読み書きアクセスを要求しています (このため rw パラメータを追加しています)。nosuid オプションは一種の保護手段で、共有ディレクトリに保存されているプログラムに設定された setuid または setgid ビットを無効化します。文書を保存するだけの目的で NFS 共有を使っている場合、noexec オプションを追加することを推奨します。これは共有ディレクトリに含まれるプログラムの実行を避けるものです。