EXPORTS(5) | File Formats Manual | EXPORTS(5) |
exports - (カーネルベースの NFS で) エクスポート (export) される NFS ファイルシステム
/etc/exports
/etc/exports ファイルは、 NFS のクライアントにどのファイルシステムをエクスポート (export) してよいか、 というアクセスコントロールリストを与える。 これは exportfs(8) によって使用され、NFS マウントデーモン mountd(8) と、カーネルベースの NFS ファイルサーバデーモン nfsd(8) とに情報を与える。
このファイルの書式は SunOS の exports ファイルと似ている。 それぞれの行には、エクスポートポイントと、 そのポイントにあるファイルシステムをマウントできるクライアントを スペースで区切って指定したリストが書かれている。 リストされたクライアントの直後には、 そのクライアント向けのエクスポートオプションをコンマで区切ってリスト指定し、 リスト全体を括弧で括って置くこともできる。 クライアント名とこのオプションリストとの間にはスペースを入れてはいけない。
空行は無視され、# 以降行末まではコメントとみなされる。 行末にバックスラッシュをおけば、エントリは次の行に継続できる。 エクスポート名に空白が含まれる場合は、ダブルクォートで括る。 エクスポートパス名には、 空白やその他通常は使われない文字を指定することもできる。 このような文字を使う場合は、バックスラッシュの後に 3 桁の 8 進数で文字コードを指定する。
NFS クライアントはいろいろな方法で指定できる。
エクスポートへのアクセスを rpcsec_gss セキュリティを使って制限するには、 クライアントとして特別な文字列 "gss/krb5" を使うこと。 rpcsec_gss とクライアントの IP アドレスによる資格を 同時に要求することはできない。
exportfs は以下のエクスポートオプションを受け付ける。
このオプションを用いると通常は性能が向上するが、 クリーンでないサーバの再起動 (つまりクラッシュ) によってデータが失われたり破壊されうるという代償を伴う。
nfs-utils の 1.0.0 まででは、このオプションがデフォルトであった。 このリリース以降は sync がデフォルトとなり、 async は必要な場合は明示的に指定しなければならない。 システム管理者にこの変更を知らせるため、 sync と async のいずれも指定されていない場合、`exportfs' は警告を発する。
hidden にしたくないファイルシステムに nohide オプションを設定すれば、 適切な権限のあるクライアントは変更を知らされることなく、 親から子のファイルシステムに移動できる。
しかし NFS クライアントのなかには、 このような状況 (例えば、見かけ上 1 つのファイルシステムで 2 つのファイルが同じ inode 番号を持つような状況) ではうまく動作しないものもある。
nohide オプションは現在のところ single host エクスポートでしか効果がない。 このオプションの動作は、 netgroup, subnet, wildcard などによるエクスポートでは信頼性がない。
このオプションは状況によってはとても便利であるが、よく注意して、 かつクライアントシステムがその状況下で効果的に動作することを確認した後で 使うべきである。
このオプションは hide で明示的に無効にできる。
ファイルシステムのサブディレクトリがエクスポートされているが、 ファイルシステム全体がエクスポートされていない場合、 NFS リクエストがくると、サーバは対応するファイルシステムに アクセスされたファイルがあるかをチェックするだけでなく (これは簡単)、 エクスポートされたツリーのなかにあるかもチェックしなければならない (これは難しい)。 このチェックは subtree_check とよばれる。
このチェックを行うには、サーバはクライアントに渡す 「ファイルハンドル」に、ファイルの場所に関する情報を入れなければならない。 こうすると、クライアントがファイルをオープンしている間に、 アクセスしているファイルの名前が変更されると問題が起こる (ただし多くの簡単なケースでは動作する)。
サブツリーのチェックは、 ファイルシステムが no_root_squash (下記参照) でエクスポートされていて、 ファイル自身にはより一般的なアクセス権がある場合に、 root しかアクセスできないディレクトリ内のファイルが root によってのみアクセスされているかを確認するのにも使える。
一般的な指針として、ホームディレクトリは サブツリーのチェックを無効にしてエクスポートすべきである (通常各ユーザの親ディレクトリのレベルでエクスポートされ、 かつファイル名の変更が多いため)。 大抵は読み込みのみで、ほとんどファイル名の変更が行われない ファイルシステム (たとえば /usr や /var) で、 それらのサブディレクトリがエクスポートされるような場合には、 サブツリーのチェックを有効にしてエクスポートした方がよいかもしれない。
サブツリーのチェックを行うデフォルトの動作は、 subtree_check で明示的に指定することもできる。
初期の NFS クライアントの実装ではロック要求の際に信用証明を送らなかったが、 現在でもこのような昔の実装を元にした多くの NFS クライアントが存在する。 全ての人が読み込み可能なファイルのみをロックしたい場合は、 このフラグを使うこと。
NLM 要求の際に認証を求めるデフォルトの動作は、 同じ意味をもつ auth_nlm または secure_locks のどちらか (意味は全く同じ) で明示的に指定できる。
パスが指定される場合 (たとえば mountpoint=/path または mp=/path の場合)、マウントされるパスは、 エクスポートされるエクスポートポイントに対応する マウントポイントでなければならない。
これは NFS のフェイルオーバー (failover, 代替引き継ぎ) で役立つ。 フェイルオーバーのペアとなる両方のサーバーが、 共有されるファイルシステムに対して 同じ NFS ファイルハンドルを使うことが保証されるので、 フェイルオーバー後にファイルハンドルが失効するのを避けることができる。
Linux のファイルシステムの中には、 ブロックデバイスにマウントされていないものもある。 これらのファイルシステムを NFS でエクスポートするには、 fsid オプションを使う必要がある (ただし、このオプションはまだ充分ではない)。
値 0 は NFSv4 で使う場合には特別な意味を持つ。 NFSv4 にはエクスポートされるファイルシステム全体のルートという概念がある。 fsid=0 でエクスポートされたエクスポートポイントは、 このルートとして使用される。
サーバマシン上のファイルに対する nfsd によるアクセスコントロールは、 それぞれの NFS RPC request の際に与えられる uid と gid に基づいている。 ユーザは通常、 サーバ上にある自分のファイルには、それが普通のファイルシステム上に あるのと同様にアクセス可能であることを期待している。 これにはクライアントとサーバ上で用いられる uid と gid がそれぞれ 同じである必要があるが、 これは常に真であるとは限らず、望ましいとも限らない。
クライアントマシンの root が NFS サーバのファイルにアクセスするとき、 サーバの root として扱われてしまうのは、ほとんどの場合は望ましくない。 このため uid 0 は普通は別の id (anonymous や nobody uid) にマッピングされる。 この動作は `root squashing' と呼ばれるが、これがデフォルトである。 no_root_squash を使えばオフにすることができる。
デフォルトでは、 exportfs は squash アクセスに -2 (つまり 65534) という uid と gid を用いる。 これらの数値は anonuid と anongid オプションによって変更できる。 最後に、 all_squash オプションを指定すれば、 全ての user request を anonymous uid に割り当てることもできる。
以下にマッピングオプションの完全なリストをあげる:
# sample /etc/exports file / master(rw) trusty(rw,no_root_squash) /projects proj*.local.domain(rw) /usr *.local.domain(ro) @trusted(rw) /home/joe pc001(rw,all_squash,anonuid=150,anongid=100) /pub (ro,insecure,all_squash)
1 行目は、 master と trusty に対してすべてのファイルシステムの マウント許可を出している。 書き込みの許可に加え、さらに trusty に対しては、すべての uid squashing も無効にしている。 2 行目と 3 行目は、ホスト名へのワイルドカードの利用と、ネットグループ (@trusted のエントリ) の例である。 4 行目は、上で述べた PC/NFS クライアント用エントリの例である。 5 行目は、公開 FTP ディレクトリを世界中の全てのホストにエクスポートしている。 すべてのリクエストは nobody アカウントで実行される。 またこのエントリ中の insecure オプションによって、 NFS 用 port を使わないように実装された NFS クライアントからのアクセスも許可している。
/etc/exports
28 October 1999 | 4.2 Berkeley Distribution |