NFS サーバ
NFS サーバ側の設定
/etc/rc.conf
rpcbind_enable="YES" nfs_server_enable="YES" mountd_enable="YES" nfs_server_flags="-u -t -n 4" nfs_reserved_port_only="YES" rpc_statd_enable="YES" rpc_lockd_enable="YES"
nfs_server_flags の「-u -t」は「UDP, TCP の両方で待ち受ける」という意味,「-n 4」は 「nfsd のサーバスレッドを 4 つ」という意味である. nfs_reserved_port_only を「YES」にすると,予約ポート(1024 番未満)からの要求のみを受け付ける. rpc_statd_enable は rpc.statd を,rpc_lockd_enable は rpc.lockd を起動時に実行する設定であり, ファイルロックを使用する場合に必要である.
詳しくは man rc.conf, man nfsd, man mountd を参照.
設定を書き込むには sysrc コマンドを使うこともできる. 管理者権限(root 権限)でコマンドを実行する.
sysrc rpcbind_enable="YES"
sysrc nfs_server_enable="YES"
sysrc mountd_enable="YES"
/etc/exports
共有するファイルシステム,共有先のホスト,オプションを 1 行に記述する. ネットワークアドレス,ネットマスクは環境に合わせて設定する必要がある. 詳しくは man exports を参照.
/export -network 192.168.1.0 -mask 255.255.255.0
書き込みを許可せず読み取り専用にする場合は -ro を, サブディレクトリをマウント点として許可する場合は -alldirs を指定する.
/export -alldirs -ro -network 192.168.1.0 -mask 255.255.255.0
NFSv4 を使用する場合は,/etc/rc.conf に nfsv4_server_enable="YES" と nfsuserd_enable="YES" を追加し,/etc/exports の末尾に NFSv4 ツリーの起点を示す V4: 行を書く.
V4: / -network 192.168.1.0 -mask 255.255.255.0
ZFS を使用している場合は,/etc/exports の代わりに ZFS の sharenfs プロパティでも共有を設定できる(man zfs-share).
NFS サーバの起動と設定の反映
管理者権限(root 権限)でコマンドを実行する. nfsd を起動すると mountd も起動する.
service nfsd start
mountd は起動時にのみ /etc/exports を読み込む. /etc/exports を編集した後は,管理者権限(root 権限)で次のコマンドを実行し,設定を読み直させる.
service mountd reload
共有されているファイルシステムの確認は,管理者権限(root 権限)は不要で,次のコマンドで行う.
showmount -e localhost
アクセス制御
NFS へのアクセス制限は,パケットフィルタ(pf, ipfw など)で rpcbind (111/tcp, 111/udp), nfsd (2049/tcp, 2049/udp), mountd への到達を制限する方法が確実である.
TCP Wrapper (/etc/hosts.allow) を併用する場合,FreeBSD の rpcbind は 起動オプション -W を与えたときにのみ libwrap による制御が有効になる. /etc/rc.conf に次を記述する.
rpcbind_flags="-W"
/etc/hosts.allow の記述例を次に示す. FreeBSD では hosts.deny は使用せず,許可・拒否の設定はすべて /etc/hosts.allow に記述する.
ALL : localhost 127.0.0.1 : allow # Rpcbind is used for all RPC services: protect your NFS! rpcbind : 192.168.1.0/255.255.255.0 : allow rpcbind : ALL : deny ALL : ALL : deny
詳しくは man hosts_access, man hosts_options を参照.
NFS クライアント側の設定
/etc/rc.conf
FreeBSD をクライアントとする場合は次のように設定する. rpcbind は,ファイルロック(rpc.statd, rpc.lockd)を使用する場合にクライアント側でも必要である.
rpcbind_enable="YES" nfs_client_enable="YES" rpc_statd_enable="YES" rpc_lockd_enable="YES"
マウント
管理者権限(root 権限)でコマンドを実行する. 次は,サーバ server の /export を,クライアントの /mnt にマウントする例である.
service nfsclient start
mount server:/export /mnt
起動時に自動でマウントする場合は,/etc/fstab に次の行を追加する.
server:/export /mnt nfs rw 0 0