21.7. /etc/exports 設定ファイル
/etc/exports
ファイルは、リモートホストにどのファイルシステムをエクスポートするかを制御し、オプションを指定します。空白行は無視され、ハッシュ記号(#)で行を開始することでコメントを作成できます。長い行はバックスラッシュ(\)でラップできます。エクスポートする各ファイルシステムは個別の行にする必要があり、エクスポートされたファイルシステムの後に配置された許可されたホストの一覧は、スペースで区切る必要があります。各ホストのオプションは、ホストの識別子の直後に括弧を追加し、その中に指定する。ホストと最初の括弧の間には空白を使用しない。有効なホストタイプは、gss/krb5、gss/krb5i、および gss/krb5p です。
エクスポートするファイルシステムの行の構造は次のとおりです。
<export> <host1>(<options>) <hostN>(<options>)...
この構造 <export> で をエクスポートされるディレクトリーに置き換え、< host1 > をエクスポート先のホストまたはネットワークに置き換え、< options > をそのホストまたはネットワークのオプションに置き換えます。追加のホストは、スペース区切りの一覧で指定できます。
以下の方法を使用して、ホスト名を指定できます。
- 単一ホスト: 特定のホストが完全修飾ドメイン名、ホスト名、または IP アドレスで指定されている場所。
- ワイルドカード - 特定の文字列に一致する完全修飾ドメイン名をグループ化するために * 文字または ? 文字を使用する場所。ワイルドカードは IP アドレスと併用しないでください。ただし、逆引き DNS ルックアップが失敗した場合、誤って動作する可能性があります。ワイルドカードを完全修飾ドメイン名で使用する場合は想定よりも正確である可能性があるため、注意してください。たとえば、ワイルドカードとして *.example.com を使用すると、sales.example.com はエクスポートされたファイルシステムにアクセスできますが、bob.sales.example.com はアクセスできません。* .example.com と *. *.example. com の両方に該当する必要があります。
- IP ネットワーク: 大規模なネットワーク内の IP アドレスに基づくホストの一致を許可します。たとえば、192.168.0. 0/28 では、最初の 16 の IP アドレスが 192.168.0.0 から 192.168.0.15 までで、エクスポートしたファイルシステムにアクセスできますが、192.168.0.16 以降にはアクセスできません。
- netgroups - 使用する NIS netgroup 名 @<group-name>書き込まれます。これにより、NIS サーバーが、このエクスポートしたファイルシステムのアクセス制御を担当することになります。この場合、
/etc/exports
に影響を及ぼさずに NIS グループでユーザーを追加および削除できます。
最も簡単な方法は、
/etc/exports
ファイルに、エクスポートするディレクトリーと、そのディレクトリーへのアクセスを許可するホストを指定するだけです。以下の例のようになります。
/exported/directory bob.example.com
この例では、
bob.example.com
は /exported/directory/
をマウントできます。この例ではオプションが指定されていないため、以下のデフォルトの NFS オプションが有効になります。
ro
: エクスポートしたファイルシステムのマウントは読み取り専用です。リモートホストは、ファイルシステムで共有されているデータに変更を加えることができません。ホストがファイルシステムに変更を加えることを許可するには、read/write (rw
)オプションを指定する必要があります。wdelay
: 別の書き込み要求が不満に疑われる場合は、NFS サーバーがディスクへの書き込みを遅らせます。これにより、書き込みコマンドによるディスクへのアクセス回数が減り、書き込みオーバーヘッドを削減することでパフォーマンスが向上します。no_wdelay
オプションはこの機能をオフにしますが、sync
オプションを使用する場合にのみ利用できます。root_squash
- リモートで接続した root ユーザーが root 権限を持たないようにし、ユーザーnfsnobody
のユーザー ID を割り当てます。これにより、リモート root ユーザーの権限を最も低いローカルユーザーに効果的に拒否し、リモートサーバーのファイルの不正な変更を防ぎます。または、no_root_squash
オプションは、root squashing をオフにします。root を含むすべてのリモートユーザーを非表示にするには、all_squash
オプションを使用します。特定のホストからリモートユーザーで使用するユーザーおよびグループ ID を指定するには、anonuid
オプションおよびanongid
オプションを指定します。この場合、リモート NFS ユーザーが共有して指定(anonuid=<uid-value>,anongid=<gid-value>)
するために特別なユーザーアカウントを作成できます。<uid-value>
is the user ID number and<gid-value>
はグループ ID 番号です。
重要
デフォルトでは、アクセス制御リスト (ACL)は、Red Hat Enterprise Linux の NFS でサポートされています。この機能を無効にするには、ファイルシステムをエクスポートする際に no_acl オプションを指定します。
エクスポートするすべてのファイルシステムの各デフォルトは、明示的に上書きする必要があります。たとえば、
rw
オプションを指定しないと、エクスポートするファイルシステムが読み取り専用として共有されます。以下は、/etc/exports
の例になりますが、ここでは 2 つのデフォルトオプションを上書きします。
/another/exported/directory 192.168.0.3(rw,sync)
この例では、192.168.0.3 は
/another/exported/directory/
の読み取り/書き込みをマウントでき、クライアントによる書き込み要求の完了前にディスクへのすべての転送がディスクにコミットされます。
さらに、デフォルト値が指定されていない他のオプションも利用できます。たとえば、サブツリーチェックを無効にする、安全でないポートからのアクセスの許可する、安全でないファイルロックを許可する (一部の初期 NFS クライアント実装で必要) などの機能があります。これらのあまり使用されないオプションの詳細は、
exports
の man ページを参照してください。
警告
/etc/exports
ファイルの形式では、特に空白文字の使用が非常に厳しく扱われます。ホストからエクスポートするファイルシステムの間、そしてホスト同士の間には、必ず空白文字を挿入してください。また、それ以外の場所 (コメント行を除く) には、空白文字を追加しないでください。
たとえば、以下の 2 つの行は意味が異なります。
/home bob.example.com(rw) /home bob.example.com (rw)
最初の行は、
bob.example.com
のユーザーにのみ、/home
ディレクトリーへの読み取り/書き込みアクセスを許可します。2 番目の行では、bob.example.com
からのユーザーにディレクトリーを読み取り専用 (デフォルト) でマウントすることを許可し、その他のユーザーに読み取り/書き込みでマウントすることを許可します。
21.7.1. exportfs コマンド
NFS 経由でリモートユーザーにエクスポートされるすべてのファイルシステム、およびそれらのファイルシステムのアクセスレベルは
/etc/exports
ファイルに一覧表示されます。nfs サービスが開始すると、/usr/sbin/exportfs コマンドが起動してこのファイルを読み込み、実際のマウントプロセスのために制御を rpc.mountd (NFSv2 および NFSv3 の場合) に渡してから、rpc.nfsd に渡します。この時点でリモートユーザーがファイルシステムを使用できるようになります。
/usr/sbin/exportfs コマンドを手動で発行すると、root ユーザーは NFS サービスを再開始せずにディレクトリーをエクスポートするか、しないかを選択できるようになります。適切なオプションが指定されると、/usr/sbin/exportfs コマンドは、エクスポートされたファイルシステムを
/var/lib/nfs/xtab
に書き込みます。ファイルシステムへのアクセス権を決定する際には、rpc.mountd がxtab
ファイルを参照するため、エクスポートしたファイルシステムの一覧への変更がすぐに反映されます。
以下は、/usr/sbin/exportfs で利用可能な一般的に使用されるオプションの一覧です。
-r
-/etc/exports
に一覧表示されているすべてのディレクトリーが、/etc/lib/nfs/xtab
に新しいエクスポートリストを作成することにより、エクスポートします。このオプションは、/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 コマンドの実行時にエクスポートまたはエクスポートされていないファイルシステムがより詳細に表示されます。
/usr/sbin/exportfs コマンドにオプションが渡されていない場合は、現在エクスポートされているファイルシステムの一覧が表示されます。
/usr/sbin/exportfs コマンドの詳細は、man ページの exportfs を参照してください。
21.7.1.1. NFSv4 で exportfs の使用
exportfs コマンドは、エクスポートしたファイルシステムの NFS テーブルの管理に使用されます。引数なしでターミナルに入力すると、exportfs コマンドはエクスポートされたすべてのディレクトリーを表示します。
NFSv4 は NFSv2 プロトコルおよび NFSv3 プロトコルで使用されていた
MOUNT
プロトコルを使用しなくなったため、ファイルシステムのマウントが変更されました。
NFSv4 クライアントは、NFSv4 サーバーによって提供されるすべてのエクスポートを、NFSv4 擬似ファイルシステムと呼ばれる単一のファイルシステムとして確認できるようになりました。Red Hat Enterprise Linux では、擬似ファイルシステムが、
fsid=0
オプションでエクスポート時に識別される単一の実際のファイルシステムとして識別されます。
たとえば、次のコマンドは NFSv4 サーバーで実行できます。
mkdir /exports mkdir /exports/opt mkdir /exports/etc mount --bind /usr/local/opt /exports/opt mount --bind /usr/local/etc /exports/etc exportfs -o fsid=0,insecure,no_subtree_check gss/krb5p:/exports exportfs -o rw,nohide,insecure,no_subtree_check gss/krb5p:/exports/opt exportfs -o rw,nohide,insecure,no_subtree_check gss/krb5p:/exports/etc
この例では、中断不可能なリンクを作成する
--bind
オプションを使用して、マウントする複数のファイルシステムを持つクライアントが提供されます。
擬似ファイルシステム機能により、NFS バージョン 2、3、および 4 エクスポート設定は常に互換性があるとは限りません。たとえば、以下のディレクトリーツリーがあるとします。
/home /home/sam /home/john /home/joe
また、エクスポートは以下のようになります。
/home *(rw,fsid=0,sync)
NFS バージョン 2、3、および 4 を使用すると、以下が機能します。
mount server:/home /mnt/home ls /mnt/home/joe
v4 を使用すると、以下が機能します。
mount -t nfs4 server:/ /mnt/home ls /mnt/home/joe
相違点は、server:/homeおよびserver:/です。すべてのバージョンでエクスポート設定を互換性を持たせるには、fsid=0 で root ファイルシステムをエクスポート(読み取り専用)する必要があります。fsid=0 は、このエクスポートがルートであることを NFS サーバーに指示します。
/ *(ro,fsid=0) /home *(rw,sync,nohide)
これらのエクスポートを使用すると、mount server:/home /mnt/home" と "mount -t nfs server:/home /mnt/homeの両方が期待どおりに機能します。