2010年10月22日金曜日

今日はNFSを触ってみました


NFS(Network File System)はLinuxで利用されるファイル共有システムです。


Windowsのようにネットワークに接続されたマシン同士でファイル共有を行うことができます。


NFSを行うには、NFSサーバとNFSクライアントで最低2台のマシンが必要になります。


NFSサーバ側で公開設定されたディレクトリをネットワーク経由でクライアントが利用できる仕組みです。


ファイル共有として利用されるのが多いですが、シチュエーション的にはユーザ個別のディレクトリがある/home/以下を共有すると


他のマシンでも同じ環境を引き継ぐ事ができたりするので複数あるサーバ機などに利用したりします。


今回はVMで、2機のマシンを準備しました。


サーバ:CentOS 64bit 192.168.0.128


クライアント:RedHat 64bit 192.168.0.130



サーバー側の設定


共有したいディレクトリを設定します。


設定ファイル



etc/exports




この設定ファイルに次のように入力します



/home/kojirou/work 192.168.0.130(rw)




これで、/home/kojirou/work ディレクトリを 192.168.0.130からの読み込み/書き込みが可能になります。


192.168.0.0/24 などネットワークを指定することもできます。




共有したディレクトリ 許可するクライアントのIP又はホスト名(rw(読み込み書き込み可能/ro(読み込みのみ))




許可するクライアントは「,」で区切り複数していすることが可能です。




/usr/local 192.168.0.1(ro) 192.168.0.2(ro)


/home 192.168.0.1(rw) 192.168.0.2(rw)




ここまで設定できれば、NFSを起動します。



service nfs start



クライアントの設定


クライアント側では、サーバ側で設定したディレクトリに対してマウントするだけです。



mount -t nfs 192.168.0.128:/home/kojirou/work /home/kojiro/work



mount -t nfs NFSサーバ:NFSサーバ側の共有したディレクトリ クライアント側の展開ディレクトリ


するとエラーが出てしまいました。



mount.nfs: Input/output error.




これは、クライアント側でportmapが起動していないためポートマッピングできないというエラーなのでポートマッパーを起動します。



/usr/sbin/portmap start




そして、再度マウントさせます。何も表示されなければ共有完了です。



セキュリティ


NFSは、垂直型のファイル共有システムなのでNFSサーバが攻撃されてしまえばクライアントは一気に停止する危険性があります。


先ほどクライアント側で起動したポートマッパーは、NFSサーバの接続先をクライアントに伝えるためのデーモンです。


おそらく侵入者はポートマッパーからNFSサービスを受けている接続先を特定し攻撃しようとするでしょう。




それを防ぐために /etc/hosts.allow と /etc/hosts.deny を編集し指定したネットワークからのみのサービスを利用できるようにアクセス制限を行います。




/etc/hosts.allow と /etc/hosts.deny は次のような動作をします。


hosts.allowから許可されているか? (Yes) → サービスにアクセス


(No)↓


/etc/hosts.denyから拒否されているか? (Yes)→アクセス拒否


(No)↓


   サービスにアクセス



2つのファイルはデフォルトでは何も書かれていないのですべてのアクセスを許可しています。


/etc/hosts.allow



portmap: 192.168.0.130



こちらも同様にネットワークを指定することも可能です。


デーモン名:IP/HOST で指定します。


「,」で区切り複数していすることが可能です。


/etc/hosts.deny



portmap:ALL




マウントできない場合


NFSは複数のデーモンを利用しているので、各デーモンごとにポートを開けてる必要があります。


サーバ側で rpcinfo -p コマンドでNFSが利用しているポートを調べることができます。


/etc/init.d/nfs を編集することで任意のポートに変更することもできます。




0 件のコメント:

コメントを投稿