Network File System




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




目次






  • 1 概要


  • 2 歴史


    • 2.1 NFS version 1


    • 2.2 NFS version 2


    • 2.3 NFS version 3


    • 2.4 NFS version 4




  • 3 関連プロトコル


  • 4 アクセスコントロール


    • 4.1 root squash




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


  • 6 注釈


  • 7 関連項目


  • 8 参考文献


    • 8.1 各プラットフォームに関する情報







概要


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


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



歴史



NFS version 1


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



NFS version 2


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



NFS version 3


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



  • ファイルサイズおよび読み書き時に指定するオフセットの型を32bitから64bitに拡張し、4GiB以上のファイルをサポートした。

  • 書き込み性能を向上させるため、サーバへの非同期書き込みをサポートした。

  • ファイル属性を別途取得するプロシージャ呼び出しを省くために、多くのプロシージャでその返値にファイル属性を追加した。

  • ディレクトリを走査する時、そこに含まれるファイル名に加えファイルハンドルと属性を一度に取得できるREADDIRPLUSプロシージャを追加した。


また、NFS v2の時点ですでにTCPによる転送をサポートするベンダーが複数存在したことから、サン・マイクロシステムズはNFS v3からTCP転送を仕様に追加した。これによりWANを介したNFSがより安定して動作するようになった。



NFS version 4


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



関連プロトコル


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



Network Lock Manager


UNIX System Vに追加されたファイルロック機構


クォータ情報の遠隔通知

NFSサーバが管理するクォータの状態をクライアントに通知するもので、rquotaとも呼ばれる。なお、クォータ管理そのものはサーバの役割であり、クライアントはその情報を受け取っているだけである。

WebNFS


ウェブブラウザとNFSを統合し、ファイアウォールを介した利用を実現するNFS v2, v3の拡張



アクセスコントロール


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


NFS v4ではそれらに加え、Kerberos認証を利用したユーザ名ベースのアクセスコントロールを新たにサポートした。



root squash


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



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


1985年にSunOS 2.0に最初に実装された後、多くのUNIX系OSに実装された。その他にもMac OSやWindows Server、クライアントWindowsの一部のエディション、NetWare、AS/400でも利用できる。WindowsではServices for UNIXがNFSサーバおよびクライアントの機能を提供している。





注釈





  1. ^ 「NFSクライアントからの『管理者を自称するユーザ』によるアクセスでも、それが『真の管理者ユーザ』とは限らず、実際には『管理者を詐称した一般ユーザ』によるアクセス、ということがあり得る」ということ。


  2. ^ ユーザ識別子として伝統的に使用されていた「16ビット長の符号あり整数」としての"-2"は、「16ビット長の符号なし整数」「32ビット長以上の整数」における"65534"と同値となる。かつては識別子"-2"に"nobody"というユーザ名が割り当てられており、その後"nobody"のユーザ識別子は"65534"に変更された。今日のUNIX系システムでは、識別子"65534"や"-2"に対応するユーザ名は"nfsnobody"や"nobody4"などとされている。




関連項目



  • Common Internet File System

  • WebDAV


  • ネットワークアタッチトストレージ (NAS)

  • TCP Wrapper



参考文献



  • RFC 1085

  • RFC 1813

  • RFC 3530

  • Internet Engineering Task Force (2006年3月24日). “Network File System Version 4 (nfsv4) Charter”. 2007年10月17日閲覧。


  • Zadok, Erez (2001). Linux NFS and Automounter Administration. Sybex Inc. ISBN 978-0-7821-2739-3. 
    • イレズ ザドック 『NFS & Amd』 槌田 浩一、翔泳社、2003年。ISBN 978-4-7981-0104-0。



  • Eisler, Mike; Ricardo Labiaga, Hal Stern (2001). Managing NFS and NIS (2nd Edition ed.). O'Reilly Media, Inc.. ISBN 978-1-56592-510-6. 
    • ハル スターン、リカルド ラビアガ、マイク アイスラー 『NFS&NIS』 砂原 秀樹, 木下 哲也、オライリー・ジャパン、2002年、第二版。ISBN 978-4-87311-078-3。




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



  • Linux
    • Tavis Barr; Seth Vidal, Tom McNeal (2002年11月16日). “Linux NFS-HOWTO”. 2007年10月17日閲覧。


  • FreeBSD
    • Swingle, Bill (2000年3月4日). “FreeBSD ハンドブック Chapter 21.6 NFS”. 2016年11月27日閲覧。


  • Solaris
    • Sun Microsystems, Inc.. “Solaris のシステム管理 (ネットワークサービス)”. 2007年10月17日閲覧。









Popular posts from this blog

How to reconfigure Docker Trusted Registry 2.x.x to use CEPH FS mount instead of NFS and other traditional...

is 'sed' thread safe

How to make a Squid Proxy server?