簡易 NFS 服務器機設定


1. 學習本章的必備技巧

2. NFS 的由來與其功能

  什麼是 NFS ( Network FileSystem )

  什麼是 RPC ( Remote Procedure Call )

  NFS 激活的 RPC daemons

3. 需要的套件

4. Server 端的設定

5. Client 端的設定

6. RPC server 的相關指令

7. 關機或結束時的注意事項

8. 安全設定(被防火牆擋掉了)

9. 實際演練

------------------------------------------------------------------------------------------------


學習本章的必備技巧:


  歡迎再次來到鳥哥的『碎碎念時間』!在這個章節中,我們需要使用 vi 來修改設定檔,並且使用激活的 scripts 來激活我們的服務,除此之外,亦使用簡單的 rpm 指令來安裝數據。所以,要了解這個章節,你最起碼需要知道底下這些知識:

· 認識 vi

· 認識 BASH Shell

· 認識服務

· 常用的網絡指令

· 認識網絡安全

· 簡易防火牆架設

  無論如何,將前面關於 Linux 基礎網絡基礎 的內容看完,會是很好的一件事情!


------------------------------------------------------------------------------------------------

NFS 的由來與其功能

· 什麼是 NFS ( Network FileSystem )


  我們要先來了解一下,什麼是 NFS 呢?不然講了一堆也沒有用,對吧! ^_^!所謂的 NFS 就是 Network FileSystem 的縮寫,最早之前是由 Sun 這家公司所發展出來的。他最大的功能就是可以透過網絡,讓不同的機器、不同的操作系統、可以彼此分享個別的檔案 ( share file ),所以,你也可以簡單的將他看做是一個 file server 呢!這個 NFS Server 可以讓你的 PC 來將網絡遠程的 NFS 主機分享的目錄,掛載到本地端的機器當中,所以,在本地端的機器看起來,那個遠程主機的目錄就好象是自己的 partition 一般!使用上面相當的便利!

1.gif

  就如同上面的圖標一般,當我們的 NFS Server 設定好了之後,其它的 Client 端就可以直接在 Server 上面存取資料了!也就是說,其它的 Personal Computer 可以『掛載 NFS server 所提供的檔案或目錄』,而且掛載之後,這個目錄看起來就像你的本地端的磁盤區塊一般,只要權限對了,那麼你可以使用 cp, cd, mv, rm... 等等磁盤或檔案相關的指令!真是他X的方便吶!

  那麼您或許會問啦:『咦!那麼這個 NFS 是藉由什麼樣的協議來進行傳輸的呢?』雖然 NFS 有屬於自己的協議與使用的 port number ,但是在資料傳送或者其它相關訊息傳遞的時候, NFS 使用的則是一個稱爲遠程過程調用( Remote Procedure Call, RPC )的協議來協助 NFS 本身的運作!

· 什麼是 RPC ( Remote Procedure Call )

  那麼什麼是 RPC 呢?由字面上的意思來看『遠程過程調用』不就是一些程序( Program )在執行遠程聯機時,需要用到的程序嗎?呵呵!是這樣沒錯啦!簡單的來說,當我們在使用某些服務來進行遠程聯機的時候,有些信息,例如主機的 IP、服務的 port number、與對應到的服務之 PID 等等,都需要管理與對應!這些管理 port 的對應與服務相關性的工作,就是這個 Remote Procedure Call, RPC 的任務了!

  好了,如果我們將 NFS 與 RPC 兩者的相關性連接起來的話,那麼你應該就可以知道: NFS 本身的服務並沒有提供資料傳遞的協議,但是 NFS 卻能讓我們進行檔案的分享,這其中的原因,就是 NFS 使用到一些其它相關的傳輸協議!而這些傳輸的協議,就是使用到這個所謂的 RPC 的功能囉!這也就是說, NFS 本身就是使用 RPC 的一個 program 就是了!說的更白話一點, NFS 也可以視作是一個 RPC server 啦!同時要注意到的是,在某些狀況中,不但跑 NFS 的 Server 需要激活 RPC 的服務,連帶的,要掛載 NFS partition 的 Client 機器,也需要同步激活 RPC 纔行!這樣 Server 端與 Client 端才能藉由 RPC 的協議來進行 program port 的對應喔!

  OK!簡單的說, NFS 也可以看做是 RPC server 的一種,因爲他是使用這種協議的 program 呀! ^_^ !那麼爲什麼 NFS 要使用 RPC 執行呢?這是因爲 NFS 本身可以被看做是一個檔案系統,那麼一來的話,你的使用者聯機常常變化,而且你的檔案內容啦、分享的目錄啦,還有其它檔案相關的信息等等,也都會常常在變化,這個時候,使用類似這種可以對應 program number 與 port number 的 RPC 就相當的方便了!也就是說,NFS 主要在管理分享出來的目錄,而至於資料的傳遞,就直接將他丟給 RPC 的協議來運作就是了!
更多關於 NFS 協議的信息您可以參考底下的網頁:

o http://www.faqs.org/rfcs/rfc1094.html

o http://www.tldp.org/HOWTO/NFS-HOWTO/index.html

· NFS 激活的 RPC daemons

  NFS server 總共需要啓用到至少兩個 daemons ,一個管理 Client 是否可以登入的問題,另一個管理登入主機後的 Client 能夠使用的檔案權限!說明如下:

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 分享之目錄的使用權限與安全設定的地方哩!)


-----------------------------------------------------------------------------------------------

需要的套件

  要激活 NFS 我們必須要有兩個套件纔行,分別是:

o nfs-utils

o portmap

· 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 !』

· nfs-utils:

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

  好了,知道我們需要這兩個套件之後,現在幹嘛?!趕快去你的系統先用 RPM 看一下有沒有這兩個套件啦!沒有的話趕快用 RPM 去安裝喔!不然就完不下去了!


-----------------------------------------------------------------------------------------------

Server 端的設定:

  前面對於 NFS 稍微解釋了一下,哇!怎麼看起來好象粉難喔!其實一點也不!爲什麼呢?因爲 portmap 只要一支 scripts 就可以激活, NFS 只要設定一個檔案就可以順利運作!那麼怎麼能說不簡單呢!呵呵!這個 NFS 真是他 X 的太太太.....簡單了~在開始 NFS 之前,讓我們先以 Windows 的系統當中的『資源共享』來說明一下整個流程吧:

1. 在 Windows Server 上面,開啓檔案總管,在某個目錄上面按右鍵選擇激活資源共享;

2. 在資源共享的內容當中,需要設定『使用者權限』( 以 Windows 2000 爲例 );

3. 在 Client 端需要登入 Windows server 時,需要激活『網絡上的芳鄰』來尋找可用的網絡上面分享的目錄,然後點選該目錄,若可以登入該 Windows server 時,則可以依據步驟一的權限使用該目錄下的檔案!
呵呵!沒錯! NFS 的整個流程也差不多是這樣:

· 首先,需要確認一下你的 Linux 主機是否可以支持 NFS 這項服務,然後再設定一下使用者的來源IP或主機名稱以及分享出去的目錄的權限,之後呢,激活 NFS 即可將剛剛設定的目錄給他分享出去了!

· 那麼在 Client 端怎麼使用這個分享出來的目錄?就是先以 showmount 檢查 Linux Server 是否有可以使用的 NFS 目錄,如果有的話,就將他 mount 在本機上面,如果可以 mount ,那麼就可以使用 NFS 主機提供的資源了!

  哈哈!果然很簡單吧!所以底下我們就來一個一個步驟的說明一下 NFS 怎麼設定囉:

1. 系統需求

2. /etc/exports

3. 關於權限問題

4. 激活服務 portmap, nfsd

5. exportfs

6. 檢驗目錄 /var/lib/nfs/xtab

7. showmount

8. 觀察激活的 port number

  OK!每個咚咚的細部項目就來談一談吧:

o 系統需求:

  嗄!NFS 有最低硬件需求嗎?呵呵!您誤會了!這裏的需求其實指的是『軟件需求』啦!需要的是:

1. 除了剛剛我們已經提到的兩個套件『 portmap 與 nfs-utils 』必需要存在之外;

2. 您的核心版本最好能夠高於 2.2.xx 以後比較好!

3. 此外,如果重新編譯過核心,你必需『一定要選擇』NFS 支持纔行!

  目前,如果你使用的是安裝時候的 Linux distribution 預設核心時,那麼你都不用太擔心,因爲系統已經預設有支持囉!所以底下的咚咚妳都可以玩!但是,如果你已經重新編譯過核心,並且不知道你是怎麼編譯的 ( 例如道聽途說啦、試試看新鮮玩意啦等等的來編譯你的核心時,所以沒有注意到這個項目的選擇 ) ,這個時候請到底下的網頁再看一看你的核心資料吧:『核心編譯』!

o /etc/exports:


  好了,已經確認『一切OK』之後,我們就真的要來玩弄 NFS 啦!這個東西真的很簡單的啦,只要一個檔案就可以搞定了!那就是編輯 /etc/exports 這個檔案,請注意,這個檔案如果不存在,請自行建立!並且,檔名不要寫錯了喔!這個檔案的內容很簡單啦,我們列出他的規則:

2.gif

  上面的規則是這樣的:欲分享的目錄主要是要分享給主機名稱1及主機名稱2,但是提供給這兩者的權限並不一樣,其中,給主機名稱1的權限是參數1與參數2,至於給主機名稱2的 Client 權限則是參數3與參數4。好了,那麼那個『權限』也就是『參數』主要有哪些呢?

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:資料會先暫存於內存當中,而非直接寫入硬盤!

  大致的參數就是這幾樣囉!那麼我們來假設幾個例子好了:

  思考一:我要將 /tmp 分享出去給大家使用,由於這個目錄本來就是大家都可以讀寫的,因此我要讓所有的人都可以存取。此外,我要讓 root 寫入的檔案還是具有 root 的權限!那麼你可以這麼寫喔!

3.gif

  樣一來,無論來自哪裏(*萬用字符!表示萬事OK!)都可以使用我的 /tmp 這個目錄。請注意,那個 *(rw,no_root_squash) 中間沒有空格符喔!而 /tmp 與 *(rw,no_root_squash) 則是有空格符來隔開的!特別注意到那個 no_root_squash 的功能!
 
  思考二:我要將一個公共的目錄 /home/public 公開出去,但是隻有限定我的局域網絡內 192.168.0.0/24 這個網域可以讀寫,其它人則只能讀取:這

4.gif

  請注意,在上面的例子中,倒數兩行的格式都可以適用!所以只要寫一行即可!上面的例子說的是,當我的 IP 是在 192.168.0.0/24 這個網段的時候,那麼 /home/public 我就可以讀寫~至於如果我不是在這個網段之內,那麼這個目錄的資料我就僅能讀取而已,亦即爲只讀的屬性啦!
 
  思考三:我要將一個私人的目錄 /home/test 開放給 192.168.0.100 這個 Client 端的機器來使用,那麼我就必需這麼寫:

5.gif

  這樣就設定完成了!而且,只有 192.168.0.100 這部機器才能對 /home/test 這個目錄進行存取喔!
 
  思考四:我要讓 *.linux.org 網域的主機,登入我的 NFS 主機時,可以存取 /home/linux ,但是他們存資料的時候,我希望他們的 UID 與 GID 都變成 40 這個身份的使用者:

6.gif

  特別注意到那個 all_squash 與 anonuid, anongid 的功能!如此一來,當 test.linux.org 登入這部 NFS 主機,並且在 /home/linux 寫入檔案時,該檔案的所有人與所有羣組,就會變成 /etc/passwd 裏面對應的 UID 爲 40 的那個身份的使用者了!

o 關於權限問題:


  無論任何時候,權限的問題都是需要考慮到的!讓我們來看看剛剛建立的 /etc/exports 檔案的內容:

7.gif

  假設我在 192.168.0.100 登入這部 NFS ( IP 假設爲 192.168.0.2 ) 主機,並且我在 192.168.0.100 的帳號爲 test 這個身份,同時,在這部 NFS 上面也有 test 這個帳號,果真如此的話,那麼:

1. 由於 192.168.0.2 這部 NFS 主機的 /tmp 權限爲 -rwxrwxrwt ,所以我 ( test 在 192.168.0.100 上面 ) 在 /tmp 底下具有存取的權限,並且寫入的檔案所有人爲 test ;

2. 在 /home/public 當中,由於我有讀寫的權限,所以如果在 /home/public 這個目錄的權限對於 test 有開放寫入的話,那麼我就可以讀寫,並且我寫入的檔案所有人是 test 。但是萬一 /home/public 對於 test 這個使用者並沒有開放可以寫入的權限時,那麼我還是沒有辦法寫入檔案喔!這點請特別留意!

3. 在 /home/test 當中,我的權限與 /home/public 相同的狀態!還需要 NFS 主機的 /home/test 對於 test 有開放權限;

4. 在 /home/linux 當中就比較麻煩!因爲不論你是何種 user ,你的身份一定會被變成 UID=40 這個帳號!所以,這個目錄就必需要針對 UID = 40 的那個帳號名稱,修改他的權限纔行!
 
  那麼假如我在 192.168.0.100 的身份爲 test2 ,但是 192.168.0.2 這部 NFS 主機卻沒有 test2 這個帳號時,情況會變成怎樣呢?

1. 我在 /tmp 底下還是可以寫入,但是寫入的檔案所有人變成 nobody 了;

2. 我在 /home/public 裏面是否可以寫入,還需要視 /home/public 的權限而定,不過,反正我的身份就被變成 nobody 了就是;

3. /home/test 的觀點與 /home/public 相同!

4. /home/linux 底下,我的身份就被變成 UID = 40 那個使用者就是了!
 
  那麼假如我在 192.168.0.100 的身份爲 root 呢? root 這個帳號每個系統都會有呀!呵呵!權限變成怎樣呢?
1. 我在 /tmp 裏面可以寫入,並且由於 no_root_squash 的參數,改變了預設的 root_squash 設定值,所以在 /tmp 寫入的檔案所有人爲 root 喔!

2. 我在 /home/public 底下的身份還是被壓縮成爲 nobody 了!因爲預設屬性裏面都具有 root_squash 呢!所以,如果 /home/public 有針對 nobody 開放寫入權限時,那麼我就可以寫入,但是檔案所有人變成 nobody 就是了!

3. /home/test 與 /home/public 相同;

4. /home/linux 的情況中,我 root 的身份也被壓縮成爲 UID = 40 的那個使用者了!
 
  這樣的權限講解之後,您可以瞭解了嗎?這裏是最重要的地方,如果這一關通過了,底下的咚咚就沒有問題啦! ^_^

o 激活服務 portmap, nfsd

  好了,設定OK也沒有權限的問題之後 ( 有問題也沒關係,可以事後在好好的檢視與修改一番!) ,再來自然就是激活他囉!如何激活呢?簡單的很,直接給他OK下去!

8.gif

  那個 portmap 根本就不需要設定!只要直接激活他就可以啦!激活之後,會出現一個 port 111 的 sunrpc 的服務!那就是 portmap 啦!至於 nfs 則會激活至少兩個以上的 daemon 出現!然後就開始在監聽 Client 端的需求啦!激活之後,請趕快到 /var/log/messages 裏面看看有沒有被正確的激活呢?

9.gif

  要正常的出現上面的字樣之後,纔算是正確的激活喔!

o exportfs:


  好了,那麼如果我們修改了 /etc/exports 這個檔案之後,是否需要重新激活 nfs 呢?呵呵,並不需要,只要使用 exportfs 重新掃瞄一次 /etc/exports 這的檔案,並且重新將設定加載即可!因此,就要來了解一下 exportfs 的用法了:

10.gif

  要熟悉一下這個指令的用法喔!這樣一來,就可以直接重新 export 我們的記錄在 /etc/exports 的目錄資料囉!

o 檢驗目錄 /var/lib/nfs/xtab


  好了,當你順利的將你的目錄都分享出去之後,你怎麼知道每個目錄的分享權限呢?不要忘記了,因爲我們有相當多的預設屬性呢!因此,這個時候就得需要檢驗一下你所分享的目錄內容囉!看一下 /var/lib/nfs/xtab 這個檔案吧!他有點像這樣:

11.gif

  看到沒?這個就是 /home/test 這個分享出去的目錄的預設 NFS 裏面的屬性啦!這個屬性狀態裏頭有個比較奇怪的,那就是 anonuid=-2 這個,怎麼有 uid=-2 的呢?呵呵!其實它說的是將 65536 - 2 的值,也就是 65534 的那個 UID 啦!對照一下 /etc/passwd ,你就會發現,哇!原來那就是 nobody 的啦!

o showmount:

  showmount 顧名思義,就是看看有沒有可以 mount 的指令嘛!怎麼用呢?

12.gif

  很簡單吧!所以,當你要掃瞄某一部主機他提供的 NFS 分享的目錄時,就使用 showmount -e IP(或hostname)即可!非常的方便吧!

o 觀察激活的 port number:


  OK!來看看我們激活 NFS 之後,到底激活了多少的 port 呢?要注意的是,我們有激活 portmap 與 nfs 兩支 scripts 喔!

13.gif

  注意看到上面喔!總共產生了好多的 port 喔!真是可怕!先注意到 nfs 自己所開啓的 port ,就是那個 2049 的 port 啦!那個就是 NFS 主要產生的 port 囉。那麼其它的 rpc.xxxx 的 port 又是從何而來? NFS server 在前面我們就提過了,他是 RPC server 的一種,而 NFS 由於提供了多個 program ( 例如 rpc.mountd, rpc.rquotad, rpc.nfsd... ) ,因此就需要激活多個 port 了!而且這些 port 是『隨機產生的』,也就是那個 port number 不會是固定的啦!每次 restart nfs 都會得到不一樣的 port number 呢!那麼 Client 端怎麼知道要連接上那個 port 來呼叫需要的 program 呢?呵呵!那就是 sunrpc ( port 111 ) 那個 portmap 服務所產生的 port number 的功用啦!Client 會先連接到 sunrpc 那個 port 去知道應該到那個 port 去呼叫所需要的程序!所以囉, rpc.xxxx 等之類的 daemon 自然就不需要有固定的 port number 囉!

  OK!這樣一來, Server 端的設定就 OK 啦!


-----------------------------------------------------------------------------------------------

Client 端的設定:

掛載遠程主機:


  好了, Server 端已經設定完畢,接着下來自然就是要使用 Client 端連接上 Server 端囉!那麼連接上 Server 的步驟是怎樣呢?

1. 掃瞄可以使用的 Server 目錄;

2. 在 Client 本地端建立 mount point;

3. 使用 mount 將遠程主機分享的目錄掛載進來;

4. 可能發生的問題解決(被防火牆擋掉了!?)。

  OK啦!所以我們得先知道一下我們的主機裏面有什麼?假設我的主機名稱是 test.linux.org ,那麼我要知道里頭有些什麼藉由 NFS 分享出來的目錄,就給他 showmount 一下囉!

14.gif

  然後呢?假設我要將 /home/public 掛載在我的 /home/nfs/public 底下,那麼我就得先有這個目錄纔行呀!然後再利用 mount 這個指令來掛載 /home/public 這個目錄!有點像這樣:

15.gif

  先注意一下掛載 NFS 檔案的格式範例喔!呵呵!這樣就可以將資料掛載進來啦!請注意喔!以後,只要你進入你的目錄 /home/nfs/public 就等於到了 test.linux.org 那部遠程主機的 /home/public 那個目錄中囉!很不錯吧!那麼如何將掛載的 NFS 目錄卸載呢?就使用 umount 啊!

16.gif

可能發生的問題:


通常無法掛載的原因有底下這幾個:

1. 使用者的權限不符:

  以上面的例子來說明,我的 /home/test 只能提供 192.168.0.0/24 這個網域,所以,如果我在 test.linux.org 這部機器中,以 localhost 來掛載時,就會無法掛載上,這個權限概念沒問題吧!那麼你可以試試看:

17.gif

  所以囉!如果你發現上面的顯示的訊息時,就表示你的主機權限不能夠進入該目錄囉!如果確定你的 IP 沒有錯誤,那麼請回到 /etc/exports 這個檔案中,針對你自己的 IP 來進行修正吧!
 
2. 忘記激活 portmap :

  這個最容易被忘記了!就是忘記了激活 portmap 這個服務啦!如果你發現你的 mount 的訊息是這樣:

18.gif

3.被防火牆擋掉了:

  這個也很容易忘記了!那就是重新設定一下你的防火牆,這包含了兩部份,包括 iptables 與 TCP_Wrappers !因爲我們激活了 portmap ,這個東西有兩個資料需要分享出來,一個是 port 111 需要提供出去,因此你的 iptables 規則當中,需要開放這個 port 喔!有點像這樣的幾行字要加入你的 iptables rules 當中:

19.gif

  或者是將 ALL 改成你所想要讓他使用 NFS 的網域即可!這樣說可以瞭解了嗎?若想進一步瞭解一下防火牆,請參考:簡易防火牆建置


------------------------------------------------------------------------------------------------

RPC server 的相關指令:

  好了,既然我們知道這個 NFS 其實使用的是 RPC 這個咚咚,所以當然要知道 RPC 的每個 port 在幹什麼呀!這個時候,就不能不知道 rpcinfo 這個指令了!先來談一談這個指令的用法吧!

20.gif

  這樣就可以知道每個 port number 所對應的 program 囉!您也就知道這個 RPC server 提供給你的 program 是什麼了!當然了,要讓這個 rpcinfo 可以正確的動作,你的 portmap 得真的動起來纔行吶!加油囉!

------------------------------------------------------------------------------------------------

關機或結束時的注意事項:


  需要注意的是,由於 NFS 使用的這個 RPC 在 client 端連上主機時,那麼你的主機想要關機,那可就會成爲『不可能的任務』!我還不知道正確的原因是什麼,但是,如果你的 Server 上面還有 Client 在聯機,那麼你要關機,可能得要等到數個鐘頭才能夠正常的關機成功!嗄!真的假的!不相信嗎?不然您自個兒試試看! ^_^!所以囉,建議您的 NFS Server 想要關機之前,能更先『關掉 portmap 與 nfs 』這兩個東西!如果無法正確的將這兩個 daemons 關掉,那麼先以 netstat -utlp 找出 PID ,然後以 kill 將他關掉先!這樣纔有辦法正常的關機成功喔!這個請特別特別的注意呢!


------------------------------------------------------------------------------------------------

安全設定(被防火牆擋掉了):


  好了!一些注意事項講完了之後,再來呢?對了!又是最重要的安全設定方面的問題了!那麼 NFS 可以設定安全的地方有哪裏呢?其實還不少呢?由外而內可以這樣看:

1. iptables 防火牆設定;

2. TCP_Wrappers 防火牆設定;

3. /etc/exports 權限設定。

  防火牆的基本概念請參考『簡易防火牆建置』一文,最好能將該篇文章給他看完,否則還真難了解底下在幹嘛~嗯!假設您已經看完該篇短文了,接着下來我們就得要一步一步的接着建立防火牆囉!

· 使用 iptables 限制大範圍聯機:

  假設我們的 NFS 主要是針對內部網絡開放而已,而對於外部網絡只有對學術網絡開放,亦即是 140.0.0.0/8 ,那麼你可以使用這樣的語法:

21.gif

  這樣大致上就可以讓 192.168.0.0/24 這個 C Class 的網域與 140.0.0.0/8 這個 A Class 的網域到你的主機裏面來,而其它的聯機就視您的原本的 iptables 的狀態而定喔!
 
· 使用 TCP_Wrappers 限制更細的範圍:


  事實上,如果你不懂得如何設定 iptables 的話,那也沒關係,我們可以使用 TCP_Wrappers 阿!因爲要使用 NFS 就必須要通過 portmap 這一關( 因爲要使用 RPC 啦! ),而這個 portmap 可以藉由 TCP_Wrappers 來管理!呵呵!太好了!那麼就將他聯機的範圍限制的更小囉!我們可以在 /etc/hosts.allow 裏面規定連上 NFS 主機的主機 IP 與名稱,假設限制中的主機只有 192.168.0.0/24 這個 C class 及 140.116.44.125 這個主機,以及後面接的是 ncku.edu.tw 的網域可以連上我的 NFS 主機,那麼我可以寫成這樣:

22.gif

  呵呵!這樣可就設定好囉!很簡單的吧!
 
· 使用 /etc/exports 設定更安全的權限:

  這就牽涉到您的邏輯思考了!怎麼設定都沒有關係,但是在『便利』與『安全』之間,要找到您的平衡點吶!善用 root_squash 及 all_squash 等功能,再利用 anonuid 等等的設定來規範登入您主機的使用者身份!應該還是有辦法提供一個較爲安全的 NFS 主機的!

· Client 端掛載的問題:


  基本上,在 Client 端掛載的時候,爲了擔心會不小心剛 NFS 端掛進來的具有 SUID 權限檔案的程序執行!這個很可能會危害到系統的安全呢!因爲 SUID 本來就不是很安全的嘛!所以呢,你這個 root 也可以將 NFS 所分享的目錄以較爲安全的情況掛載進來!例如:

23.gif

  選擇 nosuid 也是一個很不錯的抉擇喔!

  通常我們都會約略的建議,不要激活 NFS Server ,即使要激活,最好也是針對某個範圍來進行目錄的分享!並且,『要分使用者層級來管理』會比較好一些喔!底下我們就來實際的在您的機器上面搞一個簡單的 NFS server 吧!


------------------------------------------------------------------------------------------------

實際演練:

假設環境:


1. 假設我的 Linux 主機爲 192.168.0.100 這一部;

2. 預計將 /tmp 以可擦寫,並且不限制使用者身份的方式分享給所有 192.168.0.0/24 這個網域中的所有 Linux 工作站;

3. 預計開放 /home/nfs 這個目錄,使用的屬性爲只讀,可提供除了網域內的工作站外,向外亦提供資料內容;

4. 預計開放 /home/upload 做爲 192.168.0.0/24 這個網域的資料上傳目錄,其中,這個 /home/upload 的使用者及所屬羣組爲 nfs-upload 這個名字,他的 UID 與 GID 均爲 210;

5. 預計將 /home/andy 這個目錄僅分享給 192.168.0.50 這部 Linux 主機,以提供該主機上面 andy 這個使用者來使用,也就是說, andy 在 192.168.0.50 及 192.168.0.100 均有帳號,且帳號均爲 andy ,所以預計開放 /home/andy 給 andy 使用他的家目錄啦!

實地演練:

好了,那麼請你先不要看底下的答案,先自己動筆或者直接在自己的機器上面動手作作看,等到得到你要的答案之後,在看底下的說明吧!

· 首先,就是要建立 /etc/exports 這個檔案的內容囉,你可以這樣寫吧!

24.gif

   大概就是這樣子吧!你可以自行測試看看!
 
· 再來,就是要建立每個對應的目錄的實際 Linux 權限了!我們一個一個來看:

25.gif

  這樣子一來,權限的問題大概就可以解決囉!
 
· 激活 portmap 與 nfs 服務:


26.gif

· 在 192.168.0.50 這部機器上面演練一下:

27.gif

  整個步驟大致上就是這樣吶!加油喔!

(來源:鳥哥私房菜)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章