2 Linux下 NFS 服务端的设置
2.1 在Linux下配置NFS共享目录
下面以实例来讲述如何在Linux下配置NFS服务器,假定我们需要共享的目录是/vmsnfs。
如果这个目录还不存在,那么就先创建它;否则,跳过此步。
mkdir /vmsnfs
将该目录中所有文件和子目录的属主和组更改为nfsnobody。
chown -R nfsnobody /vmsnfs
chgrp -R nfsnobody /vmsnfs
或者并作一条执行
chown -R nfsnobody:nfsnobody /vmsnfs
注:如果以后直接在服务器上的共享目录创建文件或目录,要记得将属主和组设置为nfsnobody。否则客户端在访问时会出现“Permission denied”。
在/etc/exports文件中添加所需要共享的目录及参数,比如
/vmsnfs *(rw,async)
这里的意思是说,需要共享/vmsnfs这个目录,对所有客户端(*)都是可读写的(rw),并且是异步方式来访问。 因为不设置其他参数, 客户端创建文件或目录时默认的属主和组就是nfsnobody,即使客户端使用的账号是root。这也就是上面为什么要更改文件或目录的属主和组为nfsnobody的原因。
让共享目录生效
(重新)启动nfs服务
service portmap start
service nfs restart
或者
exportfs -a
检查防火墙设置
如果开启了防火墙,那么就要检查一下与nfs有关的端口是否允许访问。
目前我尝试了一些方法,都没法在开启防火墙的情况下正常使用nfs,所以干脆把防火墙关掉了。
chkconfig iptables off
service iptables stop
有这方面经验的大虾请帮忙补充一下解决办法。
如果要永久的共享此目录,最好将相关的服务设置为开机自动启动。
chkconfig portmap on
chkconfig nfs on
至此,在Linux下配置NFS服务端的任务就完成了。(建议:重启一下系统确认配置能自动设置)
2.2 在Linux下配置NFS的其它问题
Q:能限定共享目录客户端的网段和读写权限吗?
A:可以。比如:可以设置有些网段或机器是只读的,有些是可读写的。如下所示:
/vmsnfs 192.168.0.0/24(rw,async) 192.168.1.0/255.255.255.0(ro,sync)
/vmsnfs 192.168.0.0/24(rw) *(ro)
/vmsnfs 192.168.6.179(rw) 192.168.6.17(ro)
如果想了解更多NFS配置参数,请参考NFS相关资料【1】。
Q:怎么确认nfs共享服务已经在运行了?
A:使用chkconfig命令查看portmap和nfs服务是否都已经启动,如下所示:
[root@ ~]# chkconfig --list portmap
portmap 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@ ~]# chkconfig --list nfs
nfs 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@ ~]#
Q:怎么确认某个目录已经被分享?
A:使用exportfs可以看到共享目录列表,exportfs -v可以看到更详细的信息。
[root@ ~]# exportfs
/vmsnfs <world>
[root@ ~]# exportfs -v
/vmsnfs <world>(rw,async,wdelay,root_squash,no_subtree_check,anonuid=65534,anongid=65534)
[root@ ~]# showmount -e
Export list for new55:
/vmsnfs *
[root@ ~]#
Q:修改了/etc/exports如何使之生效?
A:有多种方式,如下之一:
exportfs -a
exportfs -r
service nfs restart
Q:如何显示哪些端口用来提供rpc服务?
A:rpcinfo -p 或者 rpcinfo -p localhost
在 NFS服务没有启动时
[root@ ~]# rpcinfo -p
程序 版本 协议 端口
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 984 status
100024 1 tcp 987 status
启动 NFS服务之后
[root@ ~]# rpcinfo -p
程序 版本 协议 端口
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 984 status
100024 1 tcp 987 status
100011 1 udp 1006 rquotad
100011 2 udp 1006 rquotad
100011 1 tcp 1009 rquotad
100011 2 tcp 1009 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100021 1 udp 34440 nlockmgr
100021 3 udp 34440 nlockmgr
100021 4 udp 34440 nlockmgr
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100021 1 tcp 37635 nlockmgr
100021 3 tcp 37635 nlockmgr
100021 4 tcp 37635 nlockmgr
100005 1 udp 609 mountd
100005 1 tcp 612 mountd
100005 2 udp 609 mountd
100005 2 tcp 612 mountd
100005 3 udp 609 mountd
100005 3 tcp 612 mountd
Q:怎么看哪些客户端正在用共享目录?
A:使用showmount -a查看被客户端挂载过的详细信息,showmount -d查看被客户端挂载过的共享目录。在showmount手册页中可以看到showmount -a看到的信息是不可靠的,像下面列出192.168.6.113就只是曾经访问nfs服务器的机器,而此时并未启动。
[root@ ~]# showmount -a
All mount points on new55:
192.168.6.113:/vmsnfs
192.168.6.179:/vmsnfs
192.168.6.17:/vmsnfs
[root@ ~]# showmount -d
Directories on new55:
/vmsnfs
[root@ ~]#
Q:怎么从别的机器看nfs服务端共享了哪些目录?
A:使用showmount -e <ip_or_host>就可以看到nfs服务器上共享的目录情况。
[root@sunrise17 ~]# showmount -e 192.168.6.55
Export list for 192.168.6.55:
/vmsnfs *
[root@sunrise17 ~]#
Q:在Linux配置了防火墙的情况下怎么启用NFS服务?
A:有待研究,欢迎高手指点。我使用的RHEL5.5上默认的防火墙设置如下:
[root@ ~]# iptables-save
# Generated by iptables-save v1.3.5 on Thu Nov 18 09:44:44 2010
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [900:105354]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Nov 18 09:44:44 2010
[root@ ~]#