NFS工作原理 :
示例图 :
我们在上篇文章也讲过, 要实现 NFS 服务的搭建,最起码得 两个 服务 ( NFS 服务,RPC
服务) 涉及 三方 : 服务端 ( 房源 ) 客户端 ( 租客,买房 ) RPC 服务 ( 中介 ) )
流程 :
* 首先 服务端 启动 RPC 服务,并开启 111 端口 ( 启动后就会监听与 NFS 相关的请求)
** 服务器端 启动 NFS 服务,并向 RPC 注册 端口信息
( 卖房的人就是 NFS 服务端 会把相关信息向 RPC 进行注册,相关信息重要的就比如访
问连接是哪个端口 )
*** 客户端启动 RPC ( portmap 服务 ) ,向服务端的 RPC ( portmap ) 服务请求服务
端的NFS端口
**** 服务端的 RPC ( portmap ) 服务反馈 NFS 端口信息给客户端。
( 服务器搭建成功后可以使用下列命令查看,一般都是 2049 )
[root@server ~]# cat /etc/services | grep nfs
上示命令只做了解
NFS 的使用 :
安装 :
# 无论哪种服务,它装的这个软件都会伴随着 开发版本而不同,比如 红帽8,它就有一些服
务就不需要装,就像 rpcbind ,就已经装过了,就在安装系统的时候就已经装过了;
但有的不同的开发版本就有可能还没有装这个 rpcbind ,那就得装一下,甚至安装包的名
字也会有一些变化,这个就是需要注意的~!!!
我们可以使用命令来查看一下 关于 nfs 的相关安装包 有哪些
===>>>
[root@server ~]# yum list | grep nfs
上面就显示出,所有与 NFS 有关的安装包了 ( 只要包含 nfs 的都会显示 )
一般来讲,只要是 nfs 打头的那就是 安装包, 当然了,也要参考 后面的扩展名
要下 X86_64 平台的, 不能下成 32 平台的;最后两个的 .noarch 是 任何平台都能装 。
好了, 公布下 nfs 的安装包 —— nfs-utils.x86_64
安装 NFS
===>>>
[root@server ~]# yum install nfs-utils -y
上示就把 nfs 就安装好了 ( NFS 的主程序安装包 )
接下来,安装 RPC
===>>>
[root@server ~]# yum install rpcbind -y
上面显示的就是 前面说的, rpc 已经安装了( 默认就安装了 )
要注意的是 安装 RPC ,它的安装包是 rpcbind 而不是 RPC
至此, 该安装的服务就都安装完毕了 ~!!!!
配置文件 :
主配置文件 : /etc/exports ( 该文件不一定存在,但路径就是这个,vim 就会新建一个 )
/usr/sbin/exportfs : 是一个可执行文件, 该文件用于维护 nfs 共享目录 资源的命令文件
可以使用命令重新共享 /etc/exports 的目录资源 ,也可卸载共享目录。
日志目录 : /var/lib/nfs
权限设置文件 : /var/lib/nfs/etab
主配置文件分析 :
# /etc/exports 文件默认为 空文件,需要输入 nfs 共享命令
命令的语法 :
格式 : 共享目录的路径 允许访问的NFS客户端(共享权限参数)
注意, 上面格式的 NFS客户端的端字和(共享权限参数)的左括号是挨着的。
分析 :
共享目录的路径 : 就是 你想共享的那个数据/目录 的路径
允许访问的 NFS 客户端 : 可以写完整的 IP 地址或 IP 网段
===>>>
如 :
* 192.168.1.1/24
* 192.168.1.0/255.255.255.0
* 192.168.1.0/24
* 格式上的 “ 允许访问的NFS客户端 ” 那个位置 还可以写成 *
这个 * 就代表 允许所有主机都可以访问 ,不限定,任意计算机。
共享权限参数 : 必须写在圆括号中,且括号是紧挨着主机名的,权限的相关
参数如下,多个参数之间用逗号 隔开。
===>>>
权限参数 | 作用 |
ro | 只读 |
rw | 读写 ( 最终还要看文件 系统 rwx 权限) |
root_squash | 当 NFS 客户端以 root 账户访问时,映射为 NFS 服务端的匿名账户( 匿名为 nobody ) |
no_root_squash | 当 NFS 客户端以 root 账户访问时,映射为root 账户 ( 不推荐,不安全 ) |
all_squash | 无论 NFS 客户端使用什么账户访问,均映射为 NFS 服务器的匿名账户( nobody ),推荐 |
no_all_squash | 客户端普通账户访问服务器的数据时,实际的信息会原样显示。 |
anonuid= anongid= | 将文件的用户和工作组映射为指定的UID 和 GID ,若不指定则默认为 65534( nobody ) |
sync | 同步,同时将数据写入内存及硬盘中,保证数据不会丢失,推荐 |
async | 异步,优先将数据保存到内存,然后再写入硬盘,效率高,但可能会数据丢失。 不推荐 |
上示表格呢,主要就是展示的是 ( 共享权限参数 ) 里的内容;
也可以看到,上示表格 可以分了 三个段,
也就是说共享权限参数里要写三个方面的内容
第一方面 : 文件的具体权限
第二方面 : 账户映射关系
第三方面 : 传输模式
示例 :
* /home/public *(rw,sync)
===>>> 对所有主机 共享 /home/public这个目录,
具有可读可写权限,同步传输
可以注意到的是 共享权限参数 没有写满三个,而是两个,
少了一个 账户映射关系 ( 没有写,那就是 all_squash )
* /home/public 192.168.48.130/24(rw,all_squash,sync)
===>>> 对 192.168.48.130 这台主机 开放 共享/home/public 这个目录
具有读写权限,映射为 nobody 账户,同步传输
* /home/public 192.168.48.0/24(rw,sync,all_aquash,anonuid=2000,
anongid=2000)
===>>> 对192.168.48.0 网段所有主机开放共享 /home/public, 具有读写权
限,映射为匿名账户(nobody账户),但是匿名账户的 UID,GID 不
是65534嘛,按照显示修改 uid 及 gid 为2000;同步传输。
XXXXXX : 还需要着重强调的一点是
===>>>
就是我们在上示表格第三行 【 读写 ( 最终还要看文件系统 rwx 权限)】
我们表格第三行的意思是说
我们表格里的 什么 ro, rw 我们说是 只读,可读可写
对着没 ?? 对着呢~!! 没错,是 只读,可读可写 。
但是,要强调的是
如果 我们的 NFS 的共享权限是 rw ,而 共享文件本身 ( rwx 那个权限)
要是 r-- 是 只读, 那就怎么样 ??
最终就得以 共享文件本身的权限 ( r-- ) 只读 为准 ~!!!!
XXXXXX : 我们对 账户映射关系 解释下
===>>>
说白就是 客户端 是以什么身份 来访问这个 服务端提供上去的共享文件
我们现在不是干什么 都讲究有一个账户嘛,
比如 A 想访问 B 的共享数据,那就是说 这个 A 是以什么身份来访问的 ?
如果 A 当前登录的账户是 root ,那换句话说是不是 A 以 root 账户来访问
B 的共享数据的 ~!!
问题是在对方的服务器上怎么体现 A 是以什么身份呢 ??
如果直接体现的话,就是 直接显示了 A 此时的身份就是 root 了,那不就
安全存在一定的隐患了,因此 就会做一个 映射 ~!!!
客户端以 root 账户 来访问 服务端时,服务端就会把 root 改为 nobody 会
做一个映射来保护 客户端的隐私及安全。