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

相关推荐

  • N26 第七周作业

    1、创建一个10G分区,并格式为ext4文件系统;(1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; [root@localhost ~]# fdisk /dev/sdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in mem…

    Linux干货 2017-02-07
  • 2016-11-4作业

    1、创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项  mkfs.ext4 -b 2048  -L "TEST" -m 1 /dev/sdb6 2、写一个脚本,完成如下功能: (1) 列出当前系统识别到…

    Linux干货 2016-11-06
  • M22 用户、组学习总结

    Linux系统的登录方式是通过账号和密码。每一个登录账号都有一个主组可能有附加组。Linux内的文件和目录都有所有者和属组,只有相应权限的账户可以对其进行操作,下面我对用户权限相关内容进行了总结。   1、  用户ID,每个用户具有相应的ID号码,主要分为两类:系统ID和用户ID,在Centos6中系统ID为1-499,用户ID >…

    2017-02-22
  • 第五周作业

    1、显示当前系统上root,fedora或user1用户的默认shell。 [root@hostname ~]# grep -E ‘^(root|fedora|user1)’ /etc/passwd | cut -d: -f1,7 root:/bin/bash 2、找出/etc/rc.d/init.d/functions文件中某词后面跟一组小括号的行,形如:…

    Linux干货 2017-08-04
  • linux磁盘分区格式化基本操作

    磁盘分区 分区格式的两种选择:MBR和GPT 分区命令: parted的操作都是实时生效的,小心使用,主要是用于大于2T硬盘,支持MBR和GPT两种格式。 用法:parted [选项]… [设备[命令[参数]…]…] parted /dev/sdb mklabelgpt|msdos //选择分区格式 parted…

    Linux干货 2017-04-24
  • DNS和openssl

    本文主要讲述ssl以及使用openssl创建CA,DNS服务器的搭建  一.数据在互联网上传输存在各种各样的分险,数据在传输的过程中可能会被篡改,被截取等,于是就不得不解决这些安全问题,为了解决这些问题,ssl协议也就诞生了,ssl(Secure Socket Layer),首先,它是一中协议,专用于对数据进行加密与解密,是一个应用层协议,该协议提…

    Linux干货 2016-12-11

评论列表(2条)

  • tomshen
    tomshen 2016-06-09 17:40

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

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

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