NFS を使うと、ネットワーク経由でディレクトリをマウントできます。 /home などはファイルサーバからマウントしておくと どこでも同じファイルにアクセスできます。
/etc/hosts によるホスト名解決ができるように、 サーバ、クライアントをリストに入れておきます。
/etc/hosts
123.45.67.89 server.hogehoge.ac.jp server
123.45.67.90 client.hogehoge.ac.jp client
NFS サーバでは、デーモンの起ち上げと /etc/exports の記述、 /etc/hosts.allow で portmap の許可出しをします。デーモン
NFS サーバでは、つぎの3つのデーモンを起ち上げます。これらが起動しているかどうかは、ps または rpcinfo -p で 確認できます。
- pormapper
- mountd
- nfsd
% rpcinfo -p program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100005 3 udp 1023 mountd 100005 3 tcp 1023 mountd 100005 1 udp 1023 mountd 100005 1 tcp 1023 mountd 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs起ち上がっていなければ、とりあえず手動で起ち上げます。
# /usr/sbin/portmap
# /sbin/mountd
# /sbin/nfsd
ブート時の自動起ち上げは、/etc/rc.conf に 次の2行を加えます。
/etc/rc.conf
### Network File System: ###
nfs_server_enable="YES"
/etc/exports
マウントを許可するディレクトリとオプションの指定は /etc/exports で行います。
/etc/exports
/usr /usr/local -maproot=0:10 host1 host2 host3
/u2 -alldirs 123.45.67.89
/cdrom -ro host.hogehoge.ac.jp
上の行から説明します。
- /usr と /usr/local は host1, host2, host3 に NFS マウントを許可します。ただし、NFS を介した root でのアクセスは UID=0,GID=10 (のユーザ)として 扱われます
- /u2 以下のディレクトリをどこでも、 IP アドレス 123.45.67.89 のホストで NFS マウントする事を許可します。
- /cdrom は読み出しのみで host.hogehoge.ac.jp に NFS マウントを許可します。
/etc/exports を変更したら、mountd に HUP シグナルを 送って再起動します。
# killall -HUP mountd
/etc/hosts.allow
NFS ではリモートホストからサーバの portmap を使います。 そこで、portmap が使えるように許可を出しておきます。なお、FreeBSD 5.x では portmap ではなく rpcbindの許可を出さないといけないようです。
/etc/hosts.allow
portmap : (host_name or IP_address) : allow
NFS クライアントでは、デーモンの起ち上げと、 マウント指定をします。デーモン
NFS クライアントに必要なデーモンは次の一つ。起ち上がっていなければ、とりあえず手動で起ち上げます。
- nfsiod
# /sbin/nfsiod
ブート時の自動起ち上げは、/etc/rc.conf に 次の1行を加えます。
/etc/rc.conf
nfs_client_enable="YES"
手動マウント
NFS サーバ server の /home をローカルの /mnt に 手動でマウントするときは、次のようにします。
# mount -t nfs server:/home /mnt
mount にもいろいろオプションがあるので、 詳しくは (j)man mount して見て下さい。
ブート時マウント
/etc/fstab に次のような記述を加えておきます。
/etc/fstab
server:/home /mnt nfs rw 0 0
これは常にマウントされた状態を維持する設定ですが、 サーバがダウンするとクライアントも道ずれになります。 また、サーバをダウンさせたままクライアントを再起動させると、 マウントするべきディレクトリを探したまま止まってしまいます。
アクセスしたときのみマウントする設定も可能で、 こちらはサーバがダウンしたときにクライアントが 道ずれにならなくてすみます。
NFS をする場合、NIS (Network Information Service) を使って ユーザ認証をすることもあるのですが、 NIS を使わない時はどのようにしてユーザ認証をすればよいのでしょう? 答えはユーザID(UID) です。計算機はユーザを名前(ユーザ名、ログインネーム)ではなくて、 番号(ユーザID) で認識しています。 このことを理解することは NIS なしに /home を NFS で共有する上で 非常に重要です。 例えば、NFSサーバ host1 と クライアント host2 を考えましょう。 これらのマシンの上で、次のようなユーザID が設定されているとしましょ う。
host1 host2 ユーザ名 ホームディレクトリ ユーザ ID ユーザ ID user1 /home/user1 2001 2002 user2 /home/user2 2002 2001 このとき、host2 の user1 は、NFS でやってきた /home/user1 に 書き込みはできません。なぜなら、host2 の user1 は UID=2002 ですが、 /home/user1 の オーナーは UID=2001 なので、 host1 は「オーナーとは違う人からのアクセス」と解釈するからです。 逆に、host2 の user2 は /home/user1 上で好きなように読み書きできます。 これは非常に困ります。
どうすればよいかはすでにお分かりかと思いますが、 NFS のホストとクライアントでユーザIDを 同じ番号にすればよいのです。 これは、ユーザ登録の時にやっておいた方が楽ですが、 後から変更する場合は vipw で /etc/passwd を編集します。 /etc/passwd は 「:」で区切られたコラムからなり、 UID の欄は左から3つ目です。なお、/etc/passwd を保護するため、 このファイルを 普通の vi では編集しないで下さい。 (man vipw(8) 参照)