網絡 文件系統和安全 2.6 內核通過引入 NFS 版本 4 而改進了 網絡 文件系統 (NFS)。這個新版本的 NFS 有更好的安全性,考慮了更多的跨不同操作系統的支持,並且減輕了 服務器 後台進程開銷。 2.6 內核對 網絡 文件系統版本 4 (NFSv4) 的引入,帶來了 NFS 先
網絡文件系統和安全 2.6 內核通過引入 NFS 版本 4 而改進了網絡文件系統 (NFS)。這個新版本的 NFS 有更好的安全性,考慮了更多的跨不同操作系統的支持,並且減輕了
服務器後台進程開銷。
2.6 內核對網絡文件系統版本 4 (NFSv4) 的引入,帶來了 NFS 先前版本不曾出現過的安全性和功能性的改進。使用通用安全服務 (General Security Service, GSS) API 的遠程過程調用 (remote procedure call, RPC) 實現,NFS 的用戶現在可以進行安全的事務處理。設計者還引入了復合過程(將多個 RPC 組合到一個調用中)的思想。調用的組合意味著文件系統操作需要更少的 RPC,從而使 NFS 響應速度更快。
進一步減少 NFS 開銷的是,NFS 現在使用了文件“句柄到路徑”名稱映射 (mountd),以及字節范圍 (byte range) 的文件鎖定 (lockd),這樣減少了服務器端所需要的支撐後台進程的數量。為方便服務器實現,NFSv4 引入了額外的文件句柄類型,並提供了對文件和文件系統屬性的分類。這個新的 NFS 版本還增加了對服務器遷移和復制的支持,讓用戶在需要的時候可以無縫地改變服務器。最後,NFSv4 現在可以讓服務器授權給在緩存狀態下的客戶機某些職責,在那種情況下非常需要這個選項。
NFS RPC 請求可以使用密碼認證的能力提供了端到端的 NFS 安全支持。NFSv4 使用 RPCSEC_GSS 框架來擴展 RPC 的基本安全。這個安全框架讓 NFSv4 可以提供服務器與客戶機之間的認證、完整性和隱私機制。這種聯合的安全協商讓客戶機可以安全地與服務器的安全策略相匹配,得到滿足服務器和客戶機雙方
需求的機制。
復合過程是 NFS 在版本 4 設計中的另一個改進。先前版本的 NFS 沒有方法可以讓客戶機生成復雜邏輯的文件系統 RPC。通過使用復合過程,客戶機可以將 LOOKUP、OPEN 和 READ 操作組合到一個 RPC 請求中,這樣客戶機只需一次請求就可以從文件中讀取數據。舊版本的 NFS 要求客戶機為這三個操作每一個都要執行一次 RPC。在服務器端處理這些復合請求的實現很簡單,復合請求被服務器拆分為一個單獨請求的列表,服務器遍歷並執行列表中的每一個操作,直到結束或者失敗,然後將所有操作的結果返回給客戶機。
NFSv4 通過削減服務器所需要的非 NFS 服務器協議的數目來進行進一步的簡化。用版本 4,NFS 代碼可以將文件句柄映射到路徑名,在舊版本中這是由 mountd 協議來做的。服務器提供了一個 root 文件句柄,對應於服務器導出的文件系統樹的頂。服務器支持多文件系統,實現途徑是用偽文件系統將它們聯系在一起,這樣就掩蓋了真正的文件系統之間路徑名的潛在差異。這個轉換是為了支持全局分級名稱空間。
此外,這個新版本的 NFS 協議支持字節范圍的文件鎖定,而先前版本使用的是網絡鎖管理器 (Network Lock Manager) 提供的 lockd 協議。文件鎖定支持的重構讓服務器可以用基於租約的模型來保持文件的鎖狀態。基本來說,客戶機需要向服務器提交鎖請求。如果被准許,客戶機還必須在服務器指定的租約期限內更新租約。在租約過期後服務器可以釋放客戶機的鎖。mountd 和 lockd 這兩個協議的棄用,減少了運行 NFS 服務器的處理開銷。
新版本的 NFS 還包括簡化 NFS 服務器實現的改進。文件句柄要在它所引用的文件系統對象的生命周期內持久保持,這對一些老的 NFS 服務器實現來說是一個很難滿足的要求。NFSv4 中增加了一個可變文件句柄類型,作為持久文件句柄類型的補充。使用這兩種文件句柄類型,服務器實現可以具備與服務器上操作系統的文件系統相匹敵的能力。客戶機可以識別出服務器提供的文件句柄的類型並為其做好准備,然後為每一個句柄設置操作。
文件和文件系統屬性分類是對 NFS 的另一個補充,使服務器實現更方便。舊的 NFS 版本使用的是固定的一組屬性,只是主要考慮了 UNIX 文件和文件系統。如果服務器或者客戶機不支持特定的屬性,它必須得盡量去模擬那個屬性。版本 4 將屬性分為三類:強制的、推薦的和命名的。
強制的屬性 是服務器必須正確提供並描述的文件或文件系統屬性的最小集合。推薦的屬性 描述了不同的文件系統類型和操作系統,考慮到了操作系統之間更好的包含和互操作性。命名文件系統屬性 分類是一個關聯到目錄或者文件的字節流,通過一個字符串名引用。客戶機應用程序可以利用這些命名的屬性將特定的數據關聯到文件 和/或 文件系統。屬性分類系統的創建,建立了一個不用對代碼進行大的修訂就可以添加新屬性的簡便方法。
為實現更好的冗余,NFSv4 支持服務器端的文件系統復制和遷移。使用一個特殊的文件系統位置屬性,客戶機可以向服務器進行關於文件系統位置的查詢。如果出於負載平衡或者其他類似原因服務器文件系統被復制了,客戶機可以得到請求的文件系統的所有位置。客戶機運用自己的策略可以掛載並訪問它請求的文件系統的適當位置。類似的,如果一個文件系統被遷移了,客戶機根據訪問舊位置時得到的錯誤查詢文件系統的新位置,並為適應重新定位進行必要的改變。
NFSv4 的最後一個亮點是讓服務器可以授權給在緩存狀態下的客戶機某些職責,這些於提供真正的數據完整性來說是必需的。使用 NFSv4,服務器可以為一個特定的文件提供讀或寫授權。如果一個客戶機得到了一個文件的讀授權,那麼在這個授權期間,任何其它客戶機都不允許寫這個文件。此外,如果一個客戶機得到了一個文件的寫授權,那麼在此授權期間沒有其他客戶機可以寫或讀這個文件。當一個客戶機請求一個文件,而這個文件已授權給另一個客戶機時,會發生沖突,授權可能會被服務器收回。在這種情況下,服務器會通過客戶機與服務器之間的一個回調路徑通知授權的用戶,並收回授權。授權讓客戶機使用 NFS 緩存在本地進行服務操作,而不用與服務器進行實時交互,這樣就減少了服務器負載和網絡傳輸。
TCP 改進 流控制傳輸協議 (SCTP) 是 2.6 內核中增加的一個新的傳輸層協議。SCTP 除了具有傳輸控制協議 (TCP) 所具有的相同特性之外,還具備了用於電話、數據通信和高可用應用程序的另外的特性。
SCTP 提供了與 TCP 類似的功能,可以確保無錯的、序列化的數據傳輸,並在數據傳輸整個過程中在兩個端點之間建立一個面向會話的、端到端的聯系。不過,SCTP 還提供了 TCP 所不具備的功能,比如 multi-streaming 和 multi-homing,這對某些任務來說至關重要,例如 IP 網絡之上的電話信號。
Multi-streaming 讓數據可以分為多個獨立的序列流。這樣的結果是,任何一個流中的消息丟失最初只會影響這個流本身,而不會影響其他的流。SCTP 是面向消息的(相對而言,TCP 是面向字節的),支持構造獨立的消息邊界,支持多路數據流。如果使用 TCP 中用到的單一數據流方法,當消息丟失或者發生序列錯誤時,會導致更多的延遲。直到正確的序列被重新存貯之前,TCP 必須延遲向應用程序層的傳輸。這一數據傳輸的延遲會影響那些不是必須要求消息排序的應用程序的
性能,比如電話信號或者有多媒體內容的網頁。雖然電話信號需要對同源的(比如同一次通話)消息進行排序,但是其他相關的消息的傳輸並不要求序列的完整性。
包含有不同類型和大小的多媒體對象的網頁,可以使用 multi-streaming 以部分有序的方法來傳輸這些內容,而不要用嚴格有序的方法。這一數據傳輸的靈活性會提高傳輸的用戶可感知性。此外,在單一的 SCTP 聯系中進行數據傳輸的思想意味著所有的流可以依賴於一個共同的流量和擁塞控制機制,這樣減少了傳輸層所需要的工作。
Multi-homing 是使 SCTP 與傳統的傳輸層協議不同的另一個特性。Multi-homing 允許單一的 SCTP 端點支持多個 IP 地址,並在到目標有多個路由的情況下提供冗余。TCP 和 UDP 用的是 single-homed 會話,這樣當本地 LAN 訪問失敗會隔離開終端系統,並且整個網絡內的故障會導致晢時的失敗,直到 IP 路由協議重新路由傳輸。
Multi-homed SCTP 和冗余的 LAN 一道,考慮到了對本地端點訪問的增強。多個不同前綴的地址和/或路由,再加上 SCTP multi-homing,提高了貫穿於整個網絡的冗余。SCTP 的 multi-homing 特性並不提供網絡負載平衡與共享功能。這個機制的關鍵目的是為 SCTP 之上的應用程序提供冗余的連接。SCTP 指定一個地址作為“主”地址,並使用這個地址來進行所有的數據通信。當需要重傳時,數據會發送到所有的地址,以增加到達另一個端點的可能性。在主連接完全失敗的情況下,所有的數據被重新路由到另一個地址。與標准高可用性中用到的方法類似,一個“心跳”信號會發送到失敗的主連接,這可以用來確定原來的連接是否可以重新建立起來。
IP 安全和壓縮 Internet 協議安全 (IPSec) 是對 2.6 內核的另一個增強。IPSec 提供了在局域網和 Internet 上認證和加密網絡通信的方法。除了提供包加密外,2.6 內核還通過 IP 有效載荷壓縮 (IP Payload Compression, IPComp) 提供了改進的傳輸。IPComp 是一個協議,它使用壓縮和解壓縮算法來改進在慢的和/或擁塞的網絡上的傳輸
質量。
2.6 內核對 Internet 協議安全 (IPSec) 的引入,在 Internet 協議 (IP) 層向用戶提供了安全的傳輸服務。IPSec 為復雜結合在一起構成 Internet 的媒介和各種應用程序提供了一個通用的
解決方案。2.6 內核支持兩種 IPSec 機制:認證報頭 (Authentication Header, AH) 和封裝的安全有效載荷 (Encapsulated Security Payload, ESP)。它們都依賴於 2.6 內核中包含的 Cryptographic API 提供的認證算法。
認證報頭 (AH) 是直接添加到 IP 報頭之後的附加報頭,以提供包認證。包級別的認證讓用戶可以確保收到的包來自於特定的機器,並且它的內容在傳輸路徑上沒有被改變。這種機制沒有試圖隱藏或保護包的內容。AH 所提供的主要特性是包的完整性保證。要更好地利用加密技術,用戶還應該再使用 ESP。
封裝的安全有效載荷 (ESP) 報頭有能力提供加密和包認證功能。ESP 提供的功能包括加密、認證、“反重放 (
anti-replay) 服務(部分序列完整性的一種形式)”和“有限的傳輸流機密”。用戶可以選擇不用特定的認證進行加密,但是這樣會讓包容易受到攻擊,導致讓別人破壞加密。ESP 報頭位於 IP 報頭之後,傳輸模式(UDP 或者 TCP)之前,或者當使用隧道時是在封裝的 IP 報頭之前。
ESP 保護整個內部的 IP 包和報頭。在隧道模式,內部的 IP 報頭承載預設的源和最初的目的地址,外部 IP 報頭包含用於跳點的 IP 地址,比如安全網關。
IP 有效載荷壓縮 IP 有效載荷壓縮 (IPComp) 減小了 IP 數據報的大小。如果兩端機器都有足夠的計算能力,並且通信發生於擁塞的和/或慢的連接上,這一 2.6 網絡特性將提高兩個端點間通信的性能。
IPComp 協議特別適合於 IPSce 配合使用,因為當使用 IPSec 提供的和需要的附加報頭時,包的大小會增加。IPComp 有兩個階段:壓縮向外發送的包和解壓縮收到的包。在壓縮和解壓縮的過程中保持了原始 IP 包的數據完整性。每個包的壓縮和解壓縮都是獨立進行的,因為 Internet 內存的不確定性會導致包的到達順序被打亂。
IPv6 隱私擴展 2.6 內核特性改進了關於 IPv6 的安全選項。除了擴展 IPSec、IPComp 和對 IPv6 隧道的支持外,2.6 內核還提供了 IPv6 隱私擴展。
IPSec 為 IPv6 提供了與 IPv4 的相同級別的認證和安全。所包含的對 IPv6 到 IPv6 隧道的支持讓兩個端點之間可以進行安全無縫的通信,比如虛擬專用網絡 (Virtual Private Networks, VPN) 之上的傳輸。
IPv6 隱私擴展這一特性尤其著重於提高 Internet 的匿名性,讓用戶在使用 IPv6 地址時可以選擇保護他們的身份。當前的無國界的地址自動配置模式是使用設備(換句話說,是以太網卡或者移動電話)的 MAC 地址來形式化 128 位 IPv6 地址的前綴。使用不變的標識符來形式化地址使得數據可以被追蹤,而這可能被意想不到的動機所利用。例如,只要知道一台機器的 MAC 地址,網絡嗅探器就可以追蹤哪些機器以及在什麼時候哪台機器與此機器通信。
網絡嗅探器的數據很容易收集,因為無論網絡拓撲如何,MAC 地址始終不變,即使機器是移動電話或者膝上電腦。記錄這些數據的人可以通過這些信息來追蹤工作模式、位置,等等。
IPv6 隱私擴展讓用戶可以使用一個隨機的接口標識符創建另外的 IPv6 全局地址。一台機器在特定的時間段內使用這些臨時的地址,直到重新設置為另一個隨機地址。重新設置後,當前的連接可以繼續保持通信;不過,所有的新連接必須用新的臨時地址建立通信。
結束語 大部分用戶將發現,這些新的或者增強的特性中,會有一個或多個可以改進他們在各自的系統環境中使用 Linux 的方式。
NFS 用戶遷移至版本 4 就可以得到期待中的提高的性能與安全。
電信等級 (carier-grade) 和電話應用程序的
開發人員可以使用 SCTP 提供的特性來幫助他們確保為消費者和客戶提供更好的、更可靠的服務。IPSec 為那些需要通過不安全的網絡傳輸安全數據的人和企業提供了解決方案,IPComp 通過在傳輸中使用較小的包而讓那些人和企業可以改善 Internet 上的數據通信。對 IPv6 的增強可以為那些使用這個下一代 Ineternet 協議的人提供更好的安全性和隱私性,同時讓更多 IPv4 應用程序開發人員轉而使用這個改進版本的 IP。