NFS

NFS初探


  • NFS概述

  • NFS工作流程

  • NFS Server端设置

  • NFS工具与命令

  • NFS配置实例


NFS概述

NFS是什么?

NFS,network file system(网络文件系统)的缩写,是一种实现文件共享的实现方式。

NFS的功能是什么

NFS基于RPC协议,实现远程系统调用,共享文件资源。

NFS工作流程

nfs

RPC,Remote Procedure Call Protocol,远程过程调用协议,是实现本地调用远程主机实现系统调用的协议。
portmapper:负责分配RPC服务器的端口,并在客户端请求时,负责响应目的RPC服务器端口返回给客户端,工作在tcp与udp的111端口上。
mountd:是nfs服务的认证服务的守护进程,客户端在收到返回的真正端口时,就会去连接mountd,认证取得令牌。
nfsd:nfs的守护进程,负责接收到用户的调用请求后与内核发出请求并得到调用结果响应给用户。
idmapd:是NFS的一个程序,用来负责远程客户端创建文件后的权限问题。

nfs Server:
    nfsd:NFS的守护进程,工作在tcp与udp的2049端口上。
    mountd:NFS用来验证客户端信息的守护进程,工作在随机端口。
    rquotad:磁盘限额进程。
    lockd:文件锁。
    idmapd:权限映射。

NFS Server端

所需安装包

rpcbind:提供rpc服务(mapping)
nfs-utils:提供nfs,mountd与其他相关程序。

NFS服务器端配置

相关文件:
    /etc/exports:nfs的主要设定文件。
    /var/lib/nfs/*tab:设定记录文件。
        etab:共享目录的完整权限设定。
        xtab:曾经连接的客户端资料。
    /usr/sbin/exportfs:NFS分享资源命令,可以用来重新获取共享文件设定,挂载,卸载等。
    /usr/sbin/showmount:用来查看远程主机的共享信息。

exports文档设定格式

/PATH/TO/NFS_DIR    CLITNES_IP1(OPTION1,OPTION2...)        CLITNES_IP2(OPTION1,OPTION2...)    ...

例如:     /tmp/nfs    192.168.1.1(rw,root_squash,anonuid=50,anongid=50) 192.168.1.2(ro) 
            指定了共享文件夹为/tmp/nfs,192.168.1.1有读写权限,禁止root用户登录,使用的账户身份为uid/gid为50的账号。
            192.168.1.2只有ro权限,并使用默认身份,nobady。

常用的OPTION:
        rw / ro                                读写/只读
        sync / async                        同步传输/异步传输
        root_squash / no_root-squash        压缩root用户权限/不压缩root用户权限
        all_squash                            所有用户都压缩权限。
        anonuid=# / anongid=#                指定使用的用户或组

权限相关:

当远程用户访问共享文件夹时是使用什么权限呢?如果创建文件那么属主和属组又是什么呢?  
nfs默认是使用你本地主机当前用户UID与GID相对应的身份来使用,如果远程服务端没有此用户或组就会以数字的形式呈现。  

如果是root用户,那么在远程主机上肯定就是使用root了,因为root默认的uid gid都是0!
这样就太危险了,所以如果使用了root访问,NFS会自动压缩权限为最小权限nfsnobady。

当本地用户使用不一样的名字,UID却是相同的创建文件,会通过idmapd这个进程来映射,所以你在远程看到的还会是你原来的name。

当你将权限都设定完成后记得去更改服务器端文件夹的权限,推荐使用acl来设定,因为你的权限其实为 "用户权限与文件夹权限的交集"。

NFS工具与命令

showmount:查看服务器端共享文件夹状态的。

showmount [-ae] [hostname|ip]
            -a:显示目前服务端与用户端的NFS连线状态。
            -e:显示目标服务器端exports所分享的目录资料。

expartfs:重新读取expart配置,无需重启服务。

expartfs [-aruv] 
            -a:全部读取或者取消/etc/export配置。
            -r:重新读取export并更新/etc/exports /var/libnfs/xtab
            -u:卸载目录。
            -v:显示重读或卸载详细信息到屏幕

NFS配置实例:

配置:

host1(192.168.1.1):
[root@host1 nfs]# service nfs start                启动nfs服务。
Starting NFS services:                                     [  OK  ]            启动exportfs    
Starting NFS quotas:                                       [  OK  ]            启动quotas
Starting NFS mountd:                                       [  OK  ]            启动mountd
Starting NFS daemon:                                       [  OK  ]            启动nfsd
Starting RPC idmapd:                                       [  OK  ]            启动idmapd
[root@host1 ~]# echo '/tmp/nfs  192.168.1.2(rw,no_root_squash)' >> /etc/exports     写入配置,不使用root权限压缩。
[root@host1 ~]# mkdir -pv /tmp/nfs            创建共享文件夹。
[root@host1 ~]# exportfs -arv                读入配置。
exporting 192.168.1.2:/tmp/nfs                

host2(192.168.1.2):
[root@host2 ~]# showmount -e 192.168.1.1        查看192.168.1.1的export信息。
Export list for 192.168.1.1:                
/tmp/nfs 192.168.1.2                     192.168.1.1的内容。
[root@host2 ~]# mount -t nfs 192.168.1.1:/tmp/nfs /tmp      挂载共享文件夹。

测试:

[root@host2 tmp]# touch test        root身份创建test
[root@host2 tmp]# ll
total 0
-rw-r--r--. 1 root root    0 Apr 25  2016 test        可以看到user group为root

[root@host1 nfs]# ll
total 0
-rw-r--r--. 1 root root 0 Apr 25 19:32 test            服务端查看也为root

[root@host1 tmp]# echo '/tmp/nfs  192.168.1.2(rw,root_squash)' > /etc/exports         覆盖写入配置,使用root权限压缩。
[root@host1 tmp]# exportfs -ar    读入配置
[root@host1 tmp]# setfacl -m u:nfsnobody:rwx nfs/        设置nfs/的权限,添加acl

[root@host2 tmp]# touch test2        客户端创建文件test2
[root@host2 tmp]# ll
total 0
-rw-r--r--. 1 root root    0 Apr 25  2016 test
-rw-r--r--. 1 nfsnobody nfsnobody 0 Apr 25 19:45 test2        可以看到user group为nfsnobody的默认属主属组。

[root@host1 ~]# echo '/tmp/nfs  192.168.1.2(rw,root_squash,anonuid=500)' > /etc/exports  覆盖写入配置,指定登陆uid。
[root@host1 ~]# setfacl -m u:xiao:rwx /tmp/nfs/  设置权限,添加acl
[root@host1 ~]# exportfs -ar        读入配置。

[xiao@host2 tmp]$ touch test3    客户端使用对应UID用户创建文件。
[xiao@host2 tmp]$ ll
total 0
-rw-r--r--. 1 root root    0 Apr 25  2016 test
-rw-r--r--. 1 nfsnobody nfsnobody 0 Apr 25 19:45 test2
-rw-rw-r--. 1 xiao      xiao      0 Apr 25  2016 test3        user group 为 xiao

原创文章,作者:Net18_肖肖,如若转载,请注明出处:http://www.178linux.com/15665

(0)
Net18_肖肖Net18_肖肖
上一篇 2016-04-28 08:38
下一篇 2016-04-28 08:43

相关推荐

  • 8.3号,第6天

    三种权限rwx对文件和目录的不同意义: 权限对于目录的意义: 1,r权限:拥有此权限表示可以读取目录结构列表,也就是说可以查看目录下的文件名和子目录名,注意:仅仅指的是名字。 2、w权限:拥有此权限表示具有更改该目录结构列表的权限,总之,目录的w权限与该目录下的文件名或子目录名的变动有关,注意:指的是名字。具体如下:      …

    Linux干货 2016-08-05
  • 马哥教育网络班21期+第7周课程练习

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;(2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@itop ~]# fdisk /dev/sda&nbsp…

    Linux干货 2016-08-30
  • LAMP快速部署及LAMP组合深入讲解-1

      lamp php php: 脚本编程语言、嵌入到html中的嵌入式web程序开发语言;基于zend编译成opcode(二进制格式的字节码,重复运行,可省略编译环境) 一、PHP简介 PHP是通用服务器端脚本编程语言,其主要用于web开发以实现动态web页面,它也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一…

    Linux干货 2017-06-04
  • MySQL优化大全

     1. 优化SQL   1)通过show status了解各种sql的执行频率         show status like 'Com_%'        了解 Com_select,Com_in…

    Linux干货 2015-04-13
  • 细节决定成败–空格的巨大作用以及正则表达式中元字符的转义

    字符串的条件判定 1.字符串判定 一定要用双[[ ]] 2.字符串判定=~默认支持扩展正则表达式,这里注意双引号的使用 仅仅做是否包含时,有无双引号无区别。 但是利用其他扩展表达式时 双引号一定要去掉 锚定示例 多条件判定时-o -a使用时,不能使用双中括号 空格有无的差别 !的使用细节 !到目前为止 有两种意义 条件判定取反 历史命令的调用 两者的使用却别…

    2017-03-19
  • The second week’s homework

    一.linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 Linux 文件与目录管理 我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /。 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。 首先需要知道什么是绝对路径与相对路径。 绝对路径: 路径的写法,由根目录 / 写起,例如: /usr/shar…

    Linux干货 2016-12-12

评论列表(2条)

  • tomshen
    tomshen 2016-06-09 17:40

    配置完成后 客户端要怎样访问服务器端呢?

    • Net18_肖肖
      Net18_肖肖 2016-06-09 17:45

      @tomshen一般通过将共享的文件夹挂载到本地的方式 如:
      mount -t nfs serverip:/dir mountpoint