Linux《文件服务器之一:NFS 服务器》学习总结

您所在的位置:网站首页 linux搭建web服务器实验报告 Linux《文件服务器之一:NFS 服务器》学习总结

Linux《文件服务器之一:NFS 服务器》学习总结

2024-02-04 12:04| 来源: 网络整理| 查看: 265

一、简介

什么是 NFS (Network FileSystem)

NFS 就是 Network FileSystem 的缩写,最早之前是由 Sun 这家公司所发展出来的。 它最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案 (share files)。所以,你也可以简单的将他看做是一个文件服务器 (file server) 呢!这个 NFS 服务器可以让你的 PC 来将网络远程的 NFS 服务器分享的目录,挂载到本地端的机器当中, 在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区槽一样 (partition)!使用上面相当的便利! 在这里插入图片描述 就如同上面的图示一般,当我们的 NFS 服务器设定好了分享出来的 /home/sharefile 这个目录后,其他的 NFS 客户端就可以将这个目录挂载到自己系统上面的某个挂载点 (挂载点可以自定义),例如前面图示中的 NFS client 1 与 NFS client 2 挂载的目录就不相同。我只要在 NFS client 1 系统中进入 /home/data/sharefile 内,就可以看到 NFS 服务器系统内的 /home/sharefile 目录下的所有数据了 (当然,权限要足够啊!_)!这个 /home/data/sharefile 就好像 NFS client 1 自己机器里面的一个 partition 喔!只要权限对了,那么你可以使用 cp, cd, mv, rm… 等等磁盘或档案相关的指令!真是他 X 的方便吶!

好的,既然 NFS 是透过网络来进行数据的传输,那么 NFS 使用哪个埠口来进行传输呢?基本上 NFS 这个服务的埠口开在 2049 ,但是由于文件系统非常复杂,因此 NFS 还有其他的程序去启动额外的端口,但这些额外的端口启动的号码是? 答案是…不知道! @_@ !因为预设 NFS 用来传输的埠口是随机选择小于 1024 以下的埠口来使用的。咦!那客户端怎么知道你服务器端使用那个埠口啊?此时就得要 远程过程调用 (Remote Procedure Call, RPC) 的协定来辅助啦!底下我们就来谈谈什么是 RPC?

什么是 RPC (Remote Procedure Call)

因为 NFS 支持的功能相当的多,而不同的功能都会使用不同的程序来启动, 每启动一个功能就会启用一些端口来传输数据,因此, NFS 的功能所对应的端口才没有固定住, 而是随机取用一些未被使用的小于 1024 的埠口来作为传输之用。但如此一来又造成客户端想要连上服务器时的困扰, 因为客户端得要知道服务器端的相关埠口才能够联机吧!

此时我们就得需要远程过程调用 (RPC) 的服务啦!RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的埠口上去。 那 RPC 又是如何知道每个 NFS 的埠口呢?这是因为当服务器在启动 NFS 时会随机取用数个埠口,并主动的向 RPC 注册,因此 RPC 可以知道每个埠口对应的 NFS 功能,然后 RPC 又是固定使用 port 111 来监听客户端的需求并回报客户端正确的埠口, 所以当然可以让 NFS 的启动更为轻松愉快了!

所以你要注意,要启动 NFS 之前,RPC 就要先启动了,否则 NFS 会无法向 RPC 注册。 另外,RPC 若重新启动时,原本注册的数据会不见,因此 RPC 重新启动后,它管理的所有服务都需要重新启动来重新向 RPC 注册。 在这里插入图片描述

如上图所示,当客户端有 NFS 档案存取需求时,他会如何向服务器端要求数据呢?

客户端会向服务器端的 RPC (port 111) 发出 NFS 档案存取功能的询问要求; 服务器端找到对应的已注册的 NFS daemon 埠口后,会回报给客户端; 客户端了解正确的埠口后,就可以直接与 NFS daemon 来联机。

由于 NFS 的各项功能都必须要向 RPC 来注册,如此一来 RPC 才能了解 NFS 这个服务的各项功能之 port number, PID, NFS 在服务器所监听的 IP 等等,而客户端才能够透过 RPC 的询问找到正确对应的埠口。 也就是说,NFS 必须要有 RPC 存在时才能成功的提供服务,因此我们称 NFS 为 RPC server 的一种。事实上,有很多这样的服务器都是向 RPC 注册的,举例来说,NIS (Network Information Service) 也是 RPC server 的一种呢。此外,由上图你也会知道,不论是客户端还是服务器端,要使用 NFS 时,两者都需要启动 RPC 才行喔!

二、NFS服务的部署

2.1、下载安装软件

#查看nfs和rpc软件是否安装 [root@save ~]# rpm -qa|grep -E "nfs|rpc" xmlrpc-c-client-1.32.5-1905.svn2451.el7.x86_64 xmlrpc-c-1.32.5-1905.svn2451.el7.x86_64 #安装nfs和rpc [root@save ~]# yum install -y nfs-utils rpcbind [root@save ~]# rpm -qa|grep -E "nfs|rpc" rpcbind-0.2.0-49.el7.x86_64 xmlrpc-c-client-1.32.5-1905.svn2451.el7.x86_64 xmlrpc-c-1.32.5-1905.svn2451.el7.x86_64 libtirpc-0.2.4-0.16.el7.x86_64 libnfsidmap-0.25-19.el7.x86_64 nfs-utils-1.3.0-0.68.el7.x86_64

2.2 编写NFS服务端配置文件/etc/exports

/data 192.168.93.0/24(rw,sync) /data 10.1.93.24(ro,sync) #多网段配置 设置数据储存目录: /data 网络白名单: 192.168.93.0/24 储存目录有读写权限:rw 储存目录只有只读权限:ro 同步方式储存数据:sync 异步方式储存数据:async

同步方式储存数据是直接将数据储存到硬盘中,优点是数据可靠性高,缺点是储存速度慢 异步方式储存数据是先将数据储存到内存中,然后安装队列储存到硬盘中,优点是储存速度快,缺点是数据可靠性比较地

2.3 配置NFS服务端环境

#查看数据储存目录/data是否存在 [root@save ~]# ll /data ls: 无法访问/data: 没有那个文件或目录 #创建数据储存目录/data [root@save ~]# mkdir /data #修改数据储存目录/data权限 [root@save ~]# ll /data -d drwxr-xr-x 2 root root 6 12月 11 14:38 /data #nfsnobody是在我们下载nfs时,系统自动创建的,他是一个虚拟用户不能登陆 [root@save ~]# chown nfsnobody.nfsnobody /data [root@save ~]# ll /data -d drwxr-xr-x 2 nfsnobody nfsnobody 6 12月 11 14:38 /data

2.4 NFS服务端启动服务

#先启动rpc服务 [root@save ~]# systemctl start rpcbind.service [root@save ~]# systemctl enable rpcbind.service #设置开机自启 #先启动nfs服务 [root@save ~]# systemctl start nfs [root@save ~]# systemctl enable nfs

2.5 NFS客户端配置

#目的是让系统识别nfs类型的文件系统 [root@backup mnt]# yum install -y nfs-utils #进行挂载,192.168.93.222是储存服务器ip # -t:需要mount的类型,如nfs等。 [root@backup /]# mount -t nfs 192.168.93.222:/data /mnt

注意 1、客户端重启后需要重新挂载 2、客户端不需要安装rpc服务

2.6 测试 在客户端挂载目录/mnt创建文件

[root@backup mnt]# touch dd.txt [root@backup mnt]# ll /mnt 总用量 0 -rw-r--r-- 1 nfsnobody nfsnobody 0 12月 11 14:58 dd.txt

在服务的共享目录/data查看文件

[root@save data]# ll 总用量 0 -rw-r--r-- 1 nfsnobody nfsnobody 0 12月 11 14:58 dd.txt 三、NFS共享文件常用配置说明 //这是nfs默认配置记录日志,这个文件只是起一个记录作用,修改这个文件,不会起作用 [root@save data]# cat /var/lib/nfs/etab /data 192.168.93.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)

no_root_squash : 不要将root用户身份进行转换,客户端中root用户到NFS 服务器中也是root用户 root_squash: 只将root用户身份进行转换,客户端中root用户到NFS 服务器中不是root用户,是nfsnobody用户 all_squash: 将所有用户身份都进行转换(不安全,因为所有用户都可以操作共享目录) no_all_squash: 不要将普通用户身份进行转换,只转换root用户

3.1 针对于普通用户的映射

/data 192.168.93.0/24(rw,sync,all_squash)

客户端非root用户到服务端能变成nfsnobody

[clyu@backup mnt]$ touch girl.txt [clyu@backup mnt]$ ll 总用量 0 -rw-r--r-- 1 nfsnobody nfsnobody 0 12月 29 15:51 dog.txt -rw-rw-r-- 1 nfsnobody nfsnobody 0 12月 29 15:53 girl.txt /data 192.168.93.0/24(rw,sync,no_all_squash)

客户端非root用户到服务端不能变成nfsnobody

[clyu@backup mnt]$ touch girl.txt touch: 无法创建"girl.txt": 权限不够

假设我们针对普通用户映射设置是all_squash,那么客户端任何一个用户到服务端都会变成nfsnobody用户,如果这时我们的一个客户端的一个普通用户被破解了,黑客就可以利用这个普通用户删除储存服务器的文件。所以一般情况下我们针对普通用户映射设置是no_all_squash

但是如果配置成no_all_squash,因为服务器共享目录权限如下,

drwxr-xr-x 2 nfsnobody nfsnobody 90 12月 29 16:20 data

所以在客户端,对于普通用户,我们只能使用nfsnobod用户就行上传文件。如果我们想用普通用户clyu上传,那么我们需要改变服务器共享目录权限

[root@save ~]# chown clyu.clyu /data

注意:nsf中客户端于服务端用户一样是指,客户端与服务器端具有相同的 UID 与账号

[root@backup mnt]# touch rem.txt touch: 无法创建"rem.txt": 权限不够

如果这时我们想用root用户进行上传文件,这时可以发现,我们上传不了了。这是因为客户端的root到服务端会变成nfsnobody,而这时服务器共享目录只能是clyu用户进行上传。这时候,我们要改变nfs用户映射配置

3.2 设置用户映射设置

[root@backup mnt]# id clyu uid=1000(clyu) gid=1000(clyu) 组=1000(clyu) /data 192.168.93.0/24(rw,sync,no_all_squash,anongid=1000,anonuid=1000) [root@backup mnt]# touch rem.txt [root@backup mnt]# ll 总用量 0 -rw-r--r-- 1 clyu clyu 0 1月 5 15:08 rem1.txt

3.3 针对于root用户的映射

/data 192.168.93.0/24(rw,sync,root_squash)

客户端root用户到服务端变成nfsnobody用户

[root@backup mnt]# touch dog.txt [root@backup mnt]# ll 总用量 0 -rw-r--r-- 1 nfsnobody nfsnobody 0 12月 29 16:15 dog.txt /data 192.168.93.0/24(rw,sync,no_root_squash)

客户端root用户到服务端还是root用户

[root@backup mnt]# touch dog.txt [root@backup mnt]# ll 总用量 0 -rw-r--r-- 1 nfsnobody nfsnobody 0 12月 11 14:58 dd.txt -rw-rw-r-- 1 nfsnobody nfsnobody 0 12月 29 15:50 demo1234.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 12月 29 15:26 demo123.txt -rw-r--r-- 1 root root 0 12月 11 15:52 demo.txt -rw-r--r-- 1 root root 0 12月 29 16:20 dog.txt

假设我们针对普通root权限设置是no_root_squash,那么客户端root用户到服务端也是root用户,所以就会出现我们在客户端可以利用root用户删除服务器文件。所以一般情况下我们针对root权限设置是root_squash



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3