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.www58058.com/15665

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

相關推薦

  • 第十八周博客作業

    1、為LNMP架構添加memcached支持,并完成對緩存效果的測試報告; 操作系統: CentOS 7.210.0.0.51 nginx+php+mysql10.0.0.52 memcached 一. 環境準備: 搭建LNMP編譯安裝環境 1. 配置163的yum源和阿里云的epel源 [root@localhost ~]# mv /etc/yum.rep…

    2017-07-12
  • 第八周作業

    shell腳本簡用

    Linux干貨 2017-11-27
  • Proxmox-Linux下的開源管理平臺

    1)proxmox簡介 Proxmox VE (Proxmox Virtual Environment) 是一個非常棒的集成OPENVZ 支持KVM應用的環境。有方便易用的WEB界面,基于JAVA的UI和內核接口,可以登錄到VM客戶方便的操作,還有易用的模板功能,基本跟老外的商業VPS環境差不多了,支持VT和ISCSI 2)proxmox的安裝與基本配置 安…

    Linux干貨 2016-08-08
  • 雙網卡綁定及單網卡多IP地址實現方法

    Bonding就是將多塊網卡綁定同一IP地址對外提供服務,可以實現高可用或者負載均衡。當然,直接給兩塊網卡設置同一IP地址是不可能的。通過bonding,虛擬一塊網卡對外提供連接,物理網卡的被修改為相同的MAC地址。mode=1(active-backup):一個網卡處于活動狀態 ,一個處于備份狀態,所有流量都在主鏈路上處理。當活動網卡down掉時,啟用備份…

    Linux干貨 2016-09-05
  • 前兩周linux基礎知識總結

    linux用戶權限管理 軟鏈接與硬鏈接 輸入輸出重定向 文本處理三劍客vim sed awk 包管理rpm yum 源碼包編譯安裝

    Linux干貨 2018-03-17
  • vim

    VIM是什么? Vim是從VI發展出來的一個文本編輯器,擁有許多豐富的功能,便于編程開發,在程序員中被廣泛使用,是類Unix系統用戶最喜歡的功能強大的跨平臺文本文件編輯工具。 為什么要用VIM? vi編輯器是所有類UNIX系統下標準的編輯器,他是我們使用Linux系統不能缺少的工具。對于所有類UNIX系統的任何版本,vi編輯器是完全相同的。而vim是從VI發…

    2017-06-07

評論列表(2條)

  • tomshen
    tomshen 2016-06-09 17:40

    配置完成后 客戶端要怎樣訪問服務器端呢?

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

      @tomshen一般通過將共享的文件夾掛載到本地的方式 如:
      mount -t nfs serverip:/dir mountpoint

欧美性久久久久