服务器搭建部分: yum install nfs-utilsyum install rpcbind.x86_64service rpcbind restartservice nfs restartch
服务器搭建部分:
yum install nfs-utilsyum install rpcbind.x86_64service rpcbind restartservice nfs restartchkconfig rpcbind onchkconfig nfs on
nfs的本身不具备传输的能力,将由rpc模块来完成调用daemons实现传输目的。
nfs的自身端口是tcp和dup的2049
rpc自身的端口是tcp和udp的111
客户端在连接nfs服务器时,rpc负责告诉客户端你要连接的端口是多少,这些端口是由rpc产生的随机产生的。
注:图片来自 http://www.cnblogs.com/zzzhfo/p/5804831.html
1.在/etc/sysconfig/nfs中将变化的端口锁住(先用netstat -ntulp | grep 6000 确定这个端口无进程使用)
vim /etc/sysconfig/nfs# TCP port rpc.lockd should listen on. 锁定的tcp端口 LOCKD_TCPPORT=6000# UDP port rpc.lockd should listen on. 锁定的udp端口 NFS V2只支持UDP LOCKD_UDPPORT=6000# Port rpc.mountd should listen on. 负责NFS的档案系统,当CLIENT端通过rpc.nfsd登陆SERVER后,对# clinet存取server的文件进行一系列的管理 MOUNTD_PORT=892 # Port rpc.statd should listen on. 为nfs锁定服务提供crash恢复功能 STATD_PORT=66# Port rquotad should listen on. 处理当用户通过nfsmount到远程服务器时的配额 RQUOTAD_PORT=875
2.放行防火墙
iptables -I INPUT -p tcp --dport 2049 -j ACCEPTiptables -I INPUT -p udp --dport 2049 -j ACCEPTiptables -I INPUT -p tcp --dport 111 -j ACCEPTiptables -I INPUT -p udp --dport 111 -j ACCEPTiptables -I INPUT -p tcp --dport 6000 -j ACCEPTiptables -I INPUT -p udp --dport 6000 -j ACCEPTiptables -I INPUT -p tcp --dport 892 -j ACCEPTiptables -I INPUT -p tcp --dport 66 -j ACCEPTiptables -I INPUT -p tcp --dport 875 -j ACCEPT
3.创建共享目录
mkdir /share
4.配置共享目录的配置文件
vim /etc/exports/share 192.168.80.0/24(rw,sync,no_root_squash)
5.挂载
#实际的生产环境中,不建议重启,可以重新挂载。#a表示所有 r表示重新挂载,v表示现实结果exportfs -arv
客户端操作:
1.创建挂载点
mkdir /xx/
2.挂载
mount 192.168.80.130:/share /xx/
-------------------------------------------------------------------------------------------------------------
关于一些命令注释
- 权限有:
- rw:read-write,可读写; 注意,仅仅这里设置成读写客户端还是不能正常写入,还要正确地设置共享目录的权限,参考问题7
- ro:read-only,只读;
- sync:文件同时写入硬盘和内存;
- async:文件暂存于内存,而不是直接写入内存;
- no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。
- root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;
- all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
- anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;
- anongid:匿名用户的GID值。
NFS客户端用户映射:客户端登陆用户为root或者其他用户,然后根据服务器端nfs server配置,相应客户端连接映射到nfs服务器端的用户为root或者指定用户(通过anonuid或者anongid来设定)、nfsnobody等。最后这个映射用户和共享目录的权限共同影响该客户端连接是否有读写权限。
手动设定客户端、服务器端用户映射,参数:map_static=/etc/nfs.map
/etc/nfs.map文件映射内容如下:
# remote local
gid 500 1000
uid 500 2003
参考:NFS 学习笔记中关于nfs客户连接用户身份的描述,没有验证过下述的描述:
- 客户端连接时候,对普通用户的检查,NO.1如果明确设定了普通用户被压缩的身份,那么此时客户端用户的身份转换为指定用户,NO.2如果NFS server上面有同名用户,那么此时客户端登录账户的身份转换为NFS server上面的同名用户,NO.3如果没有明确指定,也没有同名用户,那么此时 用户身份被压缩成nfsnobody
- 客户端连接的时候,对root的检查,NO.1如果设置no_root_squash,那么此时root用户的身份被压缩为NFS server上面的root,NO.2如果设置了all_squash、anonuid、anongid,此时root 身份被压缩为指定用户,NO.3如果没有明确指定,此时root用户被压缩为nfsnobody,NO.4如果同时指定no_root_squash与all_squash 用户将被压缩为 nfsnobody,如果设置了anonuid、anongid将被压缩到所指定的用户与组
注:http://desert3.iteye.com/blog/1675522
-------------------------------------------------------------------------------------------------------------