Linux - 进阶 NFS 服务器 工作原理,安装,主文件分析

NFS工作原理  

                示例图  : 

                Linux - 进阶 NFS 服务器 工作原理,安装,主文件分析_第1张图片

        

       我们在上篇文章也讲过, 要实现 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

       Linux - 进阶 NFS 服务器 工作原理,安装,主文件分析_第2张图片

       上示命令只做了解 

NFS 的使用  : 

         

     安装 :   

           无论哪种服务,它装的这个软件都会伴随着 开发版本而不同,比如 红帽8,它就有一些服

              务就不需要装,就像 rpcbind ,就已经装过了,就在安装系统的时候就已经装过了; 

              但有的不同的开发版本就有可能还没有装这个 rpcbind ,那就得装一下,甚至安装包的名

              字也会有一些变化,这个就是需要注意的~!!!

               

               我们可以使用命令来查看一下 关于 nfs 的相关安装包 有哪些 

               ===>>> 

[root@server ~]# yum list | grep nfs 

    Linux - 进阶 NFS 服务器 工作原理,安装,主文件分析_第3张图片

    上面就显示出,所有与 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 

   Linux - 进阶 NFS 服务器 工作原理,安装,主文件分析_第4张图片

  上面显示的就是 前面说的, 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 会

                                      做一个映射来保护 客户端的隐私及安全。

你可能感兴趣的:(Linux,进阶,服务器,linux,运维,rpc)