manekineko倉金家ホームページ

趣味の部屋/サーバー構築メモ

4.NFS

2007年2月20日
ネットワークファイルシステムNFSを使って他のコンピュータとのファイル共有を設定します。


バックアップ、設定やデータの移動、確認などに他のコンピュータとのファイル共有が不可欠です。
そのためにネットワークファイル共有システム(NFS)を使うこととし、接続許可マシンの設定、ファイルアクセスの設定、起動設定などを行います。

接続許可マシンの設定
マシンのIPアドレスで接続の許可、不許可を設定します。
設定ファイル
/etc/hosts.allow
/etc/hosts.deny
に接続許可マシンを設定しますが基本的にすべてのマシンを不許可とし、許可したIPアドレスのマシンのみが繋がるように設定します。

まず /etc/hosts.deny に以下を記述します。
portmap: ALL
lockd: ALL
mountd: ALL
rquotad: ALL
statd: ALL
これで基本的にすべてのマシンが接続拒否され、以下の/etc/hosts.allow に記述されたマシンだけが接続許可されます。

/etc/hosts.allow に許可するマシンを記述します。
私の家のLANのアドレスは192.168.を頭に使っています。
portmap: 192.168.0.0/255.255.0.0
lockd: 192.168.0.0/255.255.0.0
mountd: 192.168.0.0/255.255.0.0
rquotad: 192.168.0.0/255.255.0.0
statd: 192.168.0.0/255.255.0.0

現在動いている他のマシンにはすでに同様の設定がしてあります。

許可するディレクトリの設定
接続を許可されたマシンに対して、さらにどのディレクトリを公開するかとそのアクセスモードの設定を行います。

設定ファイルは /etc/exports
たとえば /homeディレクトリを他のマシンに公開するには
/home 192.168.0.0/255.255.0.0(ro)
とします。
(ro)はread only すなわち読み出しのみ許可する設定です。
書込み可を設定したければ
/home 192.168.0.0/255.255.0.0(rw,sync)
とします。
rwは読み書き可能、syncは実際にファイルを書き込んでから書込み完了を通知する設定です。(少し遅くなりますがsyncを指定しておいた方が安全そうです。)
その他設定ファイルのある/etcやファイルの受け渡しをするためのディレクトリなどを作成して設定しておきます。
/etc 192.168.0.0/255.255.0.0(ro)
/home 192.168.0.0/255.255.0.0(ro)
/Data 192.168.0.0/255.255.0.0(rw,sync)
...

マウントポイントの設置
他のコンピュータのファイルを読み書きできるようにするためには、そのディレクトリを表示する場所(マウントポイント)を作成しなくてはなりません。
/(ルートディレクトリ)の中のmntというディレクトリの中にそれを作ります。
/mntをファイルブラウザで開き、「新規作成」でフォルダ(ディレクトリ)を作ります。
名前はわかれば何でもいいのですが、私はディレクトリ名.マシン名を使います。
こちらのマシン名をjiji、相手のマシン名をbabaとすると
/mnt/etc.baba
/mnt/home.baba
/mnt/Data.baba
という具合です。
相手のマシンにも同様に
/mnt/etc.jiji
/mnt/home.jiji
/mnt/Data.jiji
などが設置してあります。

だんだんjijibaba合体の時が近づいてまいりました。

マウント情報の設定
/etc/fstabに以下のようなマウント情報を追加します。
(相手のマシンのアドレスを192.168.1.2として)
192.168.1.2:/etc  /mnt/etc.baba  nfs noauto,owner 0 0
192.168.1.2:/home /mnt/home.baba nfs noauto,owner 0 0
192.168.1.2:/Data /mnt/Data.baba nfs noauto,owner 0 0
/etc/fstabは起動時に読み込まれますが、このときにマウントされるようにすると(noautoのところをautoにすると)マウントされるマシンが稼動していない場合はすんなり起動しなくなります。マウントしようとして長時間待ち続け、タイムアウトするまで起動しません。
とりあえずマウント情報だけ覚えこませておいて、必要なときにマウントするのが正解です。

/etc/fstabをsaveするとマウント情報が変更されたがどうするかとマウントポイントごとに聞いてきますので、とりあえず何もしないを選択します。(条件が整っていればマウントして表示してもかまわないでしょう。)

マウントのテスト
ターミナルから
mount /mnt/home.baba
と打ち込みますと、babaホストの/homeディレクトリが/mnt/home.babaにマウントされます。
他のマウントポイントも同様にテストします。

ここまでは問題なくすんなりいきました。

NFSサービスの設定
以上は相手のファイルシステムをマウントするための設定で、こちらのファイルシステムを相手に公開するためにはもう少し設定が必要になります。

NFSサービスを使う設定をします。
メニューのシステム−サービスの管理を開き、「フォルダの共有サービス(NFS)」にチェックを入れます。
ここで繋いでみると...繋がりません。どうやらファイヤウォールが邪魔をしているようです。

細かい調査はやめておいて/etc/sysconfig/iptablesをエディタで開き
-A RH-Firewall-1-INPUT -i lo -j ACCEPT という行の下に
-A RH-Firewall-1-INPUT -s 192.168.0.0/16 -j ACCEPT を書き加えます。
この意味はLAN内からのすべてのサービス要求を通すということですが、LANは我が家内だけで安全だし、最終的には他の各種のサービスやサーバーの設定の際もめんどうがないのでこうしておきます。但しこのマニュアルでのカスタマイズはGUIでファイアウォール設定をすると消えてしまいます(マニュアルでのカスタマイズは推奨しないと書いてある)。
ただ無線LANを使っている場合は無線LANのセキュリティーを充分確保しておく必要があります。(あとで調べたところNFSは動的にポートを割り当てるので、ファイアウォールを使いたければポートの固定というめんどうなことをしなければならないということらしい。)

コンピュータを再起動して相手のコンピュータでこちらのファイルシステムがマウントできることを確認します。(個々のサービスを再起動または起動してもよいが、私はいつも思い切りコンピュータを再起動します。)

これで相手のコンピュータからもこちらのファイルが見れて無事繋がりました。

マウント用スクリプトの作成
いちいちマウントするのにターミナルから打ち込むのも面倒なので、マウント用のスクリプトを書いて実行可能権限をつけてデスクトップに置いておきます。
ファイル名はmount-NFS.shとでもして、内容は
#! /bin/sh
mount /mnt/etc.baba
mount /mnt/home.baba
....
といった具合です。

また併せてアンマウント用のスクリプトも作っておきました。
同様にumount-NFS.shをつくって
#! /bin/sh
umount /mnt/etc.baba
umount /mnt/home.baba
....
これでクリック一発、マウント/アンマウントが可能です。

(参考) http://www.linux.or.jp/JF/JFdocs/NFS-HOWTO/server.html


(追記)NFS4でユーザとグループがうまく取得できない問題。
 その後ずっとNFSを使っていましたが、あるとき新しいサーバー構築の際、NFS4ではファイルのユーザとグループがうまく取得できずすべて nobody になってしまう現象に遭遇しました。
原因はわかって対処しましたが詳細については、
サーバー構築メモ その3/各サーバーの設定:ネットワークファイルシステム NFS に。