Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

8.6. NFS サーバーの設定

NFS サーバーでエクスポートを設定するには、2 つの方法があります。
  • NFS 設定ファイル (/etc/exports など)の手動編集
  • コマンドラインから、コマンド exportfsを使用する。

8.6.1. /etc/exports 設定ファイル

/etc/exports ファイルは、リモートホストにどのファイルシステムをエクスポートするかを制御し、オプションを指定します。以下の構文ルールに従います。
  • 空白行は無視する。
  • コメントを追加するには、ハッシュ記号(#)で始める。
  • 長い行は、バックスラッシュ(\)で改行することできます。
  • エクスポートするファイルシステムは、それぞれ 1 行で指定する。
  • 許可するホストの一覧は、エクスポートするファイルシステムの後に空白文字を追加し、その後に追加する。
  • 各ホストのオプションは、ホスト識別子の直後に括弧を追加し、その中に指定する。ホストと最初の括弧の間には空白を入れない。
エクスポートするファイルシステムの各エントリーは、以下のように指定します。
export host(options)
上記の構造では、以下の変数を使用します。
export
エクスポートするディレクトリー
host
エクスポートを共有するホストまたはネットワーク
options
ホストに使用されるオプション
各ホストに特定のオプションを付けて、複数のホストを指定することができます。そのためには、以下のように、各ホスト名の後にそれぞれのオプション(括弧)を、スペースで区切った一覧と同じ行にリストします。
export host1(options1) host2(options2) host3(options3)
/etc/exports ファイルは、最も単純な形式では、以下の例のように、エクスポートされたディレクトリーと、そのディレクトリーへのアクセスが許可されているホストのみを指定します。

例8.6 /etc/exports ファイル

/exported/directory bob.example.com
ここでは、bob.example.com は NFS サーバーから /exported/directory/ をマウントできます。この例ではオプションが指定されていないため、NFS はデフォルト設定を使用します
デフォルト設定は次のとおりです。
ro
エクスポートするファイルシステムは読み取り専用です。リモートホストは、ファイルシステムで共有されているデータを変更できません。ホストがファイルシステムに変更を加えできるようにするには (読み取り/書き込み)、rw オプションを指定します。
sync
NFS サーバーは、以前の要求で発生した変更がディスクに書き込まれるまで、要求に応答しません。代わりに非同期書き込みを有効にするには、async オプションを指定します。
wdelay
NFS サーバーは、別の書き込み要求が差しくなると判断すると、ディスクへの書き込みを遅らせます。これにより、複数の書き込みコマンドによってディスクにアクセスする回数を減らすことができるため、書き込みのオーバーヘッドが削減されるため、パフォーマンスが向上します。これを無効にするには、no_wdelay を指定します。no_wdelay は、デフォルトの sync オプションが指定されている場合に限り使用できます。
root_squash
(ローカルからではなく) リモートから接続している root ユーザーが root 権限を持つことを阻止します。代わりに、NFS サーバーにより、ユーザー ID nfsnobody が割り当てられます。これにより、リモート root ユーザーの電源を最も低いローカルユーザーまで下げて(squash)、リモートサーバーへの書き込みができなくなることになります。root squashing を無効にするには no_root_squash を指定します。
(root を含む) すべてのリモートユーザーの権限を下げるには、all_squash を使用します。特定ホストのリモートユーザーに、NFS サーバーが割り当てるユーザー ID とグループ ID を指定するには、anonuid オプションと anongid オプションを以下のように使用します。
export host(anonuid=uid,anongid=gid)
uidgid は、それぞれユーザー ID とグループ ID の番号です。anonuid オプションと an ongid オプションにより、共有するリモート NFS ユーザー用に、特別なユーザーアカウントおよびグループアカウントを作成できます。
デフォルトでは、アクセス制御リスト (ACL)は、Red Hat Enterprise Linux の NFS で対応しています。この機能を無効にするには、ファイルシステムをエクスポートする際に no_acl オプションを指定します。
エクスポートするすべてのファイルシステムの各デフォルトは、明示的に上書きする必要があります。たとえば、rw オプションを指定しないと、エクスポートするファイルシステムが読み取り専用として共有されます。以下は、/etc/exports の例になりますが、ここでは 2 つのデフォルトオプションを上書きします。
/another/exported/directory 192.168.0.3(rw,async)
この例の 192.168.0.3 では、/another/exported/directory/ の読み書きをマウントでき、ディスクへの書き込みはすべて非同期になります。エクスポートオプションの詳細は、man exportfs を参照してください
デフォルト値が指定されていない他のオプションが利用できます。これらには、サブツリーチェックを無効にし、セキュアでないポートからのアクセスを許可し、セキュアでないファイルロックを許可する機能が含まれます(初期の NFS クライアントの実装に類似)。あまり使用されるオプションの詳細は、man export を参照してください
重要
/etc/exports ファイルの形式では、特に空白文字の使用が非常に厳しく扱われます。ホストからエクスポートするファイルシステムの間、そしてホスト同士の間には、必ず空白文字を挿入してください。また、それ以外の場所 (コメント行を除く) には、空白文字を追加しないでください。
たとえば、以下の 2 つの行は意味が異なります。
/home bob.example.com(rw)
/home bob.example.com (rw)
最初の行では、/home ディレクトリーの bob.example.com への読み取り/書き込みアクセスのみが許可されます。2 番目の行では、bob.example.com からのユーザーにディレクトリーを読み取り専用(デフォルト)としてマウントすることを許可し、その他のユーザーに読み取り/書き込みでマウントすることができます。

8.6.2. exportfs コマンド

NFS でリモートユーザーにエクスポートするすべてのファイルシステムと、そのファイルシステムのアクセスレベルは、/etc/exports ファイルに一覧表示されます。nfs サービスが起動すると、/usr/sbin/exportfs コマンドがこのファイルを起動して読み取り、実際のマウントプロセス用に rpc.mountd (NFSv3) の制御を渡します。その後、ファイルシステムがリモートユーザーが利用できるようになります
手動で発行すると、/usr/sbin/exportfs コマンドを使用すると、root ユーザーは NFS サービスを再起動せずにディレクトリーを選択してエクスポートまたはアンエクスポートすることができます。適切なオプションを指定すると、/usr/sbin/exportfs コマンドは、エクスポートしたファイルシステムを /var/lib/nfs/xtab に書き込みます。rpc.mountd は、ファイルシステムへのアクセス権を決定する際に xtab ファイルを参照するため、エクスポートしたファイルシステムのリストの変更が直ちに反映されます。
以下は、/usr/sbin/exportfs で利用可能な一般的なオプションの一覧です。
-r
/etc/exports に記載されているすべてのディレクトリーが、/var/ lib/nfs/etab に新しいエクスポート一覧を作成して、すべてエクスポートされますこのオプションにより、/etc/exports に行った変更でエクスポート一覧が更新されます。
-a
/usr/sbin/exportfs に渡されるその他のオプションに応じて、すべてのディレクトリーをエクスポートするかどうかを判断します。その他のオプションが指定されていないと、/usr/sbin/exportfs は、/etc/exports で指定されたすべてのファイルシステムをエクスポートします
-o file-systems
/etc/exports 内に記載されていない、エクスポートするディレクトリーを指定します。file-systems を、エクスポートされる追加のファイルシステムに置き換えます。これらのファイルシステムは、/etc/exports で指定されたものと同じフォーマットでなければなりません。このオプションは、多くの場合、エクスポートされるファイルシステムの一覧に永続的に追加する前に、エクスポートされるファイルシステムをテストするために使用されます。/etc/exports /etc/exports 設定ファイル」
-i
/etc/exports を無視します。コマンドラインで指定されたオプションのみが、エクスポート用ファイルシステムの定義に使用されます。
-u
すべての共有ディレクトリーをエクスポートしなくなります。/usr/sbin/exportfs -ua コマンドは、すべての NFS デーモンを維持しながら NFS ファイル共有を一時停止します。NFS 共有を再度有効にするには、exportfs -r を使用します。
-v
詳細な表示。exportfs コマンドの実行時に、エクスポートまたは非エクスポートのファイルシステムの詳細が表示されます。
exportfs コマンドにオプションが渡されていない場合は、現在エクスポートされているファイルシステムの一覧を表示します。exportfs コマンドの詳細は、man exportfs を参照してください

8.6.2.1. NFSv4 での exportfs の使用

Red Hat Enterprise Linux 7 では、NFSv4 のエクスポートを、同じパスを使用する NFSv3 および NFSv4 クライアントで自動的に利用できるため、NFSv4 エクスポートを設定する必要はありません。これは以前のバージョンでは該当しませんでした。
クライアントが NFSv4 を使用しないようにするには、/etc/sysconfig/nfs に RPCNFSDARGS= -N 4 を設定して無効にします

8.6.3. ファイアウォール環境で NFS の実行

NFS には rpcbind が必要です。これは RPC サービスのポートを動的に割り当て、ファイアウォールルールの設定に問題が発生する可能性があります。クライアントがファイアウォールの背後で NFS 共有にアクセスできるようにするには、/etc/sysconfig/nfs ファイルを編集して、RPC サービスが実行されるポートを設定します。クライアントがファイアウォールを介して RPC 「ファイアウォールからの RPC クォータへのアクセス」
デフォルトでは、すべてのシステムに /etc/sysconfig/nfs ファイルが存在しません。/etc/sysconfig/nfs が存在しない場合は作成し、以下を指定します。
RPCMOUNTDOPTS="-p port"
これにより、「-p port" to the rpc.mount command line: rpc.mount -p port 」が追加されます。
thenlockmgr サービスが使用するポートを指定するには、/etc/modprobe.d/lockd.conf ファイルの nlm_tcpport および nlm_udpport オプションのポート番号を設定します。
NFS が起動しない場合は、/var/log/messages を確認してください。通常、すでに使用中のポート番号を指定すると、NFS が起動しません。/etc/sysconfig/nfs の編集後に、Red Hat Enterprise Linux 7.2 以前で新しい値を有効にするために nfs-config サービスを再起動します。
#  systemctl restart nfs-config
次に、NFS サーバーを再起動します。
#  systemctl restart nfs-server
rpcinfo -p を実行して、変更が有効であることを確認します。
注記
NFSv4.0 コールバックがファイアウォールセット /proc/sys/fs/nfs/nfs_callback_tcpport を通過し、サーバーがクライアントのそのポートに接続できるようにします。
このプロセスは NFSv4.1 以降には必要ありません。純粋な NFSv4 環境では、mountd、statd、および lockd の他のポートは必要ありません。

8.6.3.1. NFS エクスポートの検出

NFS サーバーをエクスポートするファイルシステムを検出する方法は 2 つあります。
  • NFSv3 に対応しているサーバーで、showmount コマンドを使用します。
    $ showmount -e myserver
    Export list for mysever
    /exports/foo
    /exports/bar
  • NFSv4 に対応しているサーバーで、root ディレクトリーをマウントして確認します。
    # mount myserver:/ /mnt/
    # cd /mnt/
    exports
    # ls exports
    foo
    bar
NFSv4 と NFSv3 の両方に対応するサーバーでは、上記の方法はいずれも有効で、同じ結果となります。
注記
古い NFS サーバーにある Red Hat Enterprise Linux 6 の構成方法によっては、異なるパスにある NFSv4 クライアントにファイルシステムをエクスポートすることが可能です。これらのサーバーは、デフォルトで NFSv4 を有効にしないため、これは問題とはなりません。

8.6.4. ファイアウォールからの RPC クォータへのアクセス

ディスククォータを使用するファイルシステムをエクスポートする場合は、クォータ RPC (Remote Procedure Call) サービスを使用して、NFS クライアントにディスククォータデータを提供できます。

手順8.1 ファイアウォールで RPC クォータへのアクセスが可能になる

  1. rpc-rquotad サービスを有効にするには、以下のコマンドを使用します。
    # systemctl enable rpc-rquotad 
  2. rpc-rquotad サービスを起動するには、以下のコマンドを使用します。
    # systemctl start rpc-rquotad 
    rpc-rquotad が有効になっている場合は、nfs-server サービスが起動した後に自動的に起動されます。
  3. ファイアウォールの内側で、クォータの RPC サービスにアクセスできるようにするには、UDP または TCP port875 を開放する必要があります。デフォルトのポート番号は /etc/services ファイルで定義されます。
    デフォルトのポート番号は、/etc/sysconfig/rpc-rquotad ファイルの RPCRQUOTADOPTS 変数に -p port-number を追加することで上書きできます。
  4. rpc-rquotad を再起動して、/etc/sysconfig/rpc-rquotad ファイルの変更を反映します。
    # systemctl restart rpc-rquotad

リモートホストからのクォータ設定

デフォルトでは、クォータはリモートホストでのみ読み取りできます。クォータの設定を許可するには、/etc/sysconfig/rpc-rquotad ファイルの RPCRQUOTADOPTS 変数に -S オプションを追加します。
rpc-rquotad を再起動して、/etc/sysconfig/rpc-rquotad ファイルの変更を反映します。
# systemctl restart rpc-rquotad

8.6.5. ホスト名の形式

ホストは以下の形式になります。
単独マシン
完全修飾型ドメイン名 (サーバーで解決可能な形式)、ホスト名 (サーバーで解決可能な形式)、あるいは IP アドレス
ワイルドカードで指定された一連のマシン
* または ? 文字を使用して文字列の一致を指定します。ワイルドカードは IP アドレスでは使用しないでください。ただし、逆引き DNS ルックアップが失敗した場合は、誤って動作する可能性があります。完全修飾ドメイン名でワイルドカードを指定する場合、ドット(.)はワイルドカードに含まれません。たとえば、*.example.com には one.example.com が含まれますが、include one.two.example.com は含まれません。
IP ネットワーク
a.b.c.d/z を使用します。a.b.c.d はネットワークで、z がネットマスクのビット数(例: 192.168.0.0/24)に置き換えます。別の可能な形式は a.b.c.d/netmask で、a.b.c.d がネットワークで、ネットマスクがネットマスクになります (例: 192.168.100.8/255.255.255.0)。
netgroups
@group-name の形式を使用します。group-name は NIS netgroup 名です。

8.6.6. NFS over RDMA の有効化(NFSoRDMA)

Red Hat Enterprise Linux 7 では、RDMA に対応するハードウェアがあると、RDMA(remote direct memory access)サービスが自動的に機能します。
RDMA で NFS を有効にするには、以下を実行します。
  1. rdma および rdma-core パッケージをインストールします。
    /etc/rdma/rdma.conf ファイルには、デフォルトで XPRTRDMA_LOAD=yes を設定する行が含まれています。これは、rdma サービスが NFSoRDMA クライアントモジュールを読み込むように要求します
  2. NFSoRDMA サーバーモジュールの自動読み込みを有効にするには 、/etc/rdma/rdma.conf の新しい行に SVCRDMA_LOAD=yes を追加します。
    RPCNFSDARGS="--rdma=20049" /etc/sysconfig/nfs ファイルで、NFSoRDMA サービスがクライアントをリッスンするポート番号を指定します。RFC 5667 は、RDMA 経由で NFSv4 サービスを提供する場合、サーバーは 20049 ポートをリッスンする必要があることを指定します。
  3. /etc/rdma/rdma.conf ファイルを編集して、nfs サービスを再起動します。
    # systemctl restart nfs
    以前のカーネルバージョンでは、/etc/rdma/rdma.conf を編集して変更を反映する必要があります。

8.6.7. NFSv4 専用サーバーの設定

デフォルトでは、NFS サーバーは Red Hat Enterprise Linux 7 の NFSv2、NFSv3、および NFSv4 の接続に対応します。ただし、バージョン 4.0 以降の NFS のみに対応するように NFS を設定することもできます。NFSv4 では rpcbind サービスがネットワークをリッスンする必要がないため、これにより、システムで開いているポートと実行中のサービスの数が最小限に抑えられます。
NFS サーバーが NFSv4 専用として設定されていると、NFSv2 または NFSv3 を使用して共有をマウントしようとするクライアントは、次のようなエラーでマウントに失敗します。
Requested NFS version or transport protocol is not supported.

手順8.2 NFSv4 専用サーバーの設定

NFS バージョン 4.0 以降のみに対応するように NFS サーバーを設定するには、以下を実行します。
  1. 以下の行を /etc/sysconfig/nfs 設定ファイルに追加して、NFSv2、NFSv3、および UDP を無効にします。
    RPCNFSDARGS="-N 2 -N 3 -U"
    
  2. 必要に応じて、RPCBINDMOUNT、および NSM のプロトコル呼び出しのリッスンを無効にします。これは NFSv4 専用の場合は不要です。
    これらのオプションを無効にすると、次のような影響があります。
    • NFSv2 または NFSv3 を使用してサーバーから共有をマウントしようとするクライアントが応答しなくなります。
    • NFS サーバー自体が NFSv2 および NFSv3 ファイルシステムをマウントできなくなります。
    以下のオプションを無効にするには、次のコマンドを実行します。
    • 以下を /etc/sysconfig/nfs ファイルに追加します。
      RPCMOUNTDOPTS="-N 2 -N 3"
      
    • 関連するサービスを無効にします。
      # systemctl mask --now rpc-statd.service rpcbind.service rpcbind.socket
  3. NFS サーバーを再起動します。
    # systemctl restart nfs
    変更は、NFS サーバーを起動または再起動するとすぐに反映されます。

NFSv4 専用の設定の確認

netstat ユーティリティーを使用して、NFS サーバーが NFSv4 専用モードで設定されていることを確認できます。
  • 以下は、NFSv4 専用サーバーでの netstat の出力例です。RPCBINDMOUNT、および NSM のリッスンも無効になります。nfs が唯一 リッスンする NFS サービスとなります。
    # netstat -ltu
    
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp        0      0 0.0.0.0:nfs             0.0.0.0:*               LISTEN     
    tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
    tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN     
    tcp6       0      0 [::]:nfs                [::]:*                  LISTEN     
    tcp6       0      0 [::]:12432              [::]:*                  LISTEN     
    tcp6       0      0 [::]:12434              [::]:*                  LISTEN     
    tcp6       0      0 localhost:7092          [::]:*                  LISTEN     
    tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
    udp        0      0 localhost:323           0.0.0.0:*                          
    udp        0      0 0.0.0.0:bootpc          0.0.0.0:*                          
    udp6       0      0 localhost:323           [::]:*
    
  • 対照的に、NFSv4 専用サーバーを設定する前の netstat 出力には、sunrpc サービスと mountd サービスが含まれています。
    # netstat -ltu
    
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp        0      0 0.0.0.0:nfs             0.0.0.0:*               LISTEN     
    tcp        0      0 0.0.0.0:36069           0.0.0.0:*               LISTEN     
    tcp        0      0 0.0.0.0:52364           0.0.0.0:*               LISTEN     
    tcp        0      0 0.0.0.0:sunrpc          0.0.0.0:*               LISTEN     
    tcp        0      0 0.0.0.0:mountd          0.0.0.0:*               LISTEN     
    tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
    tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN     
    tcp6       0      0 [::]:34941              [::]:*                  LISTEN     
    tcp6       0      0 [::]:nfs                [::]:*                  LISTEN     
    tcp6       0      0 [::]:sunrpc             [::]:*                  LISTEN     
    tcp6       0      0 [::]:mountd             [::]:*                  LISTEN     
    tcp6       0      0 [::]:12432              [::]:*                  LISTEN     
    tcp6       0      0 [::]:56881              [::]:*                  LISTEN     
    tcp6       0      0 [::]:12434              [::]:*                  LISTEN     
    tcp6       0      0 localhost:7092          [::]:*                  LISTEN     
    tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
    udp        0      0 localhost:323           0.0.0.0:*                          
    udp        0      0 0.0.0.0:37190           0.0.0.0:*                          
    udp        0      0 0.0.0.0:876             0.0.0.0:*                          
    udp        0      0 localhost:877           0.0.0.0:*                          
    udp        0      0 0.0.0.0:mountd          0.0.0.0:*                          
    udp        0      0 0.0.0.0:38588           0.0.0.0:*                          
    udp        0      0 0.0.0.0:nfs             0.0.0.0:*                          
    udp        0      0 0.0.0.0:bootpc          0.0.0.0:*                          
    udp        0      0 0.0.0.0:sunrpc          0.0.0.0:*                          
    udp6       0      0 localhost:323           [::]:*                             
    udp6       0      0 [::]:57683              [::]:*                             
    udp6       0      0 [::]:876                [::]:*                             
    udp6       0      0 [::]:mountd             [::]:*                             
    udp6       0      0 [::]:40874              [::]:*                             
    udp6       0      0 [::]:nfs                [::]:*                             
    udp6       0      0 [::]:sunrpc             [::]:*
    

このページには機械翻訳が使用されている場合があります (詳細はこちら)。