1 / 39

檔案伺服器之一 : NFS 伺服器

13. 檔案伺服器之一 : NFS 伺服器. NFS 為 Network FileSystem 的簡稱,它的目的就是想讓不同的機器、不同的 作業系統 可以彼此分享個別的檔案啦!目前在 Unix Like 當中用來做為檔案伺服器 是相當 不錯的一個方案喔!基本上, Unix Like 主機連接到另一部 Unix Like 主機 來分享 彼此的檔案時,使用 NFS 要比 SAMBA 這個伺服器快速且方便的多了!. NFS 的由來與其 功能 什麼是 NFS (Network FileSystem )

tiger
Download Presentation

檔案伺服器之一 : NFS 伺服器

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 13 • 檔案伺服器之一:NFS伺服器 • NFS 為 Network FileSystem的簡稱,它的目的就是想讓不同的機器、不同的作業系統可以彼此分享個別的檔案啦!目前在 Unix Like 當中用來做為檔案伺服器是相當不錯的一個方案喔!基本上,Unix Like 主機連接到另一部 Unix Like 主機來分享彼此的檔案時,使用 NFS 要比 SAMBA 這個伺服器快速且方便的多了!

  2. NFS 的由來與其功能 • 什麼是 NFS (Network FileSystem) • NFS 就是 Network FileSystem的縮寫,最早之前是由 Sun 這家公司所發展出來的 (註 1)。 它最大的功能就是可以透過網路,讓不同的機器、不同的作業系統、可以彼此分享個別的檔案 (share files)。所以,你也可以簡單的將他看做是一個檔案伺服器 (file server) 呢!這個 NFS 伺服器可以讓你的 PC 來將網路遠端的 NFS 伺服器分享的目錄,掛載到本地端的機器當中,在本地端的機器看起來,那個遠端主機的目錄就好像是自己的一個磁碟分割槽一樣 (partition)!使用上面相當的便利! • P.13-2 請參閱書籍

  3. P.13-2 請參閱書籍

  4. 好的,既然 NFS 是透過網路來進行資料的傳輸,那麼經由第二章談到的 socket pair 的概念你會知道 NFS 應該會使用一些埠口吧?那麼 NFS 使用哪個埠口來進行傳輸呢?基本上 NFS 這個服務的埠口開在 2049 ,但是由於檔案系統非常複雜,因此 NFS 還有其他的程序去啟動額外的埠口,但這些額外的埠口啟動的號碼是?答案是....不知道!@_@!因為預設 NFS 用來傳輸的埠口是隨機選擇小於 1024 以下的埠口來使用的。咦!那用戶端怎麼知道你伺服器端使用那個埠口啊?此時就得要遠端程序呼叫 (Remote Procedure Call, RPC) 的協定來輔助啦!底下我們就來談談什麼是 RPC? • P.13-3 請參閱書籍

  5. 什麼是 RPC (Remote Procedure Call) • 因為 NFS 支援的功能相當的多,而不同的功能都會使用不同的程式來啟動,每啟動一個功能就會啟用一些埠口來傳輸資料,因此,NFS 的功能所對應的埠口才沒有固定住,而是隨機取用一些未被使用的小於 1024 的埠口來作為傳輸之用。但如此一來又造成用戶端想要連上伺服器時的困擾,因為用戶端得要知道伺服器端的相關埠口才能夠連線吧! • 此時我們就得需要遠端程序呼叫 (RPC) 的服務啦!RPC 最主要的功能就是在指定每個 NFS 功能所對應的 port number ,並且回報給用戶端,讓用戶端可以連結到正確的埠口上去。 那 RPC 又是如何知道每個 NFS 的埠口呢?這是因為當伺服器在啟動 NFS 時會隨機取用數個埠口,並主動的向 RPC 註冊,因此 RPC 可以知道每個埠口對應的 NFS 功能,然後 RPC 又是固定使用 port 111 來監聽用戶端的需求並回報用戶端正確的埠口,所以當然可以讓 NFS 的啟動更為輕鬆愉快了! • P.13-3 請參閱書籍

  6. 所以你要注意,要啟動 NFS 之前,RPC 就要先啟動了,否則 NFS 會無法向 RPC 註冊。 另外,RPC 若重新啟動時,原本註冊的資料會不見,因此 RPC 重新啟動後,它管理的所有服務都需要重新啟動來重新向 RPC 註冊。 • P.13-3 請參閱書籍

  7. 如上圖所示,當用戶端有 NFS 檔案存取需求時,他會如何向伺服器端要求資料呢? • 用戶端會向伺服器端的 RPC (port 111) 發出 NFS 檔案存取功能的詢問要求; • 伺服器端找到對應的已註冊的 NFS daemon 埠口後,會回報給用戶端; • 用戶端瞭解正確的埠口後,就可以直接與 NFS daemon 來連線。 • P.13-4 請參閱書籍

  8. NFS 啟動的 RPC daemons • rpc.nfsd • rpc.mountd • rpc.lockd (非必要) • rpc.statd (非必要) • P.13-4~5 請參閱書籍

  9. NFS 的檔案存取權限 • 不知道你有沒有想過這個問題,在圖 13.1-1 的環境下,假如我在 NFS client 1 上面以 dmtsai這個使用者身份想要去存取 /home/data/sharefile/ 這個來自 NFS server 所提供的檔案系統時,請問 NFS server 所提供的檔案系統會讓我以什麼身份去存取?是 dmtsai還是? • 為什麼會這麼問呢?這是因為 NFS 本身的服務並沒有進行身份登入的識別,所以說,當你在用戶端以 dmtsai的身份想要存取伺服器端的檔案系統時,伺服器端會以用戶端的使用者 UID 與 GID 等身份來嘗試讀取伺服器端的檔案系統。這時有個有趣的問題就產生啦!那就是如果用戶端與伺服器端的使用者身份並不一致怎麼辦? • P.13-5 請參閱書籍

  10. P.13-6 請參閱書籍

  11. NFS server/NFS client 剛好有相同的帳號與群組 則此時使用者可以直接以 dmtsai的身份進行伺服器所提供的檔案系統之存取。 • NFS server 的 501 這個 UID 帳號對應為 vbird 若 NFS 伺服器上的 /etc/passwd裡面 UID 501 的使用者名稱為 vbird時,則用戶端的 dmtsai可以存取伺服器端的 vbird這個使用者的檔案喔!只因為兩者具有相同的 UID 而已。這就造成很大的問題了!因為沒有人可以保證用戶端的 UID 所對應的帳號會與伺服器端相同,那伺服器所提供的資料不就可能會被錯誤的使用者亂改? • P.13-6 請參閱書籍

  12. NFS server 並沒有 501 這個 UID 另一個極端的情況是,在伺服器端並沒有 501 這個 UID 的存在,則此時 dmtsai的身份在該目錄下會被壓縮成匿名者,一般 NFS 的匿名者會以 UID 為 65534 為其使用者,早期的 Linux distributions 這個 65534 的帳號名稱通常是 nobody,我們的 CentOS則取名為 nfsnobody。但有時也會有特殊的情況,例如在伺服器端分享 /tmp的情況下,dmtsain的身份還是會保持 501 但建立的各項資料在伺服器端來看,就會屬於無擁有者的資料。 • P.13-6 請參閱書籍

  13. 如果使用者身份是 root 時 有個比較特殊的使用者,那就是每個 Linux 主機都有的 UID 為 0 的 root 。 想一想,如果用戶端可以用 root 的身份去存取伺服器端的檔案系統時,那伺服器端的資料哪有什麼保護性?所以在預設的情況下,root 的身份會被主動的壓縮成為匿名者。 • P.13-6 請參閱書籍

  14. 總之,用戶端使用者能做的事情是與 UID 及其 GID 有關的,那當用戶端與伺服器端的 UID 及帳號的對應不一致時,可能就會造成檔案系統使用上的困擾,這個就是 NFS 檔案系統在使用上面的一個很重要的地方!而在瞭解使用者帳號與 UID 及檔案系統的關係之後,要實際在用戶端以 NFS 取用伺服器端的檔案系統時,你還得需要具有: • NFS 伺服器有開放可寫入的權限 (與 /etc/exports 設定有關); • „實際的檔案權限具有可寫入 (w) 的權限。 • P.13-7 請參閱書籍

  15. NFS Server 端的設定 • 所需要的軟體 • RPC 主程式:rpcbind • „NFS 主程式:nfs-utils • P.13-7 請參閱書籍

  16. NFS 的軟體結構 • „主要設定檔:/etc/exports • NFS 檔案系統維護指令:/usr/sbin/exportfs • 分享資源的登錄檔:/var/lib/nfs/*tab • 用戶端查詢伺服器分享資源的指令:/usr/sbin/showmount • P.13-8 請參閱書籍

  17. /etc/exports 設定檔的語法與參數 • 至於 NFS 伺服器的架設實在很簡單,你只要編輯好主要設定檔 /etc/exports 之後,先啟動 rpcbind (若已經啟動了,就不要重新啟動),然後再啟動 nfs,你的 NFS 就成功了! • P.13-9 請參閱書籍

  18. 至於主機名稱的設定主要有幾個方式: • 可以使用完整的 IP 或者是網域,例如 192.168.100.10 或 192.168.100.0/24 ,或 192.168.100.0/255.255.255.0 都可以接受! • „也可以使用主機名稱,但這個主機名稱必須要在 /etc/hosts 內,或可使用 DNS 找到該名稱才行啊!反正重點是可找到 IP 就是了。如果是主機名稱的話,那麼他可以支援萬用字元,例如 * 或 ? 均可接受。 • P.13-9 請參閱書籍

  19. 至於權限方面 (就是小括號內的參數) 常見的參數則有: • P.13-10 請參閱書籍

  20. 立刻實作 • P.13-10 • 讓 root 保有 root 的權限 • 我想將 /tmp分享出去給大家使用,由於這個目錄本來就是大家都可以讀寫的,因此想讓所有的人都可以存取。此外,我要讓 root 寫入的檔案還是具有 root 的權限,那如何設計設定檔? • 答: 請參閱書籍

  21. 立刻實作 • P.13-11 • 同一目錄針對不同範圍開放不同權限 • 我要將一個公共的目錄 /home/public 公開出去,但是只有限定我的區域網路 192.168.100.0/24 這個網域且加入 vbirdgroup (第一章的例題建立的群組) 的用戶才能夠讀寫,其他來源則只能讀取。 • 答: 請參閱書籍

  22. 立刻實作 • P.13-12 • 開放匿名登入的情況 • 我要讓 *.centos.vbird網域的主機,登入我的 NFS 主機時,可以存取 /home/linux,但是他們存資料的時候,我希望他們的 UID 與 GID 都變成 45 這個身份的使用者,假設我 NFS 伺服器上的 UID 45 與 GID 45 的用戶/群組名稱為 nfsanon。 • 答: 請參閱書籍

  23. 啟動 NFS • P.13-14 請參閱書籍

  24. 注意看到上面喔!總共產生了好多的 port 喔!真是可怕!不過主要的埠口是: • rpcbind啟動的 port 在 111 ,同時啟動在 UDP 與 TCP; • „nfs本身的服務啟動在 port 2049 上頭! • 其他 rpc.* 服務啟動的 port 則是隨機產生的,因此需向 port 111 註冊。 • 好了,那我怎麼知道每個 RPC 服務的註冊狀況?沒關係,你可以使用 rpcinfo來觀察的。 • P.13-15 請參閱書籍

  25. NFS 的連線觀察 • P.13-16 請參閱書籍

  26. P.13-17 請參閱書籍

  27. NFS 的安全性 • 防火牆的設定問題與解決方案: • P.13-18 請參閱書籍

  28. P.13-19 請參閱書籍

  29. NFS 用戶端的設定 • 手動掛載 NFS 伺服器分享的資源 • 你要如何掛載 NFS 伺服器所提供的檔案系統呢?基本上,可以這樣做: • 確認本地端已經啟動了 rpcbind服務! • 掃瞄 NFS 伺服器分享的目錄有哪些,並瞭解我們是否可以使用 (showmount); • 在本地端建立預計要掛載的掛載點目錄 (mkdir); • 利用 mount 將遠端主機直接掛載到相關目錄。 • P.13-20 請參閱書籍

  30. P.13-20~21 請參閱書籍

  31. P.13-21 請參閱書籍

  32. 用戶端可處理的掛載參數與開機掛載 • P.13-21~22 請參閱書籍

  33. P.13-23 請參閱書籍

  34. 通常如果你的 NFS 是用在高速運作的環境當中的話,那麼可以建議加上這些參數的說: • 在鳥哥的實際案例中,某些大型的模式運算並不允許 soft 這個參數喔!舉例來說,鳥哥慣用的 CMAQ 空氣品質模式,這個模式的叢集架構分享檔案系統中,就不允許使用 soft 參數!這點需要特別留意喔! • P.13-23~24 請參閱書籍

  35. 自動掛載 autofs的使用 • NFS 檔案系統與網路連線的困擾: • 我們知道 NFS 伺服器與用戶端的連線或許不會永遠存在,而 RPC 這個服務又挺討厭的,如果掛載了 NFS 伺服器後,任何一方離線都可能造成另外一方老是在等待逾時~而且,掛載的 NFS 檔案系統可能又不是常常被使用,但若不掛載的話,有時候緊急要使用時又得通知系統管理員,這又很不方便...啊!好討厭的感覺啊~@_@ • 所以,讓我們換個思考的角度來討論一下使用 NFS 的情境: • 可不可以讓用戶端在有使用到 NFS 檔案系統的需求時才讓系統自動掛載? • 當 NFS 檔案系統使用完畢後,可不可以讓 NFS 自動卸載,以避免可能的 RPC 錯誤? • P.13-25 請參閱書籍

  36. autofs的設定概念: • autofs這個服務在用戶端電腦上面,會持續的偵測某個指定的目錄,並預先設定當使用到該目錄下的某個次目錄時,將會取得來自伺服器端的 NFS 檔案系統資源,並進行自動掛載的動作。 講這樣或許你有點模糊,讓我們拿底下這個圖示來看看: • 舉例來說:『當我們在用戶端要使用 /home/nfsfile/public 的資料時,此時 autofs才會去 192.168.100.254 伺服器上掛載 /home/public !』且『當隔了 5 分鐘沒有使用該目錄下的資料後,則用戶端系統將會主動的卸載 /home/nfsfile/public 』。 • P.13-26 請參閱書籍

  37. 建立主設定檔 /etc/auto.master,並指定偵測的特定目錄 • 建立資料對應檔內 (/etc/auto.nfs) 的掛載資訊與伺服器對應資源 • P.13-26~27 請參閱書籍

  38. 實際運作與觀察 • P.13-27 請參閱書籍

  39. 案例演練 • 模擬的環境狀態中,伺服器端的想法如下: • 假設伺服器的 IP 為 192.168.100.254 這一部; • /tmp分享為可讀寫,並且不限制使用者身份的方式,分享給所有 192.168.100.0/24 這個網域中的所有電腦; • /home/nfs分享的屬性為唯讀,可提供除了網域內的工作站外,向 Internet 亦提供資料內容; • /home/upload 做 為 192.168.100.0/24 這 個 網 域 的 資 料 上 傳 目 錄 , 其 中 , 這 個 /home/upload 的使用者及所屬群組為 nfs-upload 這個名字,他的 UID 與 GID 均為 210; • /home/andy這個目錄僅分享給 192.168.100.10 這部主機,以提供該主機上面 andy這個使用者來使用,也就是說,andy在 192.168.100.10 及 192.168.100.254 均有帳號,且帳號均為 andy,所以預計開放 /home/andy給 andy使用他的家目錄啦! • P.13-28 請參閱書籍

More Related