NFS(Network File System的缩写,即网络文件系统),依赖于RPC协议 (Remote Procedure Cal的缩写,即远程过程调用) 实现文件或信息传送,只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。简单说:NFS是一个文件系统,而RPC是负责信息的传输。
server:10.15.72.38
client:10.15.72.83
一、启动NFS服务
[root@justin ~]# rpm -qa|grep nfs nfs-utils-lib-1.1.5-4.el6.i686 nfs4-acl-tools-0.3.3-6.el6.i686 nfs-utils-1.2.3-26.el6.i686 [root@justin ~]# /etc/rc.d/init.d/nfs start 启动 NFS 服务: [确定] 关掉 NFS 配额: [确定] 启动 NFS mountd: [确定] 正在启动 RPC idmapd: [确定] 正在启动 RPC idmapd: [确定] 启动 NFS 守护进程: [确定] [root@justin ~]# chkconfig --level 35 nfs on
NFS启动后的端口:
[root@localhost ~]# rpcinfo -p localhost program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 47488 status 100024 1 tcp 51129 status
NFS启动时会随机启动多个端口并向RPC注册,这样如果使用iptables对NFS端口进行限制就会有点麻烦,可以更改配置文件固定NFS服务相关端口。
分配端口,编辑配置文件,文末添加以下,然后在iptables中设置对应端口
[root@rhel5server ~]# vim /etc/sysconfig/nfs RQUOTAD_PORT=875 LOCKD_TCPPORT=32803 LOCKD_UDPPORT=32769 MOUNTD_PORT=892 #STATD_PORT=662是默认参数,但是在/etc/services中有定义了,所以换了个10005 STATD_PORT=10005 #STATD_OUTGOING_PORT=2020是默认参数,在/etc/services中也定义了,所以换了个10006 STATD_OUTGOING_PORT=10006
上面的端口不能与跟/etc/services文件中定义的重复:
[root@localhost ~]# egrep '875|32803|32796|892|10005|10006' /etc/services
二、配置NFS
NFS的常用目录
/etc/exports NFS服务的主要配置文件
/usr/sbin/exportfs NFS服务的管理命令
/usr/sbin/showmount 客户端的查看命令
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
/var/lib/nfs/xtab 记录曾经登录过的客户端信息
配置文件/etc/exports,可以设置NFS的共享目录、访问权限和允许访问的主机等参数,在默认情况下,这个文件是个空文件,没有配置任何共享目录,这是基于安全性的考虑,即使系统启动NFS服务也不会共享任何资源。
/etc/exports文件内容格式:
<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]
server:
[root@justin ~]# /etc/rc.d/init.d/nfs restart 关闭 NFS 守护进程: [确定] 关闭 NFS mountd: [确定] 关闭 NFS quotas: [确定] 启动 NFS 服务: [确定] 关掉 NFS 配额: [确定] 启动 NFS mountd: [确定] 正在启动 RPC idmapd: [确定] 正在启动 RPC idmapd: [确定] 启动 NFS 守护进程: [确定] [root@justin ~]#
/home/nfs 共享的目录
10.15.72.83允许访问的IP,也可设置允许访问共享的网段如10.15.72.0/24,如果允许所有客户端访问,可以用通配符“*”
ro 客户端访问共享目录时的权限,ro表示只读,rw表示可读可写
sync 设置NFS服务器同步写磁盘,这样不会轻易丢失数据,建议所有的NFS共享目录都使用该选项
secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
no_wdelay:若有写操作则立即执行,应与sync配合使用;
subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
no_subtree_check 不检查目录权限,提高目录读取速率
all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
no_all_squash:与all_squash取反(默认设置);
root_squash:登入NFS主机,使用该共享目录时相当于该目录的拥有者。但是如果是以root身份使用这个共享目录的时候,那么这个使用者(root)的权限将被压缩成为匿名使用者,即通常他的UID与GID都会变成nobody那个身份
no_root_squash:登入NFS主机,使用该共享目录时相当于该目录的拥有者,如果是root的话,那么对于这个共享的目录来说,他就具有root的权 限,这个参数『极不安全』,不建议使用
anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);这个UID必需要存在于你的/etc/passwd当中
anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
可以设置同一目录不同IP端的权限比如再设置/home/nfs 72.73只读不可写,在上面72.83行后面添加一行/home/nfs 10.15.72.73 (ro)即可
修改了/etc/exports后,并不需要重启nfs服务,只要用exportfs重新扫描一次/etc/exports,并且重新加载即可
exportfs[-aruv]
参数 含义
a 全部挂载(或卸载)/etc/exports档案内的设定
r 重新挂载/etc/exports 里面的设定,也同步的更新/etc/exports和/var/lib/nfs/xtab里面的内容
u 卸载某一目录
v 在export的时候,将分享的目录显示到荧屏上
[root@justin ~]# exportfs -av exporting *:/home/test [root@justin ~]#
三、使用showmount命令查询NFS的共享状态
[root@justin ~]# showmount -e 10.15.72.38 Export list for 10.15.72.38: /home/nfs 10.15.72.83 [root@justin ~]#
client:
[root@justin nfs]# mount 10.15.72.38:/home/nfs /mnt/nfs mount: wrong fs type, bad option, bad superblock on 10.15.72.38:/home/nfs, missing codepage or helper program, or other error (for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program) In some cases useful info is found in syslog - try dmesg | tail or so [root@justin ~]# showmount -e 10.15.72.38 -bash: showmount: command not found [root@justin nfs]# yum install nfs* -y ...... [root@justin nfs]# /etc/init.d/rpcbind restart Stopping rpcbind: [ OK ] Starting rpcbind: [ OK ] [root@justin nfs]# mount -t nfs 10.15.72.38:/home/nfs /mnt/nfs/ [root@justin nfs]# cd /mnt/nfs/ [root@justin nfs]# ls nfs.txt [root@justin nfs]# ls nfs.txt [root@justin ~]# showmount -e 10.15.72.38 Export list for 10.15.72.38: /home/nfs 10.15.72.83 [root@justin ~]# cat /mnt/nfs/nfs.txt Hello [root@justin ~]# touch /mnt/nfs/client touch: cannot touch /mnt/nfs/client': Read-only file system [root@justin ~]#
Windows 7访问NFS:
(1)打开Windows7系统程序--->控制面板--->程序和功能--->打开或关闭windows功能--->选中nfs安装
Tips:
在服务端执行以下:
1.关闭服务端的SELINUX
2.服务端防火墙中开启相应端口,nfs使用:tcp/udp 2049
[root@justin ~]# iptables -I INPUT -p tcp --dport 2049 -j ACCEPT [root@justin ~]# iptables -I INPUT -p udp --dport 2049 -j ACCEPT [root@justin ~]# service iptables save iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定] [root@justin ~]# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:2049 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2049 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:5801 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:5901 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@justin ~]#
同时开启多个端口
[root@justin ~]# iptables -I INPUT -p tcp -m multiport --ports 111,875,892,2049,32769 -j ACCEPT
NFS服务端端口管理文件:
[root@justin ~]# egrep "875|32803|32769|892" /etc/sysconfig/nfs #RQUOTAD_PORT=875 #LOCKD_TCPPORT=32803 #LOCKD_UDPPORT=32769 #MOUNTD_PORT=892 [root@justin ~]#
[root@justin ~]# showmount -a 10.15.72.38 All mount points on 10.15.72.38: 10.15.72.73:/home/nfs [root@justin ~]#
查看链接的客户端:
[root@justin ~]# showmount -a 10.15.72.38 All mount points on 10.15.72.38: 10.15.72.73:/home/nfs [root@justin ~]#
查看客户端查看的目录:
[root@justin ~]# showmount -d 10.15.72.38 Directories on 10.15.72.38: /home/nfs [root@justin ~]#
###########################################################
关注微信平台,了解更多分享
2014,我们没有时间再去挥霍;
2014,我们需要学习以及坚持;
我们需要把等公交、乘地铁的时间一点点利用;
关注微信平台,随时都可以查看分享;
我们更需要大家一起来分享。
Linux交流QQ群:333212786
################################################################################