暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

linux系统NFS服务:多客户端访问实验-绕开nfsnobody权限及其排故技巧

爱婷如命一生一世 2017-07-12
2831

炎炎夏日,今天也是头伏,庆幸自己坐在凉爽的办公楼之内。

今天继续把上次NFS服务中涉及到的同步和异步的知识点在简单介绍之后,我来粗浅讲下异步的好处:

异步的好处:我举一个显示的例子。淘宝或者12306网站,当用户量突然增大,假设每秒有100个并发量,服务器只能承受50个,异步就会让剩余的50个并发放到某个地方等候,等到处理完毕后,在慢慢的处理,从而产生队列机制,保护服务的稳定。

而同步就会造成服务器负载过大,服务容易G掉。


回归到主题:

我分享一些NFS服务里面一些重要的参数:

ro :只读。表示只读权限。

all-squash :表示不管访问NFS Server 共享目录的用户身份如何,它的权限都被压缩成匿名用户,同时他的UID和GID都会变成nobody或者能NFSnobody的账号身份,在多个NFS客户端同时读写NFS server 数据时,这个参数非常重要。

all-squash的应用场景:

当一个用户上传好一个文件到NFS server时,经过负载均衡的A服务器节点存储至,后来另一个用户去访问NFS server  ,它要去修改这个文件,它的请求被B服务器接收后传送给NFS server ,因此ABC这三台负载均衡的服务器一定是权限相同,才能这样完成操作。


配置NFS生产重要技巧:

  1. 确保所有服务区对NFS共享目录都要具备相同的权限:

    如何确保都具有相同的权限呢?

    all-squash把所有客户端都压缩成匿名用户。


   而这个匿名用户就是以下两个参数:指定匿名用户是谁。

   anonuid :匿名用户。

   anongid:匿名组用户。


2.所有的客户端和服务端都需要有一个相同的UDI和GID的用户(即nfsnobody,UID必须相同)。

在生产环境中,

以上这些是比较重要的参数,其实还有很多参数,在鸟哥的书籍中可以看到。


我们可以在系统中查看到NFS默认配置了有哪些东西呢?

这里面有些参数我还是简单说一下:

root-squash 代表root 用户变为匿名用户。

no-root-squash:关掉root匿名用户,适用于无盘工作站。

all-squash :所有的用户都变为匿名用户。

secure : 不允许Client 使用大于1024的Client端的port,也就是送Server传递的资料到客户端的目的port要小于1024,此时客户端一定要使用root账号才能mount远端NFS server 通畅会建议使用insecure.

insecure:允许客户端自行决定自己的机器使用的port .通常都会设这个

hide:当mount根目录时,export出的子目录需要自己明确的在挂载。

nohide : 当export出两个目录,而其中一个目录是另外一个目录的子目录,例如我们使用虚拟目录的例子,此时当我mount根目录时,会自动把所有子目录mount起来,建议使用这个选项比较方便,尤其在NFS v4版本有虚拟目录的共和功能。





                         

 

                                            NFS多客户端试验:

 

实验描述:(centos 5.5 64位需要注意,后面会说明。)

实现多台客户端同时挂载一台NFS server时(这里拓扑用两台客户端一台NFS服务端),无论从哪个客户端写入数据,其他客户端同样可以读写,即让所有NFS客户端写入到NFS server的文件或目录在NFS server上的用户和组都是同一个名称:shareuser 。NFS共享文件的目录在/tmp/share


虚拟机数量和角色如下:选择的网段都是192.168.8.0/24

NFS-server:192.168.8.188/24

客户端1:192.168.8.189/24

客户端2:192.168.8.190/24


当我创建好三台设备时,一会查看nfsnobody时可以用以前学到的CRT中多窗口批量执行任务功能。

我还是沿用上次的NFS实验环境基础来做。NFS配置我这里就不一一粘贴了,我也是按照之前的配置图来做的。


首先,我们要让多个客户端同时到达服务映射成匿名用户:这里的匿名用户不使用默认NFS共享默认用户nfsnobody.而是使用自己指定的用户shareuser.

需要注意的是,你要在不同的设备上创建shareuser时,它们的UID和GID可能会不一样。

所以要有一个统一UID和GID的操作:

为什么要有这个操作呢,我可以举例来说一下,我用多窗口批量执行操作的命令:我就可以利用之前学习到CRT中的功能:多窗口批量执行任务来查看各自的用户UID。

经查看:所有的设备上的nfsnobody的UID和GID都是一样,这就是为什么它是NFS默认的共享用户了!权限都一样。


当不用nfsnobody做NFS共享用户时,这三台设备必须都要创建shareuser这个固定用户了。

我这里还是用多窗户同时执行创建用户以及指定用户UID:指定UID为1300


然后查看各自系统创建好shareuser的uid,这一步一定要核实,否则实验后面会出现权限不统一的问题。核心就是UID一定是要统一。


如果发现你的系统内部事先创建好的用户GID不一样的话,可以按照如下办法修改:


我站在客户端查看rpcbind的状态:


重点是在配置NFS文件。

如果记不住参数的,我推荐你看NFS的默认配置参数:可以对照着这些默认参数添加你指定的一些需求。

然后我用VI编辑 exports文件:

注意:我在这里改的文件是对比默认的参数文件修改的,可以不用大量的记住参数

最后检查下配置文件情况:


别忘记了还要使其配置文件生效,在服务端做平滑重启:

保险起见,我还要在服务端本身自我测试下共享是否成功:


切记不要忘记改变服务端的目录文件权限属主:用户组改不改动都无所谓了。


当服务端测试挂载无误后,我就去客户端做挂载测试:测试结果是没有问题的。


接下来机就要做的是在客户端实现从NFS服务端进行磁盘映射到本地的操作:



那么现在我就在客户端上写入一个文件:

我在客户端1切入到/mnt下,然后写入一个文件,观察属主变成了shareuser


然后我在客户端2测试写入一个文件(前提是要经过开启rpc.bind挂载测试等...这里我就不一一演示,很简单)



测试完毕后,在不同用户分别测试后,还是以shareuser用户的权限来操作。


总结的来看这个实验不是很难,核心就是要修改用户的UDI.GID(这个实验的前提一定是nfsnobody的UID在不同设备内出现不一样值。)

在实际生产环境中,Centos 5.5 64位的NFSNobody的UID是4292967294

因此就容易导致权限问题的。我建议我们新建一个用户,这样UID和GID就会同意。





NFS故障一般排除办法:

  1. 判断NFS服务是否开启:

    1>服务端: nfs rpc.bind是否都是开启。

    2>客户端: 是否开启了rpc.bind。

  2. 挂载时无反应,一定要看看是不是跟NFS server 端通讯正常。(我之前就遇到过输错IP地址导致挂载时间超时。)除了ping 测试ICMP报外,还要用Telnet 测试服务可达。

  3. 防火墙是否关闭:如果不关闭你在Telnet时会出现以下情况:,不要认为是路由不可达。

  4. 还可以本地自己挂载自己测试。然后在客户端用showmont 试试能不能查找出挂载点来。

  5. 还有些解决办法,我这里可能没能详细说出来,鸟哥的是书籍里有很详细的排故。





做完实验之后,我再来分享下有关NFS客户端Mount的共享目录技术点:

网络文件系统也是文件系统,这里不能忽略掉,既然是文件系统,都会给一个入口来进行访问的。

还记得这条命令不:这条命令要在客户端上执行。命令格式我在图中都有标注。

其中的NFS服务器提供的共享目录里,IP地址和域名与共享目录用:分开。



我之前说过这种挂载,只要机器一重启就会失效:

第一种办法:  将挂在命令放置到rc.loacl里面去。然后重启客户端测试下。

放在rc.local里的好处在于:不会影响系统启动。其中启动时磁盘的加载是优先于网络的。




第二种办法: 修改/etc/fstab

就像我之前说的系统启动时,磁盘的加载是优先于网络,鸟哥书籍里提到过,如果选用这种办法,如果NFS故障,会导致启动不起来。


时间关系,下次再说。


文章转载自爱婷如命一生一世,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论