章 9章. NFS(Network File System)

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

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

9.1. 動作の仕組み

NFS は3つのバージョンが現在使用されています。NFSバージョン2(NFSv2)は旧バージョンで、広くサポートされています。NFSバージョン3(NFSv3)には可変サイズのファイル処理や向上されたエラー報告機能など多くの機能が追加されていますが、NFSv2のクライアントとの互換性は完全ではありません。NFSバージョン4(NFSv4)には Kerberos セキュリティが含まれており、ファイアーウォールとインターネットを通して機能し、portmapper を必要とせずに、ACL をサポートし、ステートフルな稼働をします。Red Hat Enterprise Linuxは、NFSv2 とNFSv3 と NFSv4 のクライアントをサポートします。NFS を介してファイルをマウントする時は、サーバーが NFSv4 に対応しているならば Red Hat Enterprise Linux はデフォルトで NFSv4 を使用します。

NFS の全てのバージョンで、NFSv4 が要求する IP ネットワーク上で動作するようなTCP(Transmission Control Protocol)を 使用することが出来ます。NFSv2 と NFSv3 は IP ネットワーク上で動作する UDP(User Datagram Protocol)を使用してクライアントとサーバー間のステートレス接続を提供することができます。

NFSv2 と NFSv3 を UDP で使用している場合、クライアントが共有ボリュームへのアクセス認可を得た後で NFS サーバーがクライアントにクッキーを送信するので、通常の状態ではステートレス UDP 接続はネットワーク通信を最低限にします。このクッキーはサーバー側にランダム値として保存されていて、クライアントからの RPC要求と共に渡されます。NFS サーバーはクライアントに影響することなく再起動が出来てクッキーは無変化です。しかし、UDP がステートレスな為、サーバーが不意に障害を起こした場合、UDP クライアントはサーバー用の要求でネットワークを充満し続けます。この理由で、TCP が NFS サーバーに接続する場合の推薦プロトコールです。

NFSv4 を使用している場合は、ステートフルな接続となり各種セキュリティレベルのKerberos ユーザーとグループ認証はオプションとして利用可能です。NFSv4 はportmapper、rpc.mountdrpc.lockd、及びrpc.statdがカーネルに導入された為、それらとの交信を持ちません。NFSv4 は良く知られた TCP ポート2049 上でリッスンします。

注記注記
 

Red Hat Enterprise Linux では TCP が NFS のデフォルトのトランスポートプロトコルとなっています。TCP を使用した NFS サーバ接続についての詳細はRed Hat Enterprise Linux システム管理ガイドネットワークファイルシステム(NFS) を参照ください。UDP は必要に応じて互換性の目的で使用できますが、広範囲使用には推薦できません。

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

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

警告警告
 

Kerberos 認証をサポートしていない NFSv2 又は NFSv3 を使用している場合、NFS マウントの特権はユーザーにではなく、クライアントホストに与えられます。その為、エキスポートされたファイルシステムはクライアントホスト上でアクセス許可を持つユーザーのいずれかによりアクセス可能となります。NFS 共有を設定している場合、どのホストが読み込/書き込み(rw)の許可を取得するのかに注意が必要です。

重要重要
 

NFS が Red Hat Enterprise Linux のデフォルトインストールで、ファイアーウォールを有効にした状態で機能するには、デフォルトの TCP ポート2049 を持つ IPTables を設定する必要があります。PTables の設定なしでは、NFS は正常に機能しません。

NFS 初期化スクリプトとrpc.nfsdプロセスにより、システム開始の時点でいずれかの指定ポートとのバインドが可能になります。しかし、これはポートが利用できないとか、他のデーモンと競合している場合はエラーを発生の可能性があります。

9.1.1. 必要なサーバー

Red Hat Enterprise Linux はカーネルレベルのサポートとデーモンプロセスを組み合わせて NFSファイル共有を提供します。NFSv2 と NFSv3 は リモート プロシジャ コール (RPC) を使用して クライアント、サーバー間の要求をエンコード/デコードします。Linux の RPC サービスはportmapサービスによって制御されています。NFSファイルシステムを共有またはマウントする場合、NFS のどのバージョンが実装されているかによって、以下のサービスが一緒に機能します:

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

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

  • portmap — Linex 向けの RPC サービスです。RPCサービスに対する要求に応答し、要求された RPC サービスへの接続を設定します。これは NFSv4 では使用しません。

次の RPC プロセスは NFSサービスを賄います:

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

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

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

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

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

  • rpc.idmapd — このプロセスは NFSv4 のクライアントとサーバーのアップコールを提供し、それがオンザワイヤー NFSv4 名(user@domain 形式の文字列)とローカルの UID 及び GID 間のマッピングをします。idmapd が NFSv4 で機能するには、/etc/idmapd.confを設定する必要があります。このサービスは NFSv4 の使用で要求されます。

  • rpc.svcgssd — このプロセスは NFSv4 での認証プロセス(Kerberos バージョン5)用のサーバートランスポート機構を提供します。このサービスは NFSv4 の使用で要求されます。

  • rpc.gssd — このプロセスは NFSv4 での認証プロセス(Kerberos バージョン5)用のクライアントトランスポート機構を提供します。このサービスは NFSv4 の使用で要求されます。

9.1.2. NFSとportmap

注記注記
 

以下のセクションは、下方互換用のportmapサービスを必要とする NFSv2 か NFSv3 実装のみに適応します。

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は、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 ページを参照ください。