天天看點

Linux下NFS的配置與注意的問題

1.什麼是NFS(Network FileSystem)

 NFS 就是 Network FileSystem 的縮寫,最早之前是由 Sun 所發展出來的。他最大的功能就是可以透過網絡,讓不同的機器、不同的作業系統、可以彼此分享個别的檔案 ( share file ),是以,也可以簡單的将他看做是一個 file server 呢!這個 NFS Server 可以讓你的 PC 來将網絡遠端的 NFS 主機分享的目錄,挂載到本地端的機器當中,是以,在本地端的機器看起來,那個遠端主機的目錄就好象是自己的 partition 一般!

 雖然 NFS 有屬于自己的協定與使用的 port number ,但是在資料傳送或者其它相關訊息傳遞的時候, NFS 使用的則是一個稱為遠端過程調用( Remote Procedure Call, RPC )的協定來協助 NFS 本身的運作!

2.RPC

 當我們在使用某些服務來進行遠端聯機的時候,有些資訊,例如主機的IP、服務的 port number、與對應到的服務之 PID 等等,都需要管理與對應!這些管理 port 的對應與服務相關性的工作,就是這個 Remote Procedure Call, RPC 的任務了

 NFS 本身的服務并沒有提供資料傳遞的協定,但是 NFS 卻能讓我們進行檔案的分享,這其中的原因,就是 NFS 使用到一些其它相關的傳輸協定!而這些傳輸的協定,就是使用到這個所謂的 RPC 的功能啰!這也就是說, NFS 本身就是使用 RPC 的一個 program 就是了!說的更白話一點, NFS 也可以視作是一個 RPC server 啦!同時要注意到的是,在某些狀況中,不但跑 NFS 的 Server 需要激活 RPC 的服務,連帶的,要挂載 NFS partition 的 Client 機器,也需要同步激活 RPC 才行!這樣 Server 端與 Client 端才能藉由 RPC 的協定來進行 program port 的對應喔!NFS 主要在管理分享出來的目錄,而至于資料的傳遞,就直接将他丢給 RPC 的協定來運作就是了!

3.NFS 激活的 RPC daemons

 o rpc.nfsd:這個 daemon 主要的功能就是在管理 Client 是否能夠登入主機的權限啦,其中還包含這個登入者的 ID 的判别

 o rpc.mountd:這個 daemon 主要的功能,則是在管理 NFS 的檔案系統!當 Client 端順利的通過 rpc.nfsd 而登入主機之後,在他可以使用 NFS server 提供的檔案之前,還會經過檔案使用權限 ( 就是那個 -rwxrwxrwx 與 owner, group 那幾個權限啦 ) 的認證程式!他會去讀 NFS 的設定檔 /etc/exports 來比對 Client 的權限,當通過這一關之後, Client 就可以取得使用 NFS 檔案的權限啦!(注:這個也是我們用來管理 NFS 分享之目錄的使用權限與安全設定的地方哩)

4.NFS需要有兩個套件才行,分别是:

 nfs-utils

 就是提供 rpc.nfsd 及 rpc.mountd 這兩個 NFS daemons 與其它相關 documents 與說明檔案、執行檔等的套件!這個就是 NFS 的主要套件

 portmap

 就如同剛剛提的到,我們的 NFS 其實可以被視為一個 RPC server program,而要激活任何一個 RPC server program 之前,我們都需要做好 port 的對應 ( mapping ) 的工作才行,這個工作其實就是『 portmap 』這個服務所負責的!也就是說,在激活任何一個 RPC server 之前,我們都需要激活 portmap 才行呢!那麼這個 portmap 到底在幹嘛呢?就如同這個服務的名稱,哈哈!就是作 port 的 mapping 啊!舉個例子來說:當 Client 端嘗試來使用 RPC server 所提供的服務時,由于 Client 需要取得一個可以連接配接的 port 才能夠使用 RPC server 所提供的服務,是以, Client 首先就會去跟 portmap 講『喂!可不可以通知一下,給我個 port number ,好讓我可以跟 RPC 聯絡吧!』這個時候 portmap 就自動的将自己管理的 port mapping 告知 Client ,好讓他可以連接配接上來 server 呢!是以啰:『激活 NFS 之前,請先激活 portmap !』

5.NFS server端的設定:

 a)./etc/exports

 分享的目錄 主機名稱1或IP1(參數1,參數2) 主機名稱2或IP2(參數3,參數4)

 b).參數

 rw: 可擦寫的權限

 ro: 隻讀的權限

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

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

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

 anonuid: 前面關于 *_squash 提到的匿名使用者的 UID 設定值,通常為 nobody,但是你可以自行設定這個 UID 的值!當然,這個 UID 必需要存在于你的 /etc/passwd 當中!

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

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

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

6.設定的執行個體:

 a). /tmp *(rw,no_root_squash)  //*号表示所有的IP都可以通路

 b). /tmp *(rw)

  /home/public 192.168.0.*(rw) *(ro)  //下面兩行作用一樣

  /home/public 192.168.0.0/24(rw) *(ro)

 c). /home/test 192.168.0.100(rw) //隻對某部機器設定權限

 d). /home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40) //當*.linux.org登陸此NFS主機,并且在/home/linux下面寫入檔案時,該檔案的所有人與所有組,就會變成/etc/passwd裡面對應的UID為40的那個身份的使用者了.

7.權限問題

假設/etc/exports裡面的内容為

 #vi /etc/exports

 /tmp *(rw,no_root_squash)

 /home/public 192.168.0.*(rw) *(ro)

 /home/test 192.168.0.100(rw)

 /home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40)

 假設我們在192.168.0.100這個client端登陸此NFS主機(192.168.0.2),那麼

 情況一:在192.168.0.100的帳号為test這個身份,同時,NFS主機上也有test這個帳号

  a).由于NFS主機的/tmp權限為-rwxrwxrwt,是以我(test在192.168.0.100上)在/tmp下面具有存取的權限,并且寫入檔案的所有人為test.

  b).在/home/public中,由于我有讀寫的權限,如果NFS主機在/home/public這個目錄的權限對于test開放寫入的話,那麼就可以讀寫,并且寫入檔案的所有人是test。如果NFS主機的/home/public對于test這個使用者并沒有開放寫入權限時,那就無法寫入,雖然/etc/exports裡面是rw,也不起作用.

  c).在/home/test中,權限與/home/public有相同的狀态,需要NFS主機的/home/test對于test有開放的權限.

  d).在/home/linux當中,不論是何種的user,身份都會被變成UID=40的這個帳号

 情況二:如果我們在192.168.0.100的身份為test2,但是NFS主機卻沒有test2這個帳号時

  a).在/tmp下還是可以寫入,但是寫入的檔案所有人變成nobody.

  b).在/home/public與/home/test裡面是否可以寫入,還需要看/home/public的權限而定,不過身份就被變成nobody了

  c)/home/linux下的身份還是變成UID=40的帳号.

 情況三:在192.168.0.100的身份為root

  a).在/tmp裡面可以寫入,但是由于no_root_squash的參數,改變了預設的root_squash的設定值,是以在/tmp寫入檔案的所有人為root了.

  b).在/home/public底下的身份被壓縮成了nobody,因為預設的屬性都具有root_squash,是以檔案所有人就變成了nobody.

  c)./home/test情況與/home/public相同.

  d)./home/linux中,root的身份也被壓縮成UID=40的那個使用者了.

繼續閱讀