Linux系統NFS網路文件系統

来源:http://www.cnblogs.com/youkanyouxiao/archive/2016/09/11/5861773.html
-Advertisement-
Play Games

Linux系統NFS網路文件系統 NFS(network file system)網路文件系統,就是通過網路讓不同的主機系統之間可以共用文件或目錄,此種方法NFS客戶端使用掛載的方式讓共用文件或目錄到本地系統可掛載的目錄下 NFS實現是通過RPC服務來實現的 實現過程: 1、NFS RPC主要的功能 ...


Linux系統NFS網路文件系統

 

NFS(network file system)網路文件系統,就是通過網路讓不同的主機系統之間可以共用文件或目錄,此種方法NFS客戶端使用掛載的方式讓共用文件或目錄到本地系統可掛載的目錄下

NFS實現是通過RPC服務來實現的

實現過程:

1、NFS RPC主要的功能是記錄每個NFS功能所對應的埠號,並將信息傳遞給請求數據的NFS客戶端,從而實現數據的傳輸

2、NFS服務啟動時會隨機取用數個埠,並主動向RPC服務註冊取用的相關埠信息,RPC服務就知道每個埠對應的NFS功能了,然後RPC會用固定的埠(111)來監聽NFS客戶端的請求,將正確的NFS埠傳給NFS的客戶端

 

服務端啟動順序:

事先RPC服務,後啟動NFS服務,否則NFS服務無法向RPC服務進行註冊,Centos 5.x 系統下RPC服務為portmap,Centos 6.x系統為rpcbind

NFS軟體:nfs-utils 是NFS的主程式

NFS配置文件格式如下:

NFS共用目錄   NFS客戶端地址(參數1.參數2)

1、NFS共用目錄的實際目錄必須是絕對路徑

2、NFS客戶端為服務端授權可以訪問共用目錄的NFS客戶端地址,可以是IP、功能變數名稱、主機名、整個網段,或者用*來匹配所有主機

3、參數是對授權訪問NFS共用目錄的許可權(客戶端的訪問許可權集合)

 

安裝佈署過程

 

伺服器端配置如下

1、查看操作系統版本與內核

[root@Centos ~]# cat /etc/redhat-release 

CentOS release 6.5 (Final)

[root@Centos ~]# uname -r

2.6.32-431.el6.x86_64

 

2、檢查是否安裝NFS RPC服務

[root@Centos ~]# rpm -aq nfs-utils rpcbind

rpcbind-0.2.0-12.el6.x86_64

nfs-utils-1.2.3-39.el6.x86_64

 

3、如果沒安裝相關服務請使用如下命令進行安裝

yum install nfs-utils -y

yum install rpcbind  -y

 

啟動

按啟動的先後順序來啟動服務

[root@Centos ~]# /etc/init.d/rpcbind status

rpcbind is stopped

[root@Centos ~]# /etc/init.d/rpcbind start

Starting rpcbind:                                          [  OK  ]

[root@Centos ~]# /etc/init.d/nfs status        

rpc.svcgssd is stopped

rpc.mountd is stopped

nfsd is stopped

rpc.rquotad is stopped

[root@Centos ~]# rpcinfo -p localhost  查看rpc的註冊信息情況

   program vers proto   port  service

    100000    4   tcp    111  portmapper

    100000    3   tcp    111  portmapper

    100000    2   tcp    111  portmapper

    100000    4   udp    111  portmapper

    100000    3   udp    111  portmapper

    100000    2   udp    111  portmapper

 

[root@Centos ~]# /etc/init.d/nfs start

Starting NFS services:                                     [  OK  ]

Starting NFS quotas:                                       [  OK  ]

Starting NFS mountd:                                       [  OK  ]

Starting NFS daemon:                                       [  OK  ]

Starting RPC idmapd:                                       [  OK  ]

相關服務啟動後,我們再來查看NFS向RPC的註冊情況

如果想讓NFS、RPC服務開機自啟動,實際生產環境中一般都會將配置放在/etc/rc.local下麵

[root@Centos ~]# cat /etc/rc.local

####start up by 2016-08-21

/etc/init.d/rpcbind start

/etc/init.d/nfs start

檢查配置情況

 

[root@Centos /]# tail -2 /etc/rc.local 

/etc/init.d/rpcbind start

/etc/init.d/nfs start

5、配置服務端NFS配置文件/etc/exports

[root@Centos ~]# vi /etc/exports 

#####config for nfs-server 2016-8-21

/data/bbs 192.168.1.3(rw,sync)

檢查配置情況

 

[root@Centos /]# tail -2 /etc/exports 

#####config for nfs-server 2016-8-21

/data/bbs 192.168.1.3(rw,sync)

 

6、配置完成後重啟NFS服務

/etc/init.d/nfs reload  (/usr/bin/exprots -r) 兩者功能相同

[root@Centos /]# /etc/init.d/nfs reload

 

客戶端配置如下

1、查看伺服器操作系統版本與內核

[root@localhost ~]# cat /etc/redhat-release 

CentOS release 6.5 (Final)

[root@localhost ~]# uname -r

2.6.32-431.el6.x86_64

2、啟動RPC服務

[root@localhost ~]# /etc/init.d/rpcbind status

rpcbind is stopped

[root@localhost ~]# /etc/init.d/rpcbind start 

Starting rpcbind:                                          [  OK  ]

[root@localhost ~]# /etc/init.d/rpcbind status

rpcbind (pid  25679) is running...

3、查看掛載情況

[root@localhost ~]# showmount -e 192.168.1.2    

clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

[root@localhost ~]# ping 192.168.1.2

PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.

64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.745 ms

64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.532 ms

64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.470 ms

64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.522 ms

^C

--- 192.168.1.2 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3060ms

rtt min/avg/max/mdev = 0.470/0.567/0.745/0.106 ms

[root@localhost ~]# iptables -F           關閉服務與客戶端防火牆

[root@localhost ~]# showmount -e 192.168.1.2        

Export list for 192.168.1.2:

/data/bbs 192.168.1.3

4、客戶端進行NFS掛載

[root@localhost ~]# mount -t nfs 192.168.1.2:/data/bbs /mnt

[root@localhost ~]# df -h

Filesystem                    Size  Used Avail Use% Mounted on

/dev/mapper/VolGroup-lv_root   18G  3.3G   14G  20% /

tmpfs                         491M   72K  491M   1% /dev/shm

/dev/sda1                     485M   35M  426M   8% /boot

192.168.1.2:/data/bbs          50G  3.5G   44G   8% /mnt

5、測試共用

服務端查看具體目錄許可權

[root@Centos /]# ls -ld data/bbs/ 

drwxr-xr-x. 2 root root 4096 Aug 21 10:07 data/bbs/

表明其它用戶具有讀與執行許可權

[root@Centos /]# cd data/bbs/

[root@Centos bbs]# touch text.txt

[root@Centos bbs]# mkdir textdir

[root@Centos bbs]# ls

textdir  text.txt

客戶端測試

[root@localhost ~]# cd /mnt

[root@localhost mnt]# ls -ll

total 4

drwxr-xr-x. 2 root root 4096 Aug 21 05:39 textdir

-rw-r--r--. 1 root root    0 Aug 21 05:39 text.txt

[root@localhost mnt]# touch 123.txt

touch: cannot touch `123.txt': Permission denied ----> 許可權不足

所以需要在服務端改變其它用戶的訪問許可權才可以

[root@Centos /]# chmod 777 data/bbs/

[root@Centos /]# ls -ld data/bbs/

drwxrwxrwx. 3 root root 4096 Aug 21 10:39 /data/bbs/

然後在客戶端測試

[root@localhost mnt]# pwd

/mnt

[root@localhost mnt]# touch 123.txt

[root@localhost mnt]# ls -ll

total 4

-rw-r--r--. 1 nfsnobody nfsnobody    0 Aug 21 05:44 123.txt

drwxr-xr-x. 2 root      root      4096 Aug 21 05:39 textdir

-rw-r--r--. 1 root      root         0 Aug 21 05:39 text.txt

[root@localhost mnt]# echo "123">>123.txt 

[root@localhost mnt]# cat 123.txt 

123

 

經過測試表明,客戶端也可以正常訪問共用目錄與文件,同時也具有讀寫許可權,那麼問題又來了,客戶端是通過什麼用戶名來訪問伺服器端的呢,剛剛修改的許可權是徵對其它用戶(除了文件、目錄的所有者與所屬組外的用戶),如果需要限制訪問共用目錄,其實這個許可權是具有很大安全隱患的

 

那麼我們來服務端看看到底是授權什麼用戶來訪問共用目錄呢???

[root@Centos /]# cat /var/lib/nfs/etab 

/data/bbs       192.168.1.3(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)

這裡我們查看這個uid/gid都為65534的用戶是哪個???

[root@Centos /]# grep 65534 /etc/passwd

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

所以服務端我們將許可權重新修改如下

[root@Centos /]# chown -R nfsnobody:nfsnobody data/bbs/

[root@Centos /]# ls -ld data/bbs/

drwxrwxrwx. 3 nfsnobody nfsnobody 4096 Aug 21 10:44 data/bbs/

客戶端查看配置生效情況如下

[root@localhost mnt]# ls -ll

total 8

-rw-r--r--. 1 nfsnobody nfsnobody    4 Aug 21 05:44 123.txt

drwxr-xr-x. 2 nfsnobody nfsnobody 4096 Aug 21 05:39 textdir

-rw-r--r--. 1 nfsnobody nfsnobody    0 Aug 21 05:39 text.txt

 

但是細心的朋友們肯定也發現了,這樣還是不安全,因為所有相同的版本的系統都會預設存在這一個用戶nfsnobody,那麼對限制訪問還是沒有做到萬無一失,因此這裡就出現了更改預設用戶的做法,將預設用戶更改成其它用戶

其服務端配置如下

首先得添加用戶並禁止登陸指定它的UID

[root@Centos /]# useradd -s /sbin/nologin -M -u 3000 nfsuser

[root@Centos /]# tail -1 /etc/passwd

nfsuser:x:3000:3000::/home/nfsuser:/sbin/nologin

修改NFS配置

[root@Centos /]# echo "#####config for nfs-server 2016-8-21">/etc/exports 

清空配置並加上一行註釋信息

[root@Centos /]# echo "/data/bbs       192.168.1.3(rw,sync,all_squash,anonuid=3000,anongid=3000)">>/etc/exports         添加相關配置

[root@Centos /]# tail -2 /etc/exports            檢查配置情況

#####config for nfs-server 2016-8-21

/data/bbs       192.168.1.3(rw,sync,all_squash,anonuid=3000,anongid=3000)

 

因此客戶端同樣也需要添加用戶

[root@localhost mnt]# useradd -s /sbin/nologin -M -u 3000 nfsuser

[root@localhost mnt]# ls -ll

total 8

-rw-r--r--. 1 nfsnobody nfsnobody    4 Aug 21 05:44 123.txt

drwxr-xr-x. 2 nfsnobody nfsnobody 4096 Aug 21 05:39 textdir

-rw-r--r--. 1 nfsnobody nfsnobody    0 Aug 21 05:39 text.txt

 

測試發現還是原來預設的用戶,這是因為服務端雖然改了NFS的配置,但是共用目錄與文件的相關配置仍然是預設的所以上服務端查看下目錄許可權如下

[root@Centos bbs]# ls -ll

total 8

-rw-r--r--. 1 nfsnobody nfsnobody    4 Aug 21 10:44 123.txt

drwxr-xr-x. 2 nfsnobody nfsnobody 4096 Aug 21 10:39 textdir

-rw-r--r--. 1 nfsnobody nfsnobody    0 Aug 21 10:39 text.txt

因此需要對/data/bbs/這個共用目錄進行更改

[root@Centos bbs]# chown -R nfsuser.nfsuser /data/bbs/

[root@Centos bbs]# ls -ll

total 8

-rw-r--r--. 1 nfsuser nfsuser    4 Aug 21 10:44 123.txt

drwxr-xr-x. 2 nfsuser nfsuser 4096 Aug 21 10:39 textdir

-rw-r--r--. 1 nfsuser nfsuser    0 Aug 21 10:39 text.txt

 

最後登陸到客戶查看配置生效情況如下

[root@localhost mnt]# ls -ll

total 8

-rw-r--r--. 1 nfsuser nfsuser    4 Aug 21 05:44 123.txt

drwxr-xr-x. 2 nfsuser nfsuser 4096 Aug 21 05:39 textdir

-rw-r--r--. 1 nfsuser nfsuser    0 Aug 21 05:39 text.txt

[root@localhost mnt]# touch 234.txt

[root@localhost mnt]# ls -ll

total 8

-rw-r--r--. 1 nfsuser nfsuser    4 Aug 21 05:44 123.txt

-rw-r--r--. 1 nfsuser nfsuser    0 Aug 21 06:27 234.txt

-rw-r--r--. 1 nfsuser nfsuser    0 Aug 21 06:17 23.txt

drwxr-xr-x. 2 nfsuser nfsuser 4096 Aug 21 05:39 textdir

-rw-r--r--. 1 nfsuser nfsuser    0 Aug 21 05:39 text.txt

表明配置正確,且達到需求,此時訪問共用目錄的許可權就更改為nfsuser,其它主機如果沒有添加此用戶是無法正常訪問NFS的共用目錄與文件的,安全性比較高。至此整個安裝與佈署過和結束

 





 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 使用命令行打開文件(如 sublime) open -a /Applications/Sublime\ Text\ 2.app/ yourFile.log 如果使用頻繁,還可以添加軟連接 ...
  • 下麵是我學習linux的一些筆記,整理總結如下 首先先普及一下常識:DNS是用來解析功能變數名稱的;url埠預設是80,可以不寫;localhost 就是127.0.0.1,如果是root時,提示符為:# ,普通用戶則為:$; Linux下常用命令: 1.查看當前系統下登錄的用戶時,可以輸入whoami命 ...
  • 網上看了好多博客,截取的精華 ...
  • shell script簡介 shell是解釋型語言,就是解釋器會一條一條的翻譯每一條語句並執行,對比之下,C語言是編譯型語言,編譯器把整個工程編譯成可執行文件才能執行 在沒有續行符( )的情況下,shell腳本的一條語句以"回車"為結束 任何一個shell腳本程式都必須在開頭用 標識使用的shel ...
  • echo 顯示後面的內容,預設選項表示將後面的內容原模原樣的顯示出來,可以配合Shell的管道與重定向使用實現對寫文件操作 $echo "this is echo" echo_content.txt $echo [ e] [內容字元串] 將內容中的轉義字元按照其含義顯示,支持的轉義字元如下: \a ...
  • 在安裝完ContextCapture軟體之後,大家懷著迫不及待的心情雙擊了運行快捷鍵。但是很遺憾的是,會產生下麵的提示視窗: 也許大家並不在意,就覺得關掉這個視窗不就行了。然而,頭疼的問題來了。這個視窗關了之後,軟體反而也關閉了!!!! 好了,既然問題出現了,那麼就需要有解決的方法! ——————— ...
  • 如果你初次使用Ubuntu,打開軟體中心看到那少的可憐的軟體一定十分失望,難道大名鼎鼎的Linux就這麼幾款軟體可用?當然不是,軟體中心只是Ubuntu提供的一個軟體庫,浩如煙海的Linux軟體其實都存儲在各個鏡像站里,掌握軟體管理命令才能充分使用Linux的便利功能。 apt cache和apt ...
  • 本地服務管理器視窗快捷鍵: services.msc ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...