Linux系统下NFS的配置及应注意的问题(3)

如果我们修改了/etc/exports后,并不需要重启nfs服务,只要用exportfs重新扫描一次/etc/exports,并且重新加载即可

语法: exportfs [-aruv]

-a: 全部挂载(或卸载) /etc/exports档案内的设定

-r: 重新挂载/etc/exports里面的设定,也同步的更新/etc/exports和/var/lib/nfs/xtab里面的内容

-u:卸载某一目录

-v:在export的时候,将分享的目录显示到荧屏上.

例子

#exportfs -rv //重新export一次

#exportfs -au //全部卸载

10./var/lib/nfs/xtab里面可以查看每个目录的分享权限(但是我怎么也没有找到,靠,找到了,原来要有人mount上nfs后才会出现内容),如:

/tmp node3(ro,sync,wdelay,

hide,secure,root_squash,

no_all_squash,subtree_check,

secure_locks,mapping=identity,

anonuid=-2,anongid=-2)

为什么anonuid=-2呢?呵呵!其实它说的是将 65536 - 2 的值,也就是 65534 的那个 UID 啦!对照一下 /etc/passwd ,你就会发现,哇!原来那就是 nobody 的啦

11.showmount命令

语法: showmount [-ae] hostname

-a: 显示目前主机与client所连上来的使用目录的状态

-e: 显示hostname的/etc/exports里面共享的目录

12.查看激活的portnumber

#netstat -utln

nfs 自己所开启的 port ,就是那个 2049 的 port 啦!就是 NFS 主要产生的 port NFS server 在前面我们就提过了,他是 RPC server 的一种,而 NFS 由于提供了多个 program ( 例如 rpc.mountd, rpc.rquotad, rpc.nfsd... ) ,因此就需要激活多个 port 了!而且这些 port 是『随机产生的』,也就是那个 port number 不会是固定的啦!每次 restart nfs 都会得到不一样的 port number 呢!那么 Client 端怎么知道要连接上那个 port 来呼叫需要的 program 呢?呵呵!那就是 sunrpc ( port 111 ) 那个 portmap 服务所产生的 port number 的功用啦!Client 会先连接到 sunrpc 那个 port 去知道应该到那个 port 去呼叫所需要的程序!所以啰, rpc.xxxx 等之类的 daemon 自然就不需要有固定的 port number 啰!

***********************************************

NFS客户端的设定

#mount -t nfs hostname(orIP):/directory /mountpoint 搞定,就这么简单

为了担心会不小心将 NFS 端挂进来的具有 SUID 权限档案的程序执行,root可以将NFS 所分享的目录以较为安全的情况挂载进来,可以

#mount -t nfs -o nosuid,ro hostname:/directory /mountponit

可能出问题的地方:

1.权限的设定不符合

2.忘记了激活portmap,此时会报错:

mount: RPC: Port mapper failure - RPC: Unable to receive 或者

mount: RPC: Program not registered

那么,启动portmap,并且重新启动nfs

#service portmap start

#service nfs restart

3.被防火墙搞掉

重新设置防火墙,包括iptables与TCP_Wrappers,因为激活了portmap,所以port 111必须提供出去.因此在iptables rules中,要增加:

iptables -A INPUT -p TCP --dport 111 -j ACCEPT

iptables -A INPUT -p UDP --dport 111 -j ACCEPT

如果还不行,那就是TCP_Wrappers的问题,检查/etc/hosts.deny,如果有一行是:

ALL: ALL: deny

那就必须在/etc/hosts.allow中增加:

portmap: ALL: allow

如果我们的NFS针对内部网络开发,对于外部网络只对学术网络开发(140.0.0.0/8),可以:

iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT

iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT

iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT

iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT

还可以使用TCP_Wrappers,在/etc/hosts.allow里面规定连上 NFS 主机的主机 IP 与名称,例如

#vi /.etc/hosts.allow

portmap: 192.168.0.0/255.255.255.0 :allow

portmap: 140.113.23.23 :allow

portmap: .sdu.edu.cn :allow

RPC Server的相关命令

rpcinfo

#rpcinfo -p hostname(orIP)

要注意的问题:

需要注意的是,由于 NFS 使用的这个 RPC 在 client 端连上主机时,那么你的主机想要关机,那可就会成为『不可能的任务』!我还不知道正确的原因是什么,但是,如果你的 Server 上面还有 Client 在联机,那么你要关机,可能得要等到数个钟头才能够正常的关机成功!嗄!真的假的!不相信吗?不然您自个儿试试看! ^_^!所以啰,建议您的 NFS Server 想要关机之前,能更先『关掉 portmap 与 nfs 』这两个东西!如果无法正确的将这两个 daemons 关掉,那么先以 netstat -utlp 找出 PID ,然后以 kill 将他关掉先!这样才有办法正常的关机成功喔!这个请特别特别的注意呢!

在TurboLinux8.0 for AMD64 (kernel 2.4.21-4smp),mount NFS时候报错为:

portmap: server localhost not responding, timed out

解决办法:

mount -t nfs -o nolock node1:/public /public

即增加-o nolock参数,原因:

Unfsd doesn't support NLM locking, and it's causing the lockd daemon to be started (which again requires the portmapper to be installed etc.)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/be779f3dc8075fd14f6ed3e0b9a3cb2d.html