天天看點

ubuntu server 10.4下NFS服務的配置前言:執行個體應用 :

1,NFS與samba有什麼差別?

(1)NFS基于RPC協定,samba應用SMB協定。

(2)NFS(Network File System)主要用在UNIX/LINUX作業系統之間共享檔案,Samba即可以用在unix/linux作業系統之間,也可以用在unix/linux與微軟的作業系統(windows)之間。經過google看到現在windows 7支援NFS了,但是中文會亂碼,不支援UTF-8。

我知道的就這麼多。

2,為什麼NFS需要使用RPC協定?

因為 NFS 用來傳輸的 端口 是随機選擇小于 1024 以下的端口來使用的,這樣就使的用戶端不知道服務端使用哪個端口,是以此時就得要遠端過程調用 (Remote Procedure Call, RPC) 的協定來輔助。

3,RPC協定的功能及如何工作?

RPC 最主要的功能就是在指定每個 NFS 功能所對應的 port number ,并且回報給用戶端,讓用戶端可以連結到正确的端口上去。 那 RPC 又是如何知道每個 NFS 的端口呢?這是因為當伺服器在啟動 NFS 時會随機取用數個端口,并主動的向 RPC 注冊,是以 RPC 可以知道每個端口對應的 NFS 功能,然後 RPC 又是固定使用 port 111 來監聽用戶端的需求并回報用戶端正确的端口, 是以當然可以讓 NFS 的啟動更為輕松愉快了

4,為什麼先啟動RPC,後啟動NFS?

因為啟動NFS時,就要向RPC進行注冊,如果RPC沒有先啟動,NFS當然就注冊不成功,用戶端無法擷取服務端的端口号,NFS就無法正常工作。是以,RPC先于NFS啟動。另外,RPC 若重新啟動時,原本注冊的資料會不見,是以 RPC 重新啟動後,他管理的所有程式都需要重新啟動以重新向 RPC 注冊。

5,NFS對檔案權限的控制是如何進行的?會發生哪些問題,這些問題會産生什麼結果?如何解決這些問題?

NFS伺服器是以使用者在用戶端機器中的UID,與以自己的 /etc/passwd, /etc/group 來查詢對應的UID進行比對,進行檔案權限的控制;這樣一來,就會發生以下問題:

(1)使用者A的UID在NFS伺服器的/etc/passwd, /etc/group 中剛好存在。

那A就能通路具有相應權限的檔案

(2)使用者A的UID在NFS伺服器的/etc/passwd, /etc/group 中不存在。

那A就變成匿名使用者

(3)使用者A的UID是NFS伺服器上B的UID

那A就能通路B所具有權限的檔案。

(4)特殊使用者root如何處理

在預設的情況下,變成匿名使用者。關于root ,在/etc/exports中有兩個相關的設定

no_root_squash:

登入 NFS 主機使用分享目錄的使用者,如果是 root 的話,那麼對于這個分享的目錄來說,他就具有 root 的權限! 這個項目『極不安全』,不建議使用!

root_squash: 

在登入 NFS 主機使用分享之目錄的使用者如果是 root 時,那麼這個使用者的權限将被壓縮成為匿名使用者

解決以上使用者賬号不同步的問題,有以下三種方法:

(1)手工同步/etc/passwd檔案

(2)使用LDAP服務

(3)使用NIS服務

6,在NFS服務端,用戶端都需要安裝哪些軟體包?

在ubuntu 作業系統下,NFS服務端需要nfs-kernel-server,nfs-common,portmap;用戶端需要nfs-common,portmap。

配置一台NFS伺服器(IP位址為192.168.2.87),共享一個目錄nfstest,從用戶端通路的使用者都被映射成NFS伺服器中UID=1000的使用者admin01,可以讀寫檔案。

(1)安裝NFS

#sudo apt-get install nfs-kernel-server

<a href="http://xuchengji.blog.51cto.com/attachment/201009/26/160472_1285489187ulkv.png"></a>

可以看出,同時也會安裝相關的nfs-common,portmap軟體包。

(2)配置 /etc/exports檔案

#mkdir nfstest

#sudo vim /etc/exports

#sudo /etc/init.d/nfs-kernel-server restart

注釋:

/home/admin01/nfstest 就是要共享出來的目錄或檔案

* 代表所有的主機,這裡可以是一個IP(192.168.2.32)或是主機名或是域名*.labtest.com,也可以是一個範圍(192.168.2.0/24)

rw:read-write,可擦寫的權限;

ro:read-only,隻讀的權限;

sync:資料同步寫入到記憶體與硬碟當中;

async:資料會先暫存于記憶體當中,而非直接寫入硬碟!

no_root_squash: 

在登入 NFS 主機使用分享之目錄的使用者如果是 root 時,那麼這個使用者的權限将被壓縮成為匿名使用者,通常他的 UID 與 GID 都會變成 nobody(nfsnobody) 那個系統賬号的身份;

all_squash: 

不論登入 NFS 的使用者身份為何, 他的身份都會被壓縮成為匿名使用者,通常也就是 nobody(nfsnobody) 啦!

anonuid: 

anon 意指 anonymous (匿名者) 前面關于 *_squash 提到的匿名使用者的 UID 設定值,通常為 nobody(nfsnobody),但是您可以自行設定這個 UID 的值!當然,這個 UID 必需要存在于您的 /etc/passwd 當中!

anongid:同 anonuid ,但是變成 group ID 就是了!

這是幾個比較常見的權限參數,如果你有興趣玩其他的參數時,請自行 man exports 可以發現很多有趣的資料

#sudo apt-get install nfs-common

<a href="http://xuchengji.blog.51cto.com/attachment/201009/26/160472_12854891892Hqw.png"></a>

會安裝相應的軟體包portmap

檢視NFS伺服器上共享出來的檔案

#sudo showmount –e 192.168.2.87

挂載到本地的nfs目錄上

#sudo mount 192.168.2.87:/home/admin01/nfstest nfs

<a href="http://xuchengji.blog.51cto.com/attachment/201009/26/160472_1285489189oJeu.png"></a>

一個簡單的NFS應用就完成了。

在用戶端是以xcj使用者通路,但在NFS伺服器端test的擁有者及組都是UID=1000,GID=1000的admin01

使用autofs要達到目的是:

(1)讓用戶端在有使用到 NFS 檔案系統的需求時才挂載

(2)并且不需要事先建立挂載點

(3)另外,當 NFS 檔案系統使用完畢後,讓 NFS 自動卸除,以避免可能的 RPC 錯誤

安裝autofs

#sudo apt-get install autofs

配置auto.master

#sudo vim /etc/auto.master

<a href="http://xuchengji.blog.51cto.com/attachment/201009/26/160472_1285489190R4Xi.png"></a>

auto.nfstest這個檔案名可以自定

建立/etc/auto.nfstest檔案

#sudo vim /etc/auto.nfstest

<a href="http://xuchengji.blog.51cto.com/attachment/201009/26/160472_1285489190UFU3.png"></a>

這時隻要通路tempnfs,就會自動挂載上NFS伺服器的上nfstest

#sudo /etc/init.d/autofs restart

#cd tempnfs

結束語:

NFS服務配置起來還是比較簡單的,使用也很友善,但是用戶端與服務端的賬号同步的問題較難處理,能把LDAP或NIS結合進來是個不錯的選擇。autofs使用起來,真的是不錯。

本文的相關理論主要來源于《鳥哥的linux私房菜》的NFS

本文轉自xcjgutong 51CTO部落格,原文連結:http://blog.51cto.com/xuchengji/397588

繼續閱讀