在Linux系統下有很多工具可以實現文件共享。不過NFS(網絡文件系統)無疑是到目前為止最成功的一個。利用網絡文件系統,可以把文件服務器上的共享目錄通過網絡掛載到本地操作系統。如此的話,用戶可以在本地操作系統上像操作本地分區一樣來對遠程服務器的共享目錄進行操作。
那麼NFS到底可以實現哪些用途呢?到目前為止,筆者至少已經通過NFS網絡文件系統實現了兩個功能,一是為企業搭建了一個文件服務器;二是部署一個Linux開發編譯平台。
利用NFS網絡文件系統可以很容易的為企業用戶搭建一個文件共享的平台。如只需部署一個Linux服務器,並配置NFS文件系統。然後再在服務器上根據部門或者其他規則設立一些共享的文件夾,並配置好相關的權限。如可以為每個部門設置一個用戶和一個共享文件夾,然後讓每個部門可以對自己部門的文件夾進行讀寫等操作。而對於其他部門的文件夾則只具有讀的權限。然後在客戶端上,就可以像掛載分區一樣,把服務器的共享文件夾掛載到本地主機上。企業員工若需要對文件服務器上的共享文件進行操作,就可以像操作本地分區一樣的容易。而且還可以配置啟動文件,讓客戶端電腦每次啟動的時候,都自動掛載這個文件服務器上的共享目錄。另外現在微軟操作系統也支持這個NFS網絡文件系統,所以微軟的操作系統也可以通過創建“快捷方式”的途徑來掛在NFS共享文件。所以利用NFS網絡文件系統實現文件共享,還不受客戶端的限制。另外,系統管理員也不必在每個Linux操作系統中都設置一個home目錄。Home目錄可以被放在NFS服務器上並且在網絡上處處可用。
利用NFS網絡文件系統還可以實現Linux系統交叉開發的編譯平台。在嵌入Linux操作系統的開發過程中,程序開發者需要在Linux開發服務器上進行所有的軟件開發工作。開發完成後再進行交叉編譯,然後在利用FTP方式將可執行文件下載到嵌入式系統運行。但這種方式效率比較低,而且無法實現在線調試。為此這種Linux系統開發方式正在逐漸淘汰中。現在程序開發人員可以通過建立NFS網絡文件系統,把Linux 服務器上的特定分區共享到待調試的嵌入式目標系統上。此時用戶就可以直接在嵌入式目標系統上操作Linux服務器的共享目錄,還可以實現在線對程序進行調試和修改,大大的方便了軟件的開發。因此,現在NFS網絡文件系統的是嵌入式Linux操作系統開發的一個很重要的組成部分。有了NFS文件系統的幫助,可以大大提高Linux操作系統開發的效率。
不過要使用好這個NFS網絡文件系統,Linux系統管理員還是需要花點時間的。具體來說,在部署NFS網絡文件系統的時候,需要注意如下幾個方面的問題。
一、要小心NFS網絡文件系統帶來的安全隱患。
從上面的描述中我們可以看出,NFS網絡文件系統的實質就是在服務器上共享一些目錄,然後掛載到客戶端上。也就是說,是基於共享目錄而實現的。但是,眾所周知,共享目錄其對服務器會帶來比較大的安全隱患。為此當管理員需要通過NFS技術把服務器上的目錄共享出來的話,出於安全的考慮,那麼就需要配置服務器上的/etc/exports文件,讓這個共享文件的訪問權限受到限制。如不允許對根目錄具有寫的權限;不用使用通配符;不能夠任意刪除建立共享目錄等等。
如上圖,就是exports文件設置的實例。上面這個例子中,表示只允許192.168.0.5 的客戶端可以訪問這個共享文件夾,而且對於共享文件夾只具有只讀的權限。另外參數root_squash表示不允許對根目錄進行寫操作。這個文件的具體設置,筆者在後面一部分內容中會具體進行講解。筆者之所以在這裡把這個權限問題拿出來獨立進行說明,就是希望能夠引起大家對NFS網絡共享文件系統安全性的關注。
二、配置/etc/exports文件。
要在Linux上實現網絡共享文件系統,主要是通過配置系統中的/etc/exports文件來實現的。當Linux服務器重新啟動時操作系統會自動讀取這個文件,從而告訴操作系統內核要輸出的文件系統以及相關的訪問權限控制。從上面這個示意圖中大家看到,這個配置文件主要設置了共享目錄、訪問者、訪問權限等幾部分內容。
第一部分的內容是定義要共享的文件目錄。注意,在這裡必須使用絕對路徑,而不能夠使用符號連接。如在Linux系統中有一個文件夾為share,其真正的保存路徑為/dir/share。但是可能為了管理的方便,用戶會為其在桌面上創建一個快捷方式(/home/user/Desktop/share)。這個快捷方式在Linux操作系統下就叫做符號連接。雖然實際上他們是等價的,通過快捷方式也可以訪問這個Share文件夾,他們都是指向同一個文件夾。但是在利用網絡文件系統共享目錄的時候,必須采用絕對路徑。否則的話,系統不能夠正確找到共享目錄。
第二部分是對訪問主機的限制。在這裡系統管理員可以允許局域網內所有的主機都可以訪問共享目錄;也可以設置某個網段或者某幾個特定的IP才可以訪問。具體需要怎麼配置需要系統管理員根據企業的實際情況來判斷。如果NFS網絡文件系統主要用來實現文件服務器,在通常情況下企業全部員工都需要訪問這個NFS服務器,此時就可以通過IP網絡的形式來定義,如192.168.1.0等等。如果NFS網絡文件系統是用來實現一個Linux平台的開發編譯工作,那麼往往只允許一些特定的IP地址可以訪問。此時可以指定具體的IP地址或者通過通配符來實現。
第三部分為具體的權限問題。關於權限的重要性筆者在第一點已經有所闡述,筆者這裡也就不過多說明了。筆者這裡就談談共享目錄權限配置的具體問題。筆者認為,在配置共享目錄權限的時候需要分情況來對待。首先需要考慮普通共享目錄的權限。如共享目錄對用戶是只讀的呢,還允許其可以向共享目錄中寫入文件。其中參數rw表示用戶對這個共享目錄具有可讀寫權限;而ro表示用戶對共享文件具有只讀權限。筆者利用NFS為企業實現過一個文件服務器。在配置這個權限的時候,筆者允許其他部門的員工以只讀的形式訪問不是本部門的共享目錄;而對於本部門的用戶則可以以讀寫的形式來進行訪問。
其次需要關注root這個特殊的帳戶。系統默認情況下,root是不受權限訪問的控制。如果在本機上,即時文件所有者對root帳戶進行了權限控制,但是root帳戶仍然可以對這個文件具有完全控制的權限。為此現在系統管理員就需要考慮,如果當訪問NFS服務器共享目錄的用戶是root時該如何處理?如上面的示意圖,如加入no_root_squash參數時,表示當登錄NFS主機使用共享目錄的使用者是root時,則其權限將被轉換為匿名使用者。如使用的是root_squash,則表示如果登錄NFS服務器使用共享目錄的使用者是root時,那麼對於這個共享目錄來說,它具有root權限。也就會說,即使這個共享目錄有嚴格的權限限制(如所有用戶對這個共享目錄都是只讀),這個訪問者仍然對這個共享目錄有完全控制的權限。通常情況下,筆者是建議采用no_root_squash參數,限制客戶端root帳戶的權限。
第三可以設置共享目錄的工作方式。如參數sync表示當用戶在客戶端上往這個共享目錄中創建文件時同步寫入文件到內存與硬盤中。而參數async則表示文件會先暫時存儲於內存中,等到一個合適的時候再寫入到硬盤中。具體采用哪種方式主要是根據性能與安全性來考慮。同步寫入到內存與硬盤中安全性會高一點,如果NFS服務器突然斷電或者其他意外原因重新啟動時文件不會丟失;但是由於內存與硬盤的效率是不同的,故其執行性能會稍微慢一點。而如果先把數據存儲在內存中,而非直接寫入硬盤,可以提高NFS服務器的性能,但是如果NFS服務器意外關機或者重新啟動時會導致數據的丟失。具體采用哪一種方式,則需要系統管理員權衡利弊,選擇合適的處理方式。