SSH経由でNFSv3を使う
おおむねdarwin(MacBook ProのうえのSnow Leopard)のうえで仕事したり遊んだり、仮想機械またはネットワーク(あるいはその両方)のうえのUNIXもしくはUNIXみたいなシステムにSSHでログインして暮らしている。リモートからローカルのファイルにアクセスしたいときがときどきある。
ときどきあるので、NFSをSSHで転送している。問題はdarwinがNFSv4に対応していない点にある。対応していないので、NFSで利用するポートを限定する必要がある。Linux JFのhttp://www.linux.or.jp/JF/JFdocs/NFS-HOWTO/security.html#NFS-SSHが参考になる。以下、darwinと書いたとき、Snow Leopardのことを指す。
darwinのnfsdはlaunchdから起動される。/etc/exportsにエクスポートの設定が書かれているとnfsdが起動する。ちなみに初期状態だと/etc/exportsにはなにも書かれていない。たとえば、feedfaceというユーザの$HOME/Shareというディレクトリをエクスポートする設定を
/Users/feedface/Share -mapall=feedface 127.0.0.1
と書く(http://developer.apple.com/Mac/library/documentation/Darwin/Reference/ManPages/man5/exports.5.html参照)。
次に、nfsdが利用するポートを限定する必要があるので/etc/nfs.confに設定する。ちなみに初期状態だと/etc/nfs.confは存在しない(他の方法としてnfsdの引数で指定する方法もある)。nfsdが6049番ポートを、mountdが6050番ポートを利用し、非特権ポートからのマウントを許可するために
nfs.server.mount.port = 6050 nfs.server.mount.require_resv_port = 0 nfs.server.port = 6049
と書く(http://developer.apple.com/Mac/library/documentation/Darwin/Reference/ManPages/man5/nfs.conf.5.html参照)。もちろん指定するポートはなんでもいい。
ここまで設定したら、
ssh -R 6049:localhost:6049 -R 6050:localhost:6050 remote
とかやってリモート転送付きでSSHする。リモートからのマウントは、たとえばLinuxの場合、
sudo mount -t nfs -o port=6049,mountport=6050,nolock,tcp \ localhost:/Users/feedface/Share /mnt/feedface-share
とかする。