第 9章. NFS(Network File System)

ネットワーク ファイル システム (NFS) を利用すると、 リモートホストからネットワーク上のファイルシステムを マウントできるため、ファイルシステムがローカルにマウントされているような感覚でやりとりすることができます。これにより、 システム管理者はネットワークの集中サーバーを使ってリソースを 一元管理することができます。

この章では、基本的なNFSの概念と補足情報について説明します。 NFSサーバーとクライアントソフトウェアの設定と操作についての詳細は Red Hat Enterprise Linux システム管理ガイドネットワーク ファイル システム(NFS)の章を参照してください。

9.1. 動作の仕組み

NFSは2つのバージョンが現在使用されています。NFSバージョン2(NFSv2)は旧バージョン で、 広くサポートされています。 NFSバージョン3(NFSv3)には可変サイズのファイル処理や向上されたエラー報告機能など 多くの機能が追加されていますが、 NFSv2のクライアントとの互換性は完全ではありません。 Red Hat Enterprise Linuxは、NFSv2と NFSv3の両方のクライアントをサポートします。 サーバーがNSFv3に対応している場合にNFSを介してファイルをマウントする時は、デフォルトでNFSv3が使用されます。

NFSv2はユーザー データ プロトコル (UDP) にてクライアントとサーバ間のstateless ネットワーク接続 を提供します。NFSv3はUDP、またはIPネットワーク上の トランスミッション コントロール プロトコル (TCP)を使用します。

クライアントが 共有ボリュームにアクセスすることを許可された後にNFSサーバーから クライアントにクッキーが送信される為、 通常状態のstateless UDP接続はネットワークトラフィックを最小限に抑えます。 このクッキーはサーバー側に格納される 乱数値で、 クライアントからのRPC要求と共に送信されます。 NFSサーバーはクライアントに影響を与えることなく 再起動でき、 クッキーはそのまま残ります。 ただ UDPはstatelessのため、サーバが突然停止した場合、 UDPクライアントはサーバーへ要求を送信し続けるので ネットワークが飽和状態になってしまいます。 そのため、NFSv3サーバーに接続する際はTCPの使用をお推めします。

注意注記
 

互換性の問題もあり、 Red Hat Enterprise LinuxではUDPがNFSのデフォルトのトランスポート プロトコルとなっています。 .TCP使用でのNFSサーバ接続についての詳細は Red Hat Enterprise Linux システム管理ガイドネットワークファイルシステム (NFS) を参照ください。

NFSは、クライアントシステムが共有NFSリソースをマウントしようとする時にのみ、 認証を実行します。NFSサービスへのアクセスを制限するにはTCPラッパーを使用します。 TCPラッパーは、/etc/hosts.allowファイルと /etc/hosts.deny ファイルを読み込み、 ある特定のクライアントやネットワークによるNFSサーバーへのアクセスの許可/拒否を判定します。 TCPラッパーによるアクセス制御の設定についての詳細は第16章 を参照ください。

TCPラッパーによってクライアントがアクセスを認可された後は、NFSサーバーがその設定ファイル /etc/exportsを参照して、エクスポート対象ファイルシステムにこのクライアントがアクセスできるか判断します。 アクセスが許可されると、 ユーザーによるファイルやディレクトリの操作すべてが可能になります。

警告警告
 

NFSのマウント特権はユーザーではなく、クライアント ホストに付与されます。 そのため、アクセス権のあるクライアント ホストの全ユーザーがエクスポート対象ファイルシステムにアクセスすることができます。 NFS共有を設定する際は、読み取り/書き込み権限をどのホストに与えるか慎重に設定してください。

9.1.1. 必要なサーバー

Red Hat Enterprise Linuxはカーネルレベルのサポートと常時稼働しているデーモンプロセスを 組み合わせてNFSファイル共有機能を提供します。 NFSは リモート プロシジャ コール (RPC) を使用して クライアント、サーバー間の要求をルーティングします。 LinuxのRPCサービスはportmapサービスによって制御されています。 NFSファイルシステムを共有またはマウントする場合、次のサービスが一緒に作動します。

  • nfs — 共有されたNFSファイルシステムのサービス要求に適切なRPCプロセスを開始します。

  • nfslock — 適切なPRCプロセスを開始することにより サーバーにあるファイルのロックをNFSクライアントに許可するオプションサービスです。

  • portmap — Linex向けのRPCサービスです。RPCサービスに対する要求 に応答し、要求のあったRPCサービスへの接続を設定します。

次のRPCプロセスは水面下で一緒に作動し、NFSサービスを円滑にします。

  • rpc.mountd — NFSクライアントからマウント要求を受け取り、 要求されたファイルシステムが現在エクスポートされているか確認します。 このプロセスはnfsサービスによって自動的に開始されるため、 ユーザー設定の必要はありません。

  • rpc.nfsd — このプロセスは NFSサーバーそのものです。 Linuxカーネルと一緒に動作して、NFSクライアント接続時のサーバースレッド追加など、 NFSクライアントの動的要求に対応します。 このプロセスはnfsサービスに該当します。

  • rpc.lockd — サーバーにあるファイルの ロックをNFSクライアントに許可するオプションプロセスです。 このプロセスは nfslockサービスに該当します。

  • rpc.statd — このプロセスはネットワーク ステータス モニター(NSM) RPCプロトコルを実装し、 NFSサーバーが正常停止されずに再起動されたときにNFSクライアントに通知します。 このプロセスはnfslockサービスによって自動的に開始されるため、 ユーザー設定の必要はありません。

  • rpc.rquotad — このプロセスはリモートユーザーに対して ユーザーのquota 情報を提供します。このプロセスはnfsサービスによって自動的に開始されるので、 ユーザー設定は必要ありません。

9.1.2. NFSとportmap

Linuxのportmapサービスは RPC要求を正しいサービスにマップします。 RPCプロセスは開始したことをportmapに通知し、 監視しているポート番号とサービスする予定のRPCプログラム番号を提供します。 その後、クライアントシステムが特定のRPCプログラム番号を持つサーバー上の portmapに連絡します。そしてportmapは、 目的のサービスと通信をする為に、クライアントを正しい ポート番号にリダイレクトします。

受信するクライアント要求への接続全てに関して、 RPCベースのサービスはportmapに依存しています。そのため これらのサービスが開始される前にportmapを 利用可能状態にしてください。

portmapサービスはTCPラッパーのアクセス制御を使用します。portmapのアクセス制御ルールは RPCベースのサービスすべてに影響します。 各NFS RPCデーモンのアクセス制御ルールを指定することも可能です。 これらルールの構文に関する情報はrpc.mountdrpc.statd のmanページを参照ください。

9.1.2.1. NFSとportmapのトラブルシューティング

portmapは、RPCRPCサービスとの調整と RPCサービス間の通信で使用されるポート番号の調整を行なうので トラブルシューティングの時にportmapを使用して現在のRPCサービスのステータスを確認すると便利です。rpcinfoコマンドは、各RPCベースのサービスとポート番号、 RPCプログラム番号、バージョン、IPプロトコルタイプ (TCP 又は UDP)を共に表示します。

適正なNFS RPCベースのサービスがportmapに対して有効になっているかを確認するには、次のコマンドをrootとして実行してください。

rpcinfo -p

このコマンドの出力例は次の通りです。

   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100021    1   udp  32774  nlockmgr
    100021    3   udp  32774  nlockmgr
    100021    4   udp  32774  nlockmgr
    100021    1   tcp  34437  nlockmgr
    100021    3   tcp  34437  nlockmgr
    100021    4   tcp  34437  nlockmgr
    100011    1   udp    819  rquotad
    100011    2   udp    819  rquotad
    100011    1   tcp    822  rquotad
    100011    2   tcp    822  rquotad
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100005    1   udp    836  mountd
    100005    1   tcp    839  mountd
    100005    2   udp    836  mountd
    100005    2   tcp    839  mountd
    100005    3   udp    836  mountd
    100005    3   tcp    839  mountd

この出力から正しいNFSサービスが実行されていることが分ります。 NFSの1つが正常に起動していない場合、 portmap はそのサービスに対するクライアントからのRPC要求を正しいポートにマップすることができません。 NFSがrpcinfo出力に存在しない場合の多くはNFSを再起動することによりportmapによって正しく登録され、 作動し始めます。 NFS起動の命令については、項9.2を参照してください。

他にもrpcinfoコマンドの便利なオプションがありますので、 rpcinfo man ページを参照ください。