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)
上一篇 2016-04-28 08:38
下一篇 2016-04-28 08:43

相关推荐

  • 如何查看当前系统版本的版本号

    作为一名系统管理员,了解系统版本号是必然。因为不同大版本之间的命令和启动流程等之间有很大的差异;     一、在/etc/system-release 里面查看         ~]#ls -l /etc/system-release &n…

    Linux干货 2016-07-29
  • N22-第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 ~]# cp -r /etc/skel /home/tuser1 ~]# chmod -R go= /home/tuser1/ 2、编辑/etc…

    Linux干货 2016-09-06
  • 文本编辑三剑客之gawk

     awk 本章内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 awk条件判断 awk循环 awk数组 awk函数 调用系统命令 1.awk介绍 ★ Linux 文本处理工具三剑客:grep、sed、awk。其中grep是一种文本过滤工具;sed是文本行编辑器,而awk是一种报表生成器,就是对文件进行格式化处理的…

    Linux干货 2016-09-24
  • week7

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; fdisk /dev/sdb  按提示创建出来10G分区 查看1:…

    Linux干货 2016-12-08
  • linux文本编辑器,vim编辑器

    定义:文本(纯文本信息,必须是不加任何修饰的文本信息)编辑器 文本编辑器种类:                 行文本编辑器 :sed       &…

    Linux干货 2016-08-10
  • heartbeat实现高可用集群(2)

    [[ heartbeat v2 + crm ]] 环境 node1 192.168.1.35 node2 192.168.1.36 fip 192.168.1.81 daemon httpd ha web service ip httpd node1&2 # vim ha.cf crm on # cd # rpm -ivh heartbeat-gui…

    Linux干货 2017-11-03

评论列表(2条)

  • tomshen
    tomshen 2016-06-09 17:40

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

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

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