Network File System

Network File Systemは主にUNIXで利用される分散ファイルシステムおよびそのプロトコルである。1984年にサン・マイクロシステムズによって実質的な最初の規格となるNFS version 2  が発表され、1094}}・1813}}・3530}}・5661}}・7530}}・7862}} などによって定義されている。

1. 概要
-----

NFSは、ローカルに接続されたストレージをネットワークを介してリモートの計算機に提供する分散ファイルシステムとそのプロトコルである。マウントされたNFSボリュームは、ネットワーク上にあることを意識せずローカルと同じように利用出来る。NFS v2, v3 では、Network File System#関連プロトコルで述べるように、ファイルロック機能やクォータ管理機能などはNFSプロトコル本体に含まれず、それぞれ別のプロトコルによって提供される。これらは NFS v4 ではプロトコル本体に含まれている。
　ネットワークファイルシステムに代わる方法としてリモートファイルシェアリングがある。リモートファイルシェアリングは、大部分の System V 系 UNIX や BSD 系 SunOS にてオプションである。

1.1. ポート番号
----------

NFSのサービスは一般的にTCPの2049番ポートで提供される。NFS v4はTCPのみだが、NFS v3はTCPとUDPを使える。ボリュームを提供するNFSサーバとそれを利用するクライアント間の遠隔手続き呼出し  には、NFSの一部として開発されたONC RPCを利用している。NFSv3までは、ファイルロックやマウント要求等のONC RPCに使われるポート番号はポートマッパーによって動的に割り当てられることが一般的であった。そのため、ポート番号を固定するオプションを持たない実装の場合、ファイアウォールによるポート番号ベースの通信制御は困難であった。NFSv4からは、同等の機構がNFS本体に組み込まれ、サーバ-クライアント間の通信にはTCPの2049番ポートのみを利用するようになった。

2. 歴史
-----

2.1. NFS version 1
------------------

NFS version 1  は、サン・マイクロシステムズ内の実験にとどまり、対外的なリリースはされなかった。

2.2. NFS version 2
------------------

NFS v2の仕様は1984年に発表され、1985年にはNFS v2を初めて実装したSunOS 2.0がリリースされた。その後1989年3月には 1094}} が取りまとめられ標準化された。 NFS v2の開発にはRusty Sandberg, Bob Lyon, Bill Joy, Steve Kleimanなどが参加していた。元々のNFS v2では通信にUDPのみを利用することになっているが、これはファイルロック機能をNFSの枠組みの外で実装することでプロトコルをステートレスに保つのが目的であった。

2.3. NFS version 3
------------------

1995年6月に 1813}} で定義されたNFS v3では、主に以下の機能追加が行われた。

ファイルサイズおよび読み書き時に指定するオフセットの型を32bitから64bitに拡張し、4GiB以上のファイルをサポートした。
書き込み性能を向上させるため、サーバへの非同期書き込みをサポートした。
ファイル属性を別途取得するプロシージャ呼び出しを省くために、多くのプロシージャでその返値にファイル属性を追加した。
ディレクトリを走査する時、そこに含まれるファイル名に加えファイルハンドルと属性を一度に取得できる//READDIRPLUS//プロシージャを追加した。また、NFS v2の時点ですでにTCPによる転送をサポートするベンダーが複数存在したことから、サン・マイクロシステムズはNFS v3からTCP転送を仕様に追加した。これによりWANを介したNFSがより安定して動作するようになった。

2.4. NFS version 4
------------------

AFSやCIFSの存在を踏まえ、2000年12月に 3010}} で、また2003年4月に 3530}} で、さらに2015年3月に 7530}} で改定されたNFS v4では、性能の向上策、Kerberos認証などの強力なセキュリティ、またステートフルなプロトコルを導入した。NFS v4からはその開発主体がInternet Engineering Task Forceへ移動し、サン・マイクロシステムズに加えネットアップなども規格策定に携わった。

NFS version 4.1 は、2010年1月に 5661}} で、2020年8月に 8881}} で公開された。

NFS version 4.2 は、2016年11月に 7862}} で公開された。

3. 関連プロトコル
----------

NFSに付随するプロトコルは次のようなものがある。

Network Lock Manager UNIX System Vに追加されたファイルロック機構クォータ情報の遠隔通知 NFSサーバが管理するクォータの状態をクライアントに通知するもので、//rquota//とも呼ばれる。なお、クォータ管理そのものはサーバの役割であり、クライアントはその情報を受け取っているだけである。WebNFS ウェブブラウザとNFSを統合し、ファイアウォールを介した利用を実現するNFS v2, v3の拡張

4. アクセスコントロール
-------------

NFS v2およびNFS v3では、ユーザーのアクセス権限にUNIXのユーザー識別子およびグループ識別子をそのまま用いている。 デフォルトではクライアント側に設定された識別子番号がそのままNFSサーバに渡され、サーバはそれを見てアクセスを制御する。クライアントとサーバ間でグループ識別子を別々に管理している場合では、管理者が用意したサーバ側とクライアント側の識別子対応表を参照するか、クライアントが用意したNISサーバあるいは専用のデーモン//ugidd//をサーバが参照するように設定することでアクセスコントロールを行う。

NFS v4では、ユーザー識別子/グループ識別子を直接使うのではなく、文字列としてのユーザー名/グループ名を使用する。更に、ケルベロス認証を利用したユーザ名ベースのアクセスコントロールを新たにサポートした。

4.1. root squash
----------------

一般的に、「NFSクライアント上での管理者特権が適切に管理されている」とは限らないため、管理者権限による無制限なアクセスをNFSクライアントに許可することは危険である。そのため、UNIXシステムでスーパーユーザを示す root  ユーザー識別子0  によるクライアントからのアクセスを、NFSサーバ側でより権限の低いユーザー識別子に強制的に割り当てる//root_squash//という機能を標準で有効にするものが多い。

5. 利用可能なプラットフォーム
----------------

1985年にSunOS 2.0に最初に実装された後、HP-UX、Solaris、NEWS-OS、EWS-UX、Linux、FreeBSDなど多くのUNIX系OSに実装された。その他にもMac OSやWindows Server、クライアントWindowsの一部のエディション、NetWare、AS/400でも利用できる。1990年代初頭、Macintosh用NFSソフトウェアが米Wollongong社によりサポートされたSuperASCII 1991年4月号 。WindowsではServices for UNIXがNFSサーバおよびクライアントの機能を提供している。

6. 注釈
-----

7. 関連項目
-------

Common Internet File System
WebDAV
ネットワークアタッチトストレージ 
TCP Wrapper

8. 参考文献
-------

8.1. 出典
-------

8.2. 各プラットフォームに関する情報
--------------------

Linux
FreeBSD
Solaris