linux下NFS安装配置的方法是什么

61次阅读
没有评论

共计 5834 个字符,预计需要花费 15 分钟才能阅读完成。

本文丸趣 TV 小编为大家详细介绍“linux 下 NFS 安装配置的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“linux 下 NFS 安装配置的方法是什么”文章能帮助大家解决疑惑,下面跟着丸趣 TV 小编的思路慢慢深入,一起来学习新知识吧。

1,服务器端软件:安装 nfs-utils 和 portmap(rpcbind)
nfs-utils:提供 rpc.nfsd 及 rpc.mountd 这两个 nfs daemons 的套件
portmap: nfs 其实可以被看作是一个 rpc server program, 而要启动一个 rpc server program,都要做好 port 的对应工作,而且这样的任务就是由 portmap 来完成的。通俗的说 portmap 就是用来做 port 的 mapping 的。
nfs 需要启动的 daemons

pc.nfsd: 主要复杂登陆权限检测等 必须

portmap:处理 rpc 程序客户端和服务器端的端口对应 必须

rpc.mountd:负责 nfs 的档案系统,当 client 端通过 rpc.nfsd 登陆 server 后,对 clinet 存取 server 的文件进行一系列的管理 必须

lockd:处理通过 rpc 包的锁定请求

statd:为 nfs 锁定服务提供 crash 恢复功能

rquotad:处理当用户通过 nfsmount 到远程服务器时的配额

守护进程启动顺序:rpc.portmap, rpc.mountd, rpc.nfsd, rpc.statd, rpc.lockd (新版本会自动跟着 nfsd 启动起来), rpc.rquotad

nf 服务器端命令:

•yum install nfs-utils portmap
•chkconfig rpcbind on #chkconfig:更新和查询各运行级别的系统服务
•chkconfig nfs on
•service rpcbind start
•service nfs start

2,服务器端配置文件 /etc/exports:指定要共享的目录及权限 man exports

复制代码   代码如下:

#:允许 ip 地址范围在 192.168.0.* 的计算机以读写的权限来访问 /home/work 目录。
/home/work 192.168.0.*(rw,sync,root_squash)
/home  192.168.1.105 (rw,sync)
/public  * (rw,sync)

配置文件每行分为两段:第一段为共享的目录,使用绝对路径,第二段为客户端地址及权限。
地址可以使用完整 ip 或网段,例如 10.0.0.8 或 10.0.0.0/24,10.0.0.0/255.255.255.0 当然也可以地址可以使用主机名,dns 解析的和本地 /etc/hosts 解析的都行,支持通配符,例如:*.chengyongxu.com

权限有:
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 客户连接用户身份的描述,没有验证过下述的描述:

•客户端连接时候,对普通用户的检查,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 将被压缩到所指定的用户与组

3,防火墙设置修改

默认情况下,centos6 服务器版安装完成后,防火墙 iptables 配置中只放开了 22 端口。
在 nfs 配置文件 /etc/sysconfig/nfs 中指定 nfs 服务相关端口,并修改防火墙放开相应端口

复制代码   代码如下:

#port rpc.mountd should listen on. 
#mountd_port=892 
 
#port rpc.statd should listen on. 
#statd_port=662 
 
#/usr/sbin/rpc.rquotad port rquotad should listen on. 
#rquotad_port=875 
 
#tcp port rpc.lockd should listen on. 
#lockd_tcpport=32803 
 
#udp port rpc.lockd should listen on. 
#lockd_udpport=32769 

修改 iptables 配置文件 /etc/sysconfig/iptables,放开 111(portmap 服务端口),2049(nfs 服务端口)

4,/etc/hosts.allow 配置修改
/etc/hosts.allow,/etc/hosts.deny 描述哪些主机允许使用本地的 inet 服务。
默认这里好像可以不需要修改,不过最好设置成只允许需要的客户端机器连接,然后其他机器的连接都 deny
# 服务进程名: 主机列表: 当规则匹配时可选的命令操作
server_name:hosts-list[:command]
在 /etc/hosts.allow 中添加允许客户端访问的规则
all:127.0.0.1  #允许本机访问本机所有服务进程
all:192.168.0.135  #允许 192.168.0.135 客户端机器访问本机所有服务进程
smbd:192.168.0.0/255.255.255.0  #允许网段的 ip 访问 smbd 服务
sshd:192.168.100.0/255.255.255.0  #允许 192.168.100. 网段的 ip 访问服务器上的 sshd 进程
sshd:60.28.160.244  #允许外网的 60.28.160.244 访问这个服务器上的 sshd 进程
在 /etc/hosts.deny 中 被禁制登陆的尝试连接信息也可以设置成记录下来并发到用户邮箱
sshd:all  #禁止所有

5,修改共享出去的目录权限为 760,并修改目录所有组为 nfsnobody
参考:问题 7

6,客户端挂载:执行下面的指令就可以把 nfs 服务器 (ip 地址为 192.168.1.45) 共享出来的 /home 挂装到本地的 /mnt/nfs/home 目录下。
showmount -e nfs-serverip:查看 nfs 服务器共享出来的资源
mount -t nfs 192.168.1.45:/home /mnt/nfs/home

7,nfs 性能测试:

•根据命令 time dd if=/dev/zero of=/mnt/home bs=16k count=16384 来设置合理的 wsize,rsize 值
•根据 nfs 客户端数,在 /etc/sysconfig/nfs 配置文件中设置合适的 nfs 服务器端进程数 rpcnfsdcount,默认为 8

exportfs 命令:如果我们在启动了 nfs 之后又修改了 /etc/exports,是不是还要重新启动 nfs 呢?这个时候我们就可以用 exportfs 命令来使改动立刻生效,该命令格式如下:
exportfs [-aruv] -a:全部 mount 或者 unmount /etc/exports 中的内容 -r:重新 mount /etc/exports 中分享出来的目录 -u:umount 目录 -v:在 export 的時候,将详细的信息输出到屏幕上。
showmount 命令:显示 nfs 服务器的挂载信息。
showmount -e [nfs-server]:显示指定的 nfs server 上 export 出来的目录,不指定后面 ip 时查看的是本机作为 nfs server 时,对外共享的目录。。
rpcinfo - p 命令:显示 rpc 信息   - p 参数:用 rpc 协议来探测主机 host 上使用的 rpcbind,并显示所有已注册的 rpc 程序。
nfsstat 命令:查看 nfs 的运行状态,对于调整 nfs 的运行有很大帮助

过程中出现的问题解决:

1,通过 yum 或者 rpm 安装完 portmap 后,发现执行命令 service portmap start 时报如下错误:portmap: unrecognized service。
centos6(linux kernel 2.6.32)中,portmap 已经被 rpcbind 代替了,仔细查看安装信息就会发现,执行命令 yum install portmap 时安装的就是 rpcbind。安装完成后也可以通过命令:yum whatprovides portmap 来查看详细信息。

2,客户端挂载时,报错误 mount clntudp_create: rpc: port mapper failure – rpc: unable to receive。

•1,通过命令 rpcinfo - p 来查看 portmap 服务时候正常启动以及相应的端口(默认 111)
•2,检查 /etc/sysconfig/iptables 防火墙设置,允许 tcp,udp 的 111 端口访问,然后 service iptables restart
•3,检查 /etc/hosts.deny,/etc/hosts.allow 看客户端连接是否被阻止了

3,客户端执行命令 showmount -e nfs-server 时,报错误:mount clntudp_create: rpc: program not registered。
nfs、rpcbind 服务没有启动,使用 chkconfig 把 nfs、rpcbind 加到系统服务中并用 service 来启动
或者在 /etc/hosts.allow 中添加允许客户端访问的规则 all:192.168.0.135

4,客户端执行命令 showmount -e nfs-server 时,报错误:rpc mount export: rpc: unable to receive; errno = no route to host
配置文件:/etc/sysconfig/nfs
找到 nfs 服务相关端口设置的地方,并移除注释后,在 iptables 防火墙设置中指定允许相应端口的 udp,tcp 流通过。
#mountd_port=892
#statd_port=662
#lockd_tcpport=32803
#lockd_udpport=32769
iptables -a input -p tcp –dport 662 -m state –state new -j accept
iptables -a input -p udp –dport 661 -m state –state new -j accept

5, showmount -e nfs-server 成功,正式挂载时报错:mount: mount to nfs server 192.168.1.5 failed: system error: no route to host. 这是由于 nfs 服务的默认端口 2049 被防火墙阻塞了,和上面类似修改 iptables 允许 2049 端口通过

6, showmount -e nfs-server 成功,正式挂载时报错:mount: mount to nfs server 192.168.1.5 failed: timed out (retrying).
编辑 /etc/sysconfig/iptables 时,相关端口的 tcp 端口允许通过,而 udp 不允许。其他可能的原因参考:mount command fails with nfs server failed error.
disable name lookup requests from nfs server to a dns server. 
or  nfs version used by the nfs client is other than version 3.

7,exports 配置文件中目录权限属性设置为 rw(默认为 root_squash),但是在客户端 mount 目录执行 touch 命令时报错误:touch: cannot touch `a : permission denied。解决:

•服务器端共享目录权限查看 ll -d /home
•修改服务器端共享目录权限 chown 760 /home(文件所有者 root 有全权限、文件所有组用户有读写权限、其他用户无权限,然后把目录的组设置为 nfsnobody)
•修改服务器端共享目录权限组拥有者为 nfsnobody(cat /etc/passwd | grep nob)
•chgrp nfsnobody /home
•成功在客户端创建新的文件!

读到这里,这篇“linux 下 NFS 安装配置的方法是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-14发表,共计5834字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)