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
下一篇 2016-04-28

相关推荐

  • CentOS开发环境搭建

        一个月之前将系统换为Linux,昨天系统运行的时候突然死机,开机之后进不了系统,并且BIOS无法识别硬盘,无奈只有在普通硬盘上重装系统。搭建开发环境,为了避免再次遇到类似现象,或在下次遇到这类问题快速搭建开发环境,记录开发环境搭建的过程。 1、启用wifi echo "blacklist&n…

    Linux干货 2016-08-04
  • 进程管理工具

    进程管理工具 kill man 7 signal 1) SIGHUP: 无须关闭进程而让其重读配置文件 kill -1 进程编号 2) SIGINT: 中止正在运行的进程;相当于Ctrl+c 9) SIGKILL: 杀死正在运行的进程 再生进程 kill -9 杀不掉 15) SIGTERM:终止正在运行的进程 kill -15/或不写(默认) +进程编号。…

    Linux干货 2016-09-11
  • Linux运维学习历程-第四天-Linux的使用帮助和快捷键

    本章内容     命令存放位置     命令帮助      help     man帮助     其它帮助        命令历史     快捷键 一、命令存放位置   &nbsp…

    Linux干货 2016-08-03
  • 管道:管道符;cat和more命令 重定向:文件标识符:I/O重定向符号及其用法;exec命令;代码块重定向 命令行处理:命令行处理流程;eval命令 管道: 管道是Linux编程中最常用的技术之一,Shell编程中竖杠符号:“|” command1 | command2 | command3 | … |commandn command1到commandn表…

    Linux干货 2016-08-05
  • N25第六周博客作业

    第六周博客作业   请详细总结vim编辑器的使用并完成以下练习题 1、 复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; :%s@^\([[:space:]]\+\)@#\1@ig    2、 复制/boot/grub/grub.con…

    Linux干货 2017-01-10
  • 群集简介和LVS_nat模式配置

    群集简介: 群集(或集群)和称呼来自于英文单词cluster,表示一群、一串的意思,用在服务器领域则表示大量服务器的集合体,以区分于单个服务器。 根据实际企业环境的不同,群集所提供的功能也各不相同,采用的技术细节也可能各有千秋,但无论哪种群集,都至少包括两台节点服务器。而对外表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机。根据群集…

    Linux干货 2017-02-13

评论列表(2条)

  • tomshen
    tomshen 2016-06-09 17:40

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

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

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