NFSv4で繋げてみる
kerberos対応のみ注目していたが、調べるとそれ以外にも利点があるみたい。
http://www.snia-j.org/tech/WH/NFSv4/files/NFSv4.pdf
誤解していたが、kerberosによるユーザ認証は必須ではなく、従来のUID/GIDによるマッチングでも利用できる
また従来のままの/etc/exportsフォーマットでもNFSv4は効いているみたい。
NFSv4でkerberosを使う方式はこちらを参照NIS/NFSv4/krb5
[root@nfs ~]# yum install nfs-utils
[root@nfs ~]# chkconfig --list
(中略)
nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off
nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off
rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rpcgssd 0:off 1:off 2:off 3:on 4:on 5:on 6:off /etc/sysconfig/nfsでSECURE_NFS="yes"なら稼働
(中略)
[root@nfs ~]#
基本従来型のフォーマットも使えるみたい。NFSサーバにて
[root@nfs ~]# cat /etc/exports
/export *.chaperone.jp(rw)
/home *.chaperone.jp(rw)
/opt/src *.chaperone.jp(rw)
[root@nfs ~]#
クライアント側で静的NFSv4マウント
[root@client ~]# mount -t nfs4 nfs:/home /home
[root@client ~]# mount -t nfs4 nfs:/export /export
[root@client ~]# mount -t nfs4 nfs:/opt/src /opt/src
[root@client ~]# mount
(中略)
nfs:/home on /home type nfs4 (rw,addr=192.168.0.41,clientaddr=192.168.0.20)
nfs:/export on /export type nfs4 (rw,addr=192.168.0.41,clientaddr=192.168.0.20)
nfs:/opt/src on /opt/src type nfs4 (rw,addr=192.168.0.41,clientaddr=192.168.0.20)
[root@client ~]#
とtypeが nfs4 を示している。またnfs4と指定しなくても mount -t nfs nfs:/home /home なら
nfs:/home on /home type nfs (rw,vers=4,addr=192.168.0.41,clientaddr=192.168.0.20)
とvers=4表記される。
一方、従来型のフォーマットのままならNFSv3でマウントも当然ながら可能
[root@client ~]# mount -t nfs -o vers=3 nfs:/home /home
[root@client ~]# mount -t nfs -o vers=3 nfs:/export /export
[root@client ~]# mount -t nfs -o vers=3 nfs:/opt/src /opt/src
[root@client ~]# mount
(中略)
nfs:/home on /home type nfs (rw,vers=3,addr=192.168.0.41)
nfs:/export on /export type nfs (rw,vers=3,addr=192.168.0.41)
nfs:/opt/src on /opt/src type nfs (rw,vers=3,addr=192.168.0.41)
[root@client ~]#
となる。
NFSv4で導入されたexportfsの新しい記述方法かな。公開するディレクトリで構成された擬似的なファイルシステムを作り、そのトップディレクトリを公開します。/homeと/expot、/opt/srcの公開なら、例えば /nfs を頂点としてファイルシステムを組み直して
[root@nfs ~]# mkdir -p /nfs/{home,export,src}
[root@nfs ~]# mount --bind /home /nfs/home
[root@nfs ~]# mount --bind /export /nfs/export
[root@nfs ~]# mount --bind /opt/src /nfs/src
/nfs を公開します。
*このmountコマンドのbindオプションで繋ぐと/homeと/nfs/homeも同じものに見えます
再起動のたびにmountコマンドを打つわけには行かないので/etc/fstabには
[root@nfs ~]# cat /etc/fstab
/dev/sda2 / ext4 defaults 1 1
(略)
/home /nfs/home none bind 0 0
/export /nfs/export none bind 0 0
/opt/src /nfs/src none bind 0 0
[root@nfs ~]#
と記述する。
このような擬似ファイルシステムを作成後に /etc/exports を作る
[root@nfs ~]# vi /etc/exports
/nfs *.chaperone.jp(rw,sync,fsid=0)
/nfs/home *.chaperone.jp(rw,sync,nohide)
/nfs/export *.chaperone.jp(rw,sync,nohide)
/nfs/src *.chaperone.jp(rw,sync,nohide)
[root@nfs ~]#
[root@nfs ~]# exportfs -avr
そしてNFSクライアントからマウントすると
[root@client ~]# mount -t nfs4 nfs:/home /home
[root@client ~]# mount -t nfs4 nfs:/export /export
[root@client ~]# mount -t nfs4 nfs:/src /opt/src
[root@client ~]# mount
(中略)
nfs:/home on /home type nfs4 (rw,addr=192.168.0.41,clientaddr=192.168.0.20)
nfs:/export on /export type nfs4 (rw,addr=192.168.0.41,clientaddr=192.168.0.20)
nfs:/src on /opt/src type nfs4 (rw,addr=192.168.0.41,clientaddr=192.168.0.20)
[root@client ~]#
と認識される。* nfs:/src である事に注目
ただし擬似ファイルシステム構成だとNFSv3でマウントはできないみたい。
[root@client ~]# mount -t nfs -o vers=3 nfs:/home /home
mount.nfs: access denied by server while mounting nfs:/home
[root@client ~]# mount -t nfs -o vers=4 nfs:/home /home
[root@client ~]# mount |grep home
nfs:/home on /home type nfs (rw,vers=4,addr=192.168.0.41,clientaddr=192.168.0.20)
[root@client ~]#
CentOS5.10ではNFSv4が対応している。ただし-o vers=4は使えず、-t nfs4として使える
[root@client5 ~]# mount -t nfs -o vers=4 nfs:/home /home
'vers=4' is not supported. Use '-t nfs4' instead.
[root@client5 ~]#
[root@client5 ~]# mount -t nfs4 nfs:/home /home
[root@client5 ~]# mount
(中略)
nfs:/home on /home type nfs4 (rw,addr=192.168.0.41)
[root@client5 ~]#
*NFSサーバの/etc/exportsはどちらの方式でも接続できた。
ただ、、/etc/exportsを擬似ファイルシステム形式でNISのauto.homeを
[root@client5 ~]# ypcat auto.home
-rw,vers=4 nfs:/export/saber
-rw,vers=4 nfs:/export/illya
[root@client5 ~]#
とすると接続できない。/etc/exportsを従来形式なら接続できたが、
[root@client5 ~]# (cd /home/saber)
[root@client5 ~]# mount
(中略)
nfs:/export/saber on /home/saber type nfs (rw,addr=192.168.0.41)
[root@client5 ~]#
とNFSv3で接続になるようだった。
NFSサーバ/etc/exports | NFSクライアント | NFSマウントコマンド | 接続 | 備考 |
従来型 | CentOS6 | mount -t nfs nfs:/home /home mount -t nfs -o vers=4 nfs:/home /home mount -t nfs4 nfs:/home /home | ○ NFSv4 | |
従来型 | CentOS6 | mount -t nfs -o vers=3 nfs:/home /home | ○ NFSv3 | |
擬似ファイルシステム | CentOS6 | mount -t nfs nfs:/home /home mount -t nfs -o vers=4 nfs:/home /home mount -t nfs4 nfs:/home /home | ○ NFSv4 | |
擬似ファイルシステム | CentOS6 | mount -t nfs -o vers=3 nfs:/home /home | × NFSv3 | (1) |
従来型 | CentOS5 | mount -t nfs4 nfs:/home /home | ○ NFSv4 | |
従来型 | CentOS5 | mount -t nfs -o vers=4 nfs:/home /home | × NFSv4 | (2) |
従来型 | CentOS5 | mount -t nfs nfs:/home /home mount -t nfs -o vers=3 nfs:/home /home | ○ NFSv3 | |
擬似ファイルシステム | CentOS5 | mount -t nfs4 nfs:/home /home | ○ NFSv4 | |
擬似ファイルシステム | CentOS5 | mount -t nfs -o vers=4 nfs:/home /home | × NFSv4 | (2) |
擬似ファイルシステム | CentOS5 | mount -t nfs nfs:/home /home mount -t nfs -o vers=3 nfs:/home /home | × NFSv3 | (3) |
擬似ファイルシステム | CentOS5 | mount -t nfs nfs:/nfs/home /home mount -t nfs -o vers=3 nfs:/nfs/home /home | ○ NFSv3 |
備考
1):mount.nfs: access denied by server while mounting nfs:/home
2):'vers=4' is not supported. Use '-t nfs4' instead.
3):mount: nfs:/home failed, reason given by server: Permission denied
*/proc/fs/nfsfs/volumesからNFS接続のバージョンを確認
自分のファイル/ディレクトリなのに所有者が nobody:nobody となってしまった。
[root@client ~]# ls -ld /home/saber
drwxr-xr-x 2 nobody nobody 59 9月 21 11:18 2014 /home/saber
[root@client ~]#
正しく自分のIDが入ったファイル名にするには auto.home に vers=3 とNFSv3としてマウントすれば回避される
[root@client ~]# ls -ld /home/user40
drwxr-xr-x 2 nobody nobody 59 9月 21 11:18 2014 /home/user40
[root@client ~]# ls -ld /home/user39
drwxr-xr-x 2 user39 g8 59 9月 21 11:18 2014 /home/user39
[root@client ~]# mount
(中略)
nfs2:/export/user40 on /home/user40 type nfs (rw,sloppy,vers=4,addr=192.168.0.44,clientaddr=192.168.0.20)
nfs2:/export/user39 on /home/user39 type nfs (rw,nfsvers=3,sloppy,addr=192.168.0.44)
[root@client ~]#
だが、せっかくなのでNFSv4のまま動かしたい。この場合はNFSv4でもユーザ名が判明すればいいみたい。
NFSv4の /etc/init.d/nfs で連動する rpc.idmapd は、/etc/idmapd.conf にてその動作が定義される。
このファイルの Method = nsswitchは、/etc/nsswitch.conf でIDと名前を決める事を意味する。
NFSv3ではypbindの稼働は不要なのだが、NFSv4ではypbindを動かす必要があるみたい。
*あと、/etc/idmapd.confのDomain =も重要だが、同一ドメインなら記述不要かも
擬似ファイルシステム構成下記の様にして
[root@c ~]# cat /etc/exports
/nfs 192.168.0.0/255.255.255.0(rw,sync,insecure,fsid=0)
/nfs/home 192.168.0.0/255.255.255.0(rw,sync,insecure,nohide)
/nfs/Appl 192.168.0.0/255.255.255.0(rw,sync,insecure,nohide)
[root@c ~]# exportfs -avr
exporting 192.168.0.0/255.255.255.0:/nfs/Appl
exporting 192.168.0.0/255.255.255.0:/nfs/home
exporting 192.168.0.0/255.255.255.0:/nfs
[root@c ~]#
MacOSX側でマウントしてみた
mac:~ foo$ sudo /sbin/mount -t nfs -o vers=4 192.168.0.3:/home /mnt/nfs
mac:~ foo$
mac:~ foo$ nfsstat -m
/mnt/nfs from 192.168.0.3:/home
-- Original mount options:
General mount flags: 0x0
NFS parameters: vers=4
File system locations:
/home @ 192.168.0.3 (192.168.0.3)
-- Current mount parameters:
General mount flags: 0x4000000 multilabel
NFS parameters: vers=4.0,tcp,port=2049,hard,nointr,noresvport,(略),sec=sys
File system locations:
/home @ 192.168.0.3 (192.168.0.3)
Status flags: 0x0
mac:~ foo$
と成功
従来形式の
[root@c ~]# cat /etc/exports
/home 192.168.0.0/255.255.255.0(rw,insecure)
[root@c ~]# exportfs -avr
exporting 192.168.0.0/255.255.255.0:/home
[root@c ~]#
でもMacOSX側で
mac:~ foo$ sudo /sbin/mount -t nfs -o vers=4 192.168.0.3:/home /mnt/nfs
mac:~ foo$ nfsstat -m
/mnt/nfs from 192.168.0.3:/home
-- Original mount options:
General mount flags: 0x0
NFS parameters: vers=4
File system locations:
/home @ 192.168.0.3 (192.168.0.3)
-- Current mount parameters:
General mount flags: 0x4000000 multilabel
NFS parameters: vers=4.0,tcp,port=2049,hard,nointr,noresvport,(略),sec=sys
File system locations:
/home @ 192.168.0.3 (192.168.0.3)
Status flags: 0x0
mac:~ foo$
とvers=4なNFSv4でマウントはできる。っが、UID/GIDの問題が別途ある