1、NFS包
NFS需要5个RPM (这些包在RHEL4上默认安装),分别是:
setup-*: 共享NFS目录在/etc/exports中定义
initscripts-*: 包括引导过程中装载网络目录的基本脚本
nfs-utils-*: 包括基本的NFS命令与监控程序
portmap-*: 支持安全NFS RPC服务的连接
quota-*: 网络上共享的目录配额,包括rpc.rquotad (这个包不是必须的)
2、基本监控程序
要顺利运行NFS,至少需要五个Linux服务,它们各有不同的功能,有的负责装载服务,有的保证远程命令指向正确的位置。这些服务通过/etc/rc.d/init.d目录中的nfs,nfslock和portmap脚本启动。下面简单介绍每个监控程序:
(1) 基本NFS
rpc.nfsd是NFS服务器监控程序,它通过/etc/rc.d/init.d目录中的nfs脚本启动。NFS监控程序还启动rpc.mountd装载监控程序,并导出共享目录。
(2) RPC装载
可以用mount命令连接本地目录或网络目录,但还需要一个装载NFS目录的特殊监控程序rpc.mountd
(3) 端口映射器
portmap监控程序只是定向RPC通信数据流,但它对于NFS服务很重要。如果不运行portmap,则NFS客户机无法找到从NFS服务器共享的目录。
(4) 重新启动与statd
当NFS服务需要中断或者重新启动时,rpc.statd监控程序和rpc.lockd在服务器重新启动之后使客户机恢复NFS连接。
(5) 锁定
通过共享NFS目录打开文件时,锁定可以使用户不能覆盖同一个文件。锁定通过nfslock脚本并使用rpc.lockd监控程序启动运行。
3、配置NFS
共享的NFS目录在/etc/exports中列出,这个文件控制对目录的共享。书写规则是:(每个共享规则一行)
共享目录 主机(参数)
例如:/backup *.chinaunix.com(ro,sync) master.abc.com(rw,sync)
上面的规则代表将/backup目录以只读同步方式共享给*.chinaunix.com域,并且以读写同步方式共享给master.chinaunix.com主机。任何共享目录都要指定sync或async,也就是指定文件写入磁盘之前共享NFS目录是否响应命令。
下面是一些NFS共享的常用参数:
ro:只读访问
rw:读写访问
sync:所有数据在请求时写入共享
async:NFS在写入数据前可以相应请求
secure:NFS通过1024以下的安全TCP/IP端口发送
insecure:NFS通过1024以上的端口发送
wdelay:如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay:如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide:在NFS共享目录中不共享其子目录
no_hide:共享NFS目录的子目录
subtree_check:如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check:和上面相对,不检查父目录权限
all_squash:共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash:保留共享文件的UID和GID(默认)
root_squash:root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas:root用户具有根目录的完全管理访问权限
anonuid=xxx:指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx:指定NFS服务器/etc/passwd文件中匿名用户的GID
4、启动NFS
# service portmap start
# service nfs start
查看状态:
#service nfs starus
#service portmap status
查看配置:
#exportfs –rv (该命令也可以让新设置的“exports”文件内容不用重启便可生效)
检查NFS的运行级别:
# chkconfig --list portmap
# chkconfig --list nfs
根据需要设置在相应的运行级别自动启动NFS:
# chkconfig --level 235 portmap on
# chkconfig --level 235 nfs on
另外,还需要查看系统的iptables、/etc/hosts.allow、/etc/hosts.deny是否设置了正确的NFS访问规则。
参考:
nfs-howto 中文站点
常见故障:
1、为什么我权限那里命名定义了 rw,为什么我在客户端创建文件时依然提示权限不足?
答:在UNIX类操作系统上定义的网络服务有两层级别的权限设置,一是文件系统级别的权限设置,另一个是网络服务自定义的权限设置。既然你的网络服务设置没有问题,那么查一下你系统共享目录的设置权限!chmod 777 /backup -R 这样的权限一定能解决你的问题!
2、我服务端配置没有问题,为什么客户端挂载不上,而且还没有报错?
答:其实你的客户端可能并不是挂载不上,而是挂载很慢!你可以敲完命令后等待 15分钟左右,看看能否正常被挂载。其实这个挂载慢的原因一般是由于客户端rpc服务没有启动,在挂载前在客户端执行 portmap 或 service portmap start 即可!
3、请问客户端应该如何挂载?
答:/bin/mount -t nfs 192.168.0.1:/backup /backup
或:vi /etc/fstab 192.168.102.47:/backup /mnt nfs rsize=8192,wsize=8192,timeo=14,intr
4、为什么我在挂载的时候就提示权限不够?
mount: 192.168.0.20:/back failed, reason given by server: 权限不够
答:这个问题可能是你挂载的服务端的共享目录不正确,或者服务端修改配置文件后没有重启!在不重启nfs服务的前提下想让你新加的配置生效,用 exportfs -rv 命令即可!该命令也可以用于检查配置文件语法是否有误,它会把正确的配置以清除的格式显示到终端供用户查看! 如果客户端出现上面情况,也可以再客户端用 showmount -e IP 命令来查看服务器上共享的目录是否正确。
5、如果我不想让我的共享目录的权限写成 777 ,那么有什么办法让客户端挂载拥有相应权限?
答:一般来说系统默认都有nfsnobody这个用户和组,它是系统留给nfs服务专用的用户,我们只需要通过下面命令改变共享目录的属主即可 chown nfsnobody:nfsnobody /tmp/test
6、我是管理员,我如何在我的服务器上查看我设置的某个目录是否被客户挂载?
答: # showmount -d 这个命令可以查看哪些目录已经被挂载!
7、如何查看服务器上起了多少有关nfs的端口?
答: [root@slave backup]# lsof -i|grep rpc
portmap 8162 rpc 3u IPv4 21338 UDP *:sunrpc
portmap 8162 rpc 4u IPv4 21339 TCP *:sunrpc (LISTEN)
rpc.statd 8262 rpcuser 5u IPv4 21766 UDP *:806
rpc.statd 8262 rpcuser 6u IPv4 21772 UDP *:809
rpc.statd 8262 rpcuser 8u IPv4 21775 TCP *:812 (LISTEN)
rpc.rquot 12815 root 3u IPv4 30037 UDP *:696
rpc.rquot 12815 root 4u IPv4 30043 TCP *:699 (LISTEN)
rpc.mount 12832 root 6u IPv4 30089 UDP *:712
rpc.mount 12832 root 7u IPv4 30092 TCP *:715 (LISTEN)
8、请问配置了nfs的服务器安全问题应该如何设置?
1 Iptables 防火墙
如果我们nfs服务器在防火墙后边,则需要在防火强策略中加入如下策略:
-A INPUT -p tcp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT
2 使用 /etc/hosts.allow和/etc/hosts.deny 控制客户端的访问
/etc/hosts.allow和/etc/hosts.deny这两个文件是tcpd服务器的配置文件,tcpd服务器可以控制外部IP对本机服务的访问。这两个配置文件的格式如下:
#服务进程名:主机列表:当规则匹配时可选的命令操作
server_name:hosts-list[:command]
/etc/hosts.allow控制可以访问本机的IP地址,/etc/hosts.deny控制禁止访问本机的IP。如果两个文件的配置有冲突,以 /etc/hosts.deny为准。下面是一个/etc/hosts.allow的示例:
ALL:127.0.0.1 #允许本机访问本机所有服务进程
smbd:192.168.0.0/255.255.255.0 #允许192.168.0.网段的IP访问smbd服务
ALL关键字匹配所有情况,EXCEPT匹配除了某些项之外的情况,PARANOID匹配你想控制的IP地址和它的域名不匹配时(域名伪装)的情况。
比如,在服务器的 /etc/hosts.deny 文件作如下设置:
# cat /etc/hosts.deny
portmap:192.168.102.15
然后在客户机192.168.102.15上加载共享目录
# mount 192.168.102.47:/home/share /mnt
mount to nfs server '192.168.102.47' failed.
我们发现现在已经无法加载共享目录的。
9、NFS 服务每次重启端口都是变的,怎么固定端口呢,好设置iptable.