9.7. NFS サーバーの設定

NFS サーバーの設定には2つの方法があります。
  • NFS の設定ファイル、/etc/exports を手動で編集する方法。
  • コマンド exportfs の使用により、コマンドラインを介して実行する方法。

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

/etc/exports ファイルは、リモートホストにエクスポートされるファイルシステムを制御して、オプションを指定します。以下の構文ルールに従います。
  • 空白行は無視する。
  • コメントを追加するには、その行をハッシュ記号 (#) で始める。
  • 長い行はバックスラッシュ (\) を使って折り返す。
  • エクスポートされるファイルシステムはそれぞれ独自の行に置く。
  • エクスポートされるファイルシステムの後に配置される許可ホストの一覧はすべて、空白文字で分離する。
  • 各ホストのオプションはホスト識別子の直後にある括弧内に配置し、ホストと最初の括弧の間に空白を入れない。
エクスポートされるファイルシステムの各エントリーには以下の構造があります。
export host(options)
前述の構造は以下の変数を使用します。
export
エクスポートされるディレクトリー
host
エクスポートを共有するホストまたはネットワーク
options
host に使用するオプション
各ホストに特定のオプションを付けて複数のホストを指定することができます。これを実行するにはホスト名の後にそれぞれのオプションを以下のように (括弧内に) 付けて、空白区切り行と同じ行にホストを一覧表示します。
export host1(options1) host2(options2) host3(options3)
ホスト名を指定するための異なるメソッドに関する詳細情報については、「ホスト名の形式」 を参照してください。
最も簡素な形式では、/etc/exports ファイルはエクスポートしたディレクトリーとそれにアクセス許可のあるホストを指定するだけです。以下の例のようになります。

例9.6 /etc/exports ファイル

/exported/directory bob.example.com
ここで、bob.example.com は、 NFS サーバーから /exported/directory/ をマウントできます。この例にはオプションが指定されていないため、NFS は デフォルト の設定を使用します。
デフォルトの設定は以下のようになります。
ro
エクスポートしたファイルシステムは読み込み専用です。リモートホストは、ファイルシステム上で共有されているデータの変更はできません。ファイルシステムに対して変更 (読み込み/書き込み) ができるようにするには、rw オプションを指定します。
sync
NFS サーバーは以前の要求で発生した変更がディスクに書き込まれるまでは、要求に応答しません。それに代わって非同期書き込みを有効にするには、オプション async を指定します。
wdelay
NFS サーバーは、別の書き込み要求が間近に来ていると判定すると、ディスクへの書き込みを遅らせます。別々の書き込みコマンドによるディスクへのアクセス回数を低減できるため、これが書き込みのワークロードを低下させてパフォーマンスを向上します。これを無効にするには、no_wdelay を指定します。デフォルトの sync オプションも指定されている場合にのみ no_wdelay は利用可能になります。
root_squash
これは、(ローカルではなく) リモート で接続している root ユーザーが root 権限を持つことを阻止するものです。その代わりに、NFS サーバーは、そのユーザーにユーザー ID nfsnobody を割り当てます。これが、効果的にリモートの root ユーザーの権力を最低のローカルユーザーレベルへと「押しつぶし」て、リモートサーバー上での無許可の書き込み可能性を阻止します。この root squashing を無効にするには、no_root_squash を指定します。
すべてのリモートユーザー (root を含む) を潰す (squash) には、all_squash を使用します。NFS サーバーが特定のホストからリモートユーザーに対して割り当てるべきユーザー ID とグループ ID を指定するには、anonuidanongid のオプションをそれぞれ以下のように使用します。
export host(anonuid=uid,anongid=gid)
ここで、uidgid はそれぞれ、ユーザー ID 番号およびグループ ID 番号です。anonuidanongid のオプションは、リモート NFS ユーザーが共有するための特別なユーザーおよびグループアカウントの作成を可能にします。
デフォルトでは、access control lists (アクセス制御リスト) (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 exports を参照してください。

重要

/etc/exports ファイルの形式は、特に空白の使用に関しては非常に厳格です。常にホストとエクスポートされるファイルシステムの間、およびホスト同士の間を空白で隔離することを忘れないでください。しかし、コメント行以外では、ファイル内の他の場所には空白が存在すべきではありません。
たとえば、以下の2つの行は同じ意味ではありません。
/home bob.example.com(rw) 
/home bob.example.com (rw)
最初の行は bob.example.com からのユーザーにのみ /home ディレクトリーへの読み込み/書き込みアクセスを許可します。2番目の行は bob.example.com からのユーザーにディレクトリーを読み込みのみで(デフォルト)マウントを許可して、他の人々には読み込み/書き込みでマウントすることを許可します。