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
- エクスポートを共有するホストまたはネットワーク
- オプション
- host に使用されるオプション
各ホストにそれぞれオプションを付けて、複数のホストを 1 行で指定することができます。この場合は、以下のように、各ホスト名の後に、そのホストに対するオプションを括弧を付けて追加します。ホストは空白文字で区切ります。
export host1(options1) host2(options2) host3(options3)
ホスト名を指定するさまざまな方法は、「ホスト名の形式」 を参照してください。
最も単純な形式では、
/etc/exports
ファイルは、次の例に示すように、エクスポートされたディレクトリーとそのディレクトリーへのアクセスを許可されるホストのみを指定します。
例8.6 /etc/exports
ファイル
/exported/directory bob.example.com
ここで、
bob.example.com は
NFS サーバーから /exported/directory/
をマウントできます。この例ではオプションが指定されていないため、デフォルト 設定が使用されます。
デフォルトの設定は以下のようになります。
- 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)
uid と gid は、それぞれユーザー ID とグループ ID の番号になります。
anonuid
オプションと anongid
オプションにより、共有するリモート NFS ユーザー用に、特別なユーザーアカウントおよびグループアカウントを作成できます。
デフォルトでは、アクセス制御リスト (ACLs) は、Red Hat Enterprise Linux では NFS が対応しています。この機能を無効にするには、ファイルシステムをエクスポートするときに no_acl オプションを指定します。
エクスポートするすべてのファイルシステムの各デフォルトは、明示的に上書きする必要があります。たとえば、
rw
オプションを指定しないと、エクスポートするファイルシステムが読み取り専用として共有されます。以下は、2 つのデフォルトオプションをオーバーライドする /etc/exports
のサンプル行です。
/another/exported/directory 192.168.0.3(rw,async)
この例では、192.168.0.3 は
/another/exported/directory/
をマウントして読み書きでき、ディスクへの書き込みはすべて非同期です。エクスポートオプションの詳細については、man exportfs を 参照してください。
さらに、デフォルト値が指定されていないオプションも利用できます。たとえば、サブツリーチェックを無効にする、安全でないポートからのアクセスの許可する、安全でないファイルロックを許可する (一部の初期 NFS クライアント実装で必要) などの機能があります。これらのあまり使用されないオプションの詳細については、 man エクスポート を参照してください。
重要
/etc/exports
ファイルの形式は、特にスペース文字の使用に関して非常に正確です。ホストからエクスポートするファイルシステムの間、そしてホスト同士の間には、必ず空白文字を挿入してください。また、それ以外の場所 (コメント行を除く) には、空白文字を追加しないでください。
たとえば、以下の 2 つの行は意味が異なります。
/home bob.example.com(rw) /home bob.example.com (rw)
最初の行では、
bob.example.com
のユーザーのみに /home
ディレクトリーへの読み取りおよび書き込みアクセスが許可されます。2 行目では 、bob.example.com
のユーザーがディレクトリーを読み取り専用 (デフォルト) でマウントできるようにしますが、その他のユーザーは読み取り/書き込みでマウントできます。
8.6.2. importfs コマンド
NFS を使用してリモートユーザーにエクスポートされるすべてのファイルシステムと、それらのファイルシステムのアクセスレベルは、
/etc/exports
ファイルにリストされます。nfs サービスが開始されると、/usr/sbin/exportfs コマンドが起動してこのファイルを読み取り、制御を rpc.mountd (NFSv3 の場合) に渡して実際のマウントプロセスを実行し、次に rpc.nfsd に渡して、ファイルシステムをリモートユーザーが使用できるようにします。
/usr/sbin/exportfs コマンドを手動で発行すると、root ユーザーは NFS サービスを再起動せずにディレクトリーを選択的にエクスポートまたはアンエクスポートできます。適切なオプションを指定すると、/usr/sbin/exportfs コマンドはエクスポートされたファイルシステムを
/var/lib/nfs/xtab
に書き込みます。rpc.mountd は ファイルシステムへのアクセス権限を決定するときに xtab
ファイルを参照するため、エクスポートされたファイルシステムのリストへの変更はすぐに有効になります。
以下は、/usr/sbin/exportfs で使用できる一般的に使用されるオプションのリストです。
- -r
/var/lib/nfs/etab
に新しいエクスポートリストを作成することで、/etc/exports
にリストされているすべてのディレクトリーがエクスポートされます。このオプションは、/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 では、提示されるファイルシステムは自動的に同じパスを使用して NFSv3 および NFSv4 クライアントで利用可能になるため、NFSv4 のエクスポートを設定するための特別なステップは必要ありません。これが、以前のバージョンとは異なります。
クライアントが NFSv4 を使用できないようにするには、
/etc/sysconfig/nfs
で RPCNFSDARGS= -N 4
を設定して NFSv4 をオフにします。
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 が rpc.mount コマンドラインに追加されます: rpc.mount -p port。
nlockmgr
サービスで使用するポートを指定するには、/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 をサポートするサーバーで、ルートディレクトリー をマウントし、周囲を調べます。
#
mount myserver:/ /mnt/#
cd /mnt/ exports#
ls exports foo bar
NFSv4 と NFSv3 の両方に対応するサーバーでは、上記の方法はいずれも有効で、同じ結果となります。
注記
Red Hat Enterprise Linux 6 以前には、設定の仕方によって以前の NFS サーバーは別々のパス経由で NFSv4 クライアントにファイルシステムをエクスポートすることがありました。このようなサーバーでは、デフォルトで NFSv4 が有効にならないため、問題にはなりません。
8.6.4. ファイアウォールを介した RPC クォータのアクセス
ディスククォータを使用するファイルシステムをエクスポートする場合は、クォータの RPC (Remote Procedure Call) サービスを使用して、NFS クライアントにディスククォータデータを提供できます。
手順8.1 ファイアウォールの内側で RPC クォータにアクセスできるようにする
rpc-rquotad
サービスを有効にするには、次のコマンドを使用します。#
systemctl enable rpc-rquotadrpc-rquotad
サービスを開始するには、次のコマンドを使用します。#
systemctl start rpc-rquotadrpc-rquotad
が有効になっている場合、nfs-server
サービスの開始後に自動的に開始されることに注意してください。- ファイアウォールの内側でクォータ RPC サービスにアクセスできるようにするには、UDP または TCP ポート
875 が
開いている必要があります。デフォルトのポート番号は/etc/services
ファイルで定義されます。/etc/sysconfig/rpc-rquotad
ファイルのRPCRQUOTADOPTS
変数に-p port-number
を追加することで、デフォルトのポート番号をオーバーライドできます。 /etc/sysconfig/rpc-rquotad
ファイルの変更を有効にするには、rpc-rquotad
を再起動します。#
systemctl restart rpc-rquotad
リモートホストからのクォータの設定
デフォルトでは、クォータはリモートホストのみが読み取ることができます。クォータの設定を許可するには、
/etc/sysconfig/rpc-rquotad
ファイルの RPCRQUOTADOPTS
変数に -S
オプションを追加します。
/etc/sysconfig/rpc-rquotad
ファイルの変更を有効にするには、rpc-rquotad
を再起動します。
#
systemctl restart rpc-rquotad
8.6.5. ホスト名の形式
ホストは以下の形式にすることができます。
- 単独のマシン
- 完全修飾型ドメイン名 (サーバーで解決可能な形式)、ホスト名 (サーバーで解決可能な形式)、あるいは IP アドレス
- ワイルドカードで指定された一連のマシン
*
または?
を使用します。文字列の一致を指定する文字。ワイルドカードは IP アドレスでは使用しないことになっていますが、逆引き DNS ルックアップが失敗した場合には誤って動作する可能性があります。完全修飾ドメイン名にワイルドカードを指定する場合、ワイルドカードにはドット (.
) は含まれません。たとえば、*.example.com
にはone.example.com が
含まれますが、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 がネットワークで、netmask がネットマスクです (たとえば、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 を有効にするには、次のコマンドを実行します
- rdma パッケージと rdma-core パッケージをインストールします。
/etc/rdma/rdma.conf
ファイルには、デフォルトでXPRTRDMA_LOAD=yes
を設定する行が含まれており、これにより、rdma
サービスに NFSoRDMA クライアント モジュールをロードするよう要求されます。 - NFSoRDMA サーバー モジュールの自動ロードを有効にするには、
/etc/rdma/rdma.conf
の新しい行にSVCRDMA_LOAD=yes
を追加します。/etc/sysconfig/nfs
ファイルのRPCNFSDARGS="--rdma=20049"
は、NFSoRDMA サービスがクライアントをリッスンするポート番号を指定します。『RFC 5667 では、』 RDMA 経由で NFSv4 サービスを提供する場合、サーバーはポート20049
をリッスンする必要があると指定しています。 /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 サーバーを、NFS バージョン 4.0 以降にのみ対応するように設定するには、次のコマンドを実行します。
/etc/sysconfig/nfs
設定ファイルに次の行を追加して、NFSv2、NFSv3、および UDP を無効にします。RPCNFSDARGS="-N 2 -N 3 -U"
- オプションで、
RPC バインド
、MOUNT
、および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
- NFS サーバーを再起動します。
#
systemctl restart nfs変更は、NFS サーバーを起動または再起動するとすぐに反映されます。
NFSv4 専用の設定の確認
netstat
ユーティリティーを使用すると、NFS サーバーが NFSv4 専用モードで設定されていることを確認できます。
- 以下は、NFSv4 専用サーバーでの
netstat
出力の例です。RPC バインド
、MOUNT
、および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 [::]:*