linux基础&NFS服务介绍及其相关配置和练习✍

关于NFS服务 主要介绍以下内容:

在这里插入图片描述

NFS的工作原理

什么是NFS服务器?

NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。

NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;

那么NFS的挂载原理是什么呢?
挂载
1.同一挂载可以连接多个设备
2.一个设备可以连接多个挂载点
(最后挂载的为默认进入的)

简单来说 就是可以将NFS服务器分享的文件 挂载到本地的目录上 从而不用下载;就可以直接查看。
下边看一张图:
在这里插入图片描述
如上图示:
当我们在NFS服务器设置好一个共享目录/home/public后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义,如上图客户端A与客户端B挂载的目录就不相同。并且挂载好后我们在本地能够看到服务端/home/public的所有数据。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。
挂载后,NFS客户端查看磁盘信息命令:#df –h。
既然NFS是通过网络来进行服务器端和客户端之间的数据传输,那么两者之间要传输数据就要有想对应的网络端口,NFS服务器到底使用哪个端口来进行数据传输呢?基本上NFS这个服务器的端口开在2049,但由于文件系统非常复杂。因此NFS还有其他的程序去启动额外的端口,这些额外的用来传输数据的端口是随机选择的,是小于1024的端口

从而存在rpc 服务;所以rpc服务的主要目的就是为了使客户端和服务端通过正确的端口进行连接,接下来就让我们一起看看rpc的工作工程。

rpc服务

RPC(Remote Procedure Call)即远程过程调用。RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的port上去;

那具体的端口是怎么通知的呢?

在这里插入图片描述
在工作过程中 注册完成后 客户端和服务端的rpc服务进行交流后 需要将rpc程序转化为Internet 的端口号 这也是portmap 相当于端口映射

portmap

功能:主要是把RPC程序号转化为Internet的端口号。
特点:只在第一次建立连接时候帮助网络应用程序找到正确的port,当当双方正确连接时,端 口就和应用绑定,portmap就无用。相当于媒婆。
RPC:Remote Procedure Call,远程过程调用,如NFS
如:window—服务–
在这里插入图片描述

	如打印机,是由你计算机上对应的程序去调用打印机上相应的程序来进行工作的。

下边我们来总结一下:

NFS的工作过程:

1)首先服务器端启动RPC服务,并开启111端口
2)服务器端启动NFS服务,并向RPC注册端口信息
3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
在这里插入图片描述

NFS服务的优缺点

(1)优点
a.节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问
b.简单容易上手
c.方便部署非常快速,维护十分简单
(2)缺点
a.局限性容易发生单点故障,及server机宕机了所有客户端都不能访问
b.在高并发下NFS效率/性能有限
c.客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)
d.NFS的数据是明文的,对数据完整性不做验证
e.多台机器挂载NFS服务器时,连接管理维护麻烦

相关配置:

要部署NFS服务,必须安装下面两个软件包:
1.nfs-utils:NFS主程序
2.rpcbind:PRC主程序
rpcbind安装成功后默认已经开启,并且为开机自动启动。如果没有启动的话,我们来重新启动rcpbind服务

重启rcpbind服务-------------systemctl restart nfs
查看nfs服务所开启的端口号---------netstat -tulnp |grep -E ‘(rpc|nfs)’
(netstat -t tcp l监听 n 数字 p pid 服务端口)
查看nfs常见进程详解-----------ps -ef | grep -E 'rpc|nfs’

**

1)进程

**
nfsd最主要的NFS服务提供程序,这个daemon主要的功能就是管理客户端是否能够使用服务器文件系统挂载信息,其中还包含判断这个登录用户的ID。
rpc.mountd
这个daemon主要功能则是管理NFS的文件系统。当client端顺利通过rpc.nfsd登入主机后,在它可以使用NFS服务器提供规定文件之前,还会经过文件使用权限的认证程序。它会去读取NFS的配置  文件/etc/exports来对比客户端的权限,当通过这一关之后,client端也就取得使用NFS文件的权限。
rpc.statd(非必要)
这个daemon可以用来检查文件的一致性,若发生因为客户端同时使用同一个文件造成文件损坏时,rpc.statd可以用来检测并尝试恢复该文件
*

2)常用目录和文件
  •   /etc/exports
      /usr/sbin/exportfs
      /usr/sbin/showmount
      /var/lib/nfs/*tab
      	etab	记录NFS分享出来的目录的完整权限设定值
      	xtab	记录曾经链接到此NFS主机的相关客户端数据
    

配置文件 重点



配置文件 /etc/exports


	格式
	输出目录	客户端 选项	[访问权限,用户映射,其他]   
	输出目录:	需要共享的目录路径
	客户端:	服务的用户对象
	选项:	共享的权限,紧跟客户端列

输出目录就是需要共享目录的绝对路径
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
自己理解 用户映射:
1.客户端root 与服务器端root 所属用户和所属组需要区分(在服务器端映射为nfsnobody)
2.客户端的普通用户上传的文件 在本地查看为普通用户的名字 和所属组
服务器端查看 是该用户的UID GID
3.如果服务器端存在和该用户相同的UID 和GID 则 显示为服务器端普通用户的名字

最重要的就是 对于root用户的区分 为了避免客户端和服务端root用户创建的文件的区分 所以只要是客户端root创建的文件 在服务端查看 默认映射为nfsnobody

其他选项:

(加粗为重要 其他为了解选项)
*******async 锁涉及到文件系统i/O的操作都是异步处理,即不会同步写到磁盘,此参数会提高性能,但是会降低数据安全
一般生产环境,不推荐使用,除非性能要求高,数据可靠性不高的场合
atime 在每一次数据访问是,同步更新每次的访问的inode的时间,默认是atime,在高并发的情况下,建议加上noatime来取消默认这个选项,以达到IO,优化目的3,auto 能够被自动挂载
******defaults 这是缺省值,rw,suid,dev,exec,auto,nouser,async
exec 运行可以执行二进制文件,取消这个参数会提升系统安全性
nodiratime 不更新文件爱你系统上的directory inode访问时间,高并发时候建议使用此选型
noauto 不自动挂载
noexec 即使设置了noexec shell php 程序还是可以执行
nosuid 禁止已给普通用户挂载文件系统,
secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async:将数据先保存在内存缓冲区中,必要时才写入磁盘;

wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
no_wdelay:若有写操作则立即执行,应与sync配合使用;
subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

提升练习:

例题1
服务端
配置#vim /etc/exports
/data *(ro) :wq
#mkdir /data
配置完成后重启服务
#systemctl restart nfs
用以下命令来查看共享的nfs
#showmount -e 192.168.221.250
Export list for 192.168.140.250:
/data *
关闭防火墙
#systemctl stop firewalld

客户端
#mount (服务端地址)192.168.140.250:/data /mnt
服务端
[root@r ~]# exportfs -r 重新读一遍
#ehco haha >> /data/haha
客户端
[root@hehe mnt]# ll /mnt
总用量 4
-rw-r–r--. 1 root root 5 2月 11 10:28 haha
注意:在客户端如果要删除haha文件需要在服务端的主配置文件更改为
data *(rw)
将ll -d /data 权限更改为如下
[root@r ~]# ll -d /data
drwxr-xrwx. 2 root root 17 2月 11 10:28 /data
然后在客户端删除/mnt/haha

在客户端写入文件
[root@hehe mnt]# echo hehe >> /mnt/hehe.txt
[root@hehe mnt]# ll /mnt
总用量 4
-rw-r–r--. 1 nfsnobody nfsnobody 5 2月 11 10:55 hehe.txt root用户直接映射为匿名用户
如果是在客户端用普通用户创建文件在/mnt 在服务端查看/data的权限是客户端普通用户的uid,gid 如果在服务端有与客户端相对应的uid gid就显示用户名。

练习提升

实验环境 :开启两台虚拟机
一台为服务端
一台为客户端
都必须上面提到的两种包 并且重启服务
在这里插入图片描述
等准备工作
在这里插入图片描述

服务端==
[root@server ~]# mkdir -pv /nfs/shared
mkdir: 已创建目录 “/nfs”
mkdir: 已创建目录 “/nfs/shared”
[root@server ~]# echo xixi jiayou >/nfs/shared/xixi
[root@server ~]# vim /etc/exports
在这里插入图片描述
[root@server ~]# exportfs -r 最好不要直接重启 NFS服务 可以选取这种重新读入

在客户端进行查看
[root@client ~]# systemctl restart nfs 重启nfs服务
[root@client ~]# showmount -e 172.24.8.137
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
[root@client ~]# systemctl stop firewalld.service
[root@client ~]# setenforce 0

[root@client ~]# showmount -e 172.24.8.137 查看服务端共享目录
Export list for 172.24.8.137:
/nfs/shared *
[root@client ~]# mount 172.24.8.137:/nfs/shared /mnt 实现挂载
[root@client ~]# cd /mnt
[root@client mnt]# ll
total 4
-rw-r–r--. 1 root root 12 Mar 29 10:06 xixi
[root@client mnt]# cat xixi
xixi jiayou
[root@client mnt]# touch haha 无法创建文件
touch: cannot touch ‘haha’: Read-only file system

服务端==
创建用户和用户组
[root@server ~]# groupadd -g 210 nfs-upload
[root@server ~]# useradd -u 210 -g 210 nfs-upload

[root@server ~]# id nfs-upload
uid=210(nfs-upload) gid=210(nfs-upload) 组=210(nfs-upload)
[root@server ~]# vim /etc/exports
在这里插入图片描述
[root@server ~]# mkdir /nfs/upload
[root@server ~]# echo haha >/nfs/upload/haha
修改目录的权限 否则客户端访问时 为其他用户0 无法创建目录;
[root@server ~]# chmod o=rwx /nfs/upload/
[root@server ~]# exportfs -r

在服务端查看结果
[root@server ~]# ll /nfs/upload/
总用量 4
-rw-r–r--. 1 root root 5 3月 29 10:26 haha
-rw-r–r--. 1 nfs-upload nfs-upload 0 3月 29 10:32 xixi

客户端
挂载
[root@client mnt]# mkdir /upload
[root@client mnt]# mount 172.24.8.137:/nfs/upload /upload
[root@client mnt]# cd /upload/
[root@client upload]# ll
total 4
-rw-r–r--. 1 root root 5 Mar 29 10:26 haha
没有给文件系统创建目录时:
[root@client upload]# touch xixi
touch: cannot touch ‘xixi’: Permission denied
[root@client upload]# touch xixi
[root@client upload]# ll
total 4
-rw-r–r--. 1 root root 5 Mar 29 10:26 haha
-rw-r–r--. 1 210 210 0 Mar 29 10:32 xixi
然后在服务端进行查看。

服务端==
[root@server ~]# mkdir /home/tom
[root@server ~]# echo haha123456 >/home/tom/xixi
[root@server ~]# vim /etc/exports
在这里插入图片描述
[root@server ~]# userdd tom
useradd:警告:此主目录已经存在。
不从 skel 目录里向其中复制任何文件。
[root@server ~]# id tom
uid=1001(tom) gid=1001(tom) 组=1001(tom)
[root@server ~]# exportfs -r
客户端
[root@client haha]# showmount -e 172.24.8.137
Export list for 172.24.8.137:
/nfs/shared *
/nfs/upload 172.24.8.0/24
/home/tom 172.24.8.139
[root@client haha]#
[root@client upload]# mkdir /haha
[root@client upload]# mount 172.24.8.137:/home/tom /haha

服务端:
[root@server ~]# chown tom:tom /home/tom/
[root@server ~]# chmod 700 /home/tom/

客户端查看
在这里插入图片描述

测试 结果显示 只能tom用户才可以完全访问改目录
[root@client /]# cd /haha
[root@client haha]# ll
total 4
-rw-r–r--. 1 root root 11 Mar 29 11:05 xixi
[root@client haha]# touch a
touch: cannot touch ‘a’: Permission denied
[root@client haha]# su tom
[tom@client haha]$ touch a

[tom@client haha]$ ll
total 4
-rw-rw-r–. 1 tom tom 0 Mar 29 11:08 a
-rw-r–r--. 1 root root 11 Mar 29 11:05 xixi
[root@client haha]# su redhat
[redhat@client haha]$ touch a

touch: cannot touch ‘a’: Permission denied
上述测试 pwd 均在 /haha 目录下操作 所以还不能说明只有tom用户才能完全访问该目录;所以现在这张图 在退出/haha目录后 root用户无法切换到/haha 目录下。
在这里插入图片描述
同样 redhat用户也无法访问该目录
在这里插入图片描述
只有tom用户才可以完全访问该目录
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值