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

39
第第 第第 第第 第第 第第 第第 第第 13 第第第第第第 一: NFS 第第第 NFS 為 Network FileSystem 為為為 為為為為為為為為為為為為為為 為為為為為為為為為 ,、 為為為為為為為為為為 為為為 Unix Like 為為為為為為為為為為為為為為為為為 為為為為為 為 一! 為為Unix Like 為為為為為為 Unix Like 為為為為為為為為為為為 為為 NFS 為為 SAMBA 為為為為為為為為為為為為為

Upload: tiger

Post on 14-Jan-2016

123 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

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

第三 篇

區域網路內常見的伺服器架設

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

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

NFS 的由來與其功能

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

P.13-2請參閱書籍

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

P.13-2請參閱書籍

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

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

P.13-3請參閱書籍

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

什麼是 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

請參閱書籍

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

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

P.13-3請參閱書籍

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

如上圖所示,當用戶端有 NFS 檔案存取需求時,他會如何向伺服器端要求資料呢?

1. 用戶端會向伺服器端的 RPC (port 111) 發出 NFS 檔案存取功能的詢問要求;

2. 伺服器端找到對應的已註冊的 NFS daemon 埠口後,會回報給用戶端;

3. 用戶端瞭解正確的埠口後,就可以直接與 NFS daemon 來連線。P.13-4請參閱書籍

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

NFS 啟動的 RPC daemons rpc.nfsd

rpc.mountd

rpc.lockd ( 非必要 )

rpc.statd ( 非必要 )

P.13-4~5請參閱書籍

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

NFS 的檔案存取權限 不知道你有沒有想過這個問題,在圖 13.1-1 的環境下,假如我在 NFS client 1 上面以 dmtsai 這個使用者身份想要去存取 /home/data/sharefile/ 這個來自 NFS server 所提供的檔案系統時,請問 NFS server 所提供的檔案系統會讓我以什麼身份去存取?是 dmtsai 還是?

為什麼會這麼問呢?這是因為 NFS 本身的服務並沒有進行身份登入的識別,所以說,當你在用戶端以 dmtsai 的身份想要存取伺服器端的檔案系統時,伺服器端會以用戶端的使用者 UID 與 GID 等身份來嘗試讀取伺服器端的檔案系統。這時有個有趣的問題就產生啦!那就是如果用戶端與伺服器端的使用者身份並不一致怎麼辦?

P.13-5請參閱書籍

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

P.13-6請參閱書籍

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

NFS server/NFS client 剛好有相同的帳號與群組

則此時使用者可以直接以 dmtsai 的身份進行伺服器所提供的檔案系統之存取。

NFS server 的 501 這個 UID 帳號對應為 vbird

若 NFS 伺服器上的 /etc/passwd 裡面 UID 501 的使用者名稱為 vbird 時,則用戶端的 dmtsai 可以存取伺服器端的 vbird 這個使用者的檔案喔!只因為兩者具有相同的 UID 而已。這就造成很大的問題了!因為沒有人可以保證用戶端的 UID 所對應的帳號會與伺服器端相同,那伺服器所提供的資料不就可能會被錯誤的使用者亂改?

P.13-6請參閱書籍

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

NFS server 並沒有 501 這個 UID

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

P.13-6請參閱書籍

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

如果使用者身份是 root 時

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

P.13-6請參閱書籍

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

總之,用戶端使用者能做的事情是與 UID 及其 GID 有關的,那當用戶端與伺服器端的 UID 及帳號的對應不一致時,可能就會造成檔案系統使用上的困擾,這個就是 NFS 檔案系統在使用上面的一個很重要的地方!而在瞭解使用者帳號與 UID 及檔案系統的關係之後,要實際在用戶端以 NFS 取用伺服器端的檔案系統時,你還得需要具有:

NFS 伺服器有開放可寫入的權限 ( 與 /etc/exports 設定有關 ) ;

�實際的檔案權限具有可寫入 (w) 的權限。

P.13-7請參閱書籍

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

NFS Server 端的設定

所需要的軟體 RPC 主程式: rpcbind

NFS � 主程式: nfs-utils

P.13-7請參閱書籍

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

NFS 的軟體結構 � 主要設定檔: /etc/exports

NFS 檔案系統維護指令: /usr/sbin/exportfs

分享資源的登錄檔: /var/lib/nfs/*tab

用戶端查詢伺服器分享資源的指令: /usr/sbin/showmount

P.13-8請參閱書籍

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

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

P.13-9請參閱書籍

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

至於主機名稱的設定主要有幾個方式: 可以使用完整的 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請參閱書籍

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

至於權限方面 ( 就是小括號內的參數 ) 常見的參數則有:

P.13-10請參閱書籍

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

讓 root 保有 root 的權限 我想將 /tmp 分享出去給大家使用,由於這個目錄本來就是大家都可以讀寫的,因此想讓所有的人都可以存取。此外,我要讓 root 寫入的檔案還是具有 root 的權限,那如何設計設定檔? 答:

立刻實作

P.13-10請參閱書籍

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

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

立刻實作

P.13-11請參閱書籍

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

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

立刻實作

P.13-12請參閱書籍

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

啟動 NFS

P.13-14請參閱書籍

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

注意看到上面喔!總共產生了好多的 port 喔!真是可怕!不過主要的埠口是:

rpcbind 啟動的 port 在 111 ,同時啟動在 UDP 與 TCP ;

nfs � 本身的服務啟動在 port 2049 上頭! 其他 rpc.* 服務啟動的 port 則是隨機產生的,因此需向

port 111 註冊。

好了,那我怎麼知道每個 RPC 服務的註冊狀況?沒關係,你可以使用 rpcinfo 來觀察的。

P.13-15請參閱書籍

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

NFS 的連線觀察

P.13-16請參閱書籍

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

P.13-17請參閱書籍

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

NFS 的安全性 防火牆的設定問題與解決方案:

P.13-18請參閱書籍

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

P.13-19請參閱書籍

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

P.13-20請參閱書籍

NFS 用戶端的設定

手動掛載 NFS 伺服器分享的資源 你要如何掛載 NFS 伺服器所提供的檔案系統呢?基本上,可以這樣做:

1. 確認本地端已經啟動了 rpcbind 服務!

2.掃瞄 NFS 伺服器分享的目錄有哪些,並瞭解我們是否可以使用 (showmount) ;

3. 在本地端建立預計要掛載的掛載點目錄 (mkdir) ;

4. 利用 mount 將遠端主機直接掛載到相關目錄。

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

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

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

P.13-21請參閱書籍

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

P.13-21~22請參閱書籍

用戶端可處理的掛載參數與開機掛載

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

P.13-23請參閱書籍

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

通常如果你的 NFS 是用在高速運作的環境當中的話,那麼可以建議加上這些參數的說:

在鳥哥的實際案例中,某些大型的模式運算並不允許 soft 這個參數喔!舉例來說,鳥哥慣用的 CMAQ 空氣品質模式,這個模式的叢集架構分享檔案系統中,就不允許使用 soft 參數!這點需要特別留意喔!

P.13-23~24請參閱書籍

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

自動掛載 autofs 的使用 NFS 檔案系統與網路連線的困擾:

我們知道 NFS 伺服器與用戶端的連線或許不會永遠存在,而 RPC 這個服務又挺討厭的,如果掛載了 NFS 伺服器後,任何一方離線都可能造成另外一方老是在等待逾時~而且,掛載的 NFS 檔案系統可能又不是常常被使用,但若不掛載的話,有時候緊急要使用時又得通知系統管理員,這又很不方便 ... 啊!好討厭的感覺啊~@_@

所以,讓我們換個思考的角度來討論一下使用 NFS 的情境: 可不可以讓用戶端在有使用到 NFS 檔案系統的需求時才讓

系統自動掛載? 當 NFS 檔案系統使用完畢後,可不可以讓 NFS 自動卸載,

以避免可能的 RPC 錯誤? P.13-25

請參閱書籍

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

autofs 的設定概念: autofs 這個服務在用戶端電腦上面,會持續的偵測某個指定的目錄,並預先設定當使用到該目錄下的某個次目錄時,將會取得來自伺服器端的 NFS 檔案系統資源,並進行自動掛載的動作。 講這樣或許你有點模糊,讓我們拿底下這個圖示來看看:

P.13-26

舉例來說:『當我們在用戶端要使用 /home/nfsfile/public 的資料時,此時 autofs 才會去 192.168.100.254 伺服器上掛載 /home/public !』且『當隔了 5 分鐘沒有使用該目錄下的資料後,則用戶端系統將會主動的卸載 /home/nfsfile/public 』。

請參閱書籍

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

建立主設定檔 /etc/auto.master ,並指定偵測的特定目錄

建立資料對應檔內 (/etc/auto.nfs) 的掛載資訊與伺服器對應資源

P.13-26~27請參閱書籍

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

實際運作與觀察

P.13-27請參閱書籍

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

案例演練模擬的環境狀態中,伺服器端的想法如下: 1. 假設伺服器的 IP 為 192.168.100.254 這一部; 2. /tmp 分享為可讀寫,並且不限制使用者身份的方式,分享給所有

192.168.100.0/24 這個網域中的所有電腦; 3. /home/nfs 分享的屬性為唯讀,可提供除了網域內的工作站外,向

Internet 亦提供資料內容; 4. /home/upload 做 為 192.168.100.0/24 這 個 網 域 的 資 料 上 傳 目

錄 , 其 中 , 這 個 /home/upload 的使用者及所屬群組為 nfs-upload

這個名字,他的 UID 與 GID 均為 210 ; 5. /home/andy 這個目錄僅分享給 192.168.100.10 這部主機,以提供該

主機上面 andy 這個使用者來使用,也就是說, andy 在 192.168.100.10 及 192.168.100.254 均有帳號,且帳號均為 andy ,所以預計開放 /home/andy 給 andy 使用他的家目錄啦! P.13-28

請參閱書籍