歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> 關於Unix

Solaris操作系統中的CIFS


Solaris 操作系統中的通用網際文件系統(CIFS):這是一個非常有趣的概念;一直以來激發著 Sun 開發人員創新的激情。
4 年前我接受嘗試向 Solaris 添加 CIFS 服務的請求。“確實,這種嘗試是可能的,但可能比您想象的更為冒然。您明白您要完成的這項任務嗎?”
幾年來我們一直從事獨立的 CIFS 實現方面的工作,我們使用它作為 Solaris CIFS 項目的基礎,但這需要時間將各項事宜搞定:在 Sun 公司的管理方面可能發生的事情和 Sun 工程師正式認可的事情之間存在巨大的差異。獲得必要的支持需要花費一定時間,而且在 Solaris CIFS 服務器項目真正立項還需兩年的時間。
盡管當時我並不了解這一情況,但 16 年前當我正從事多操作系統、分布式、事務處理系統方面的工作時(當時似乎我永遠要將 ONC RPC 移植到另一個操作系統上) 這項工作全面展開。我偶然接觸到稱作 OSF DCE 的分布式計算環境,它將 DCE RPC 應用於客戶機服務器通信、X.500 名稱服務和 Kerberos 安全性。我們在各種不同的 UNIX 操作系統之間使用 DCE 構建一個原型,但創建產品決定使用不同的技術。人們正在探討將 DCE 應用於 CORBA(對象請求代理)服務器,我們也采用了基於事務處理監視器的 DCE,但我們並不認為 DCE 會流行,而且,我想我再也不會聽到關於它的進展信息了 —— 對它我沒有什麼印象。
大約 10 年前,我接受一個小的網絡附加存儲(NAS)公司的請求,幫助設計並實現面向新事務、日志文件系統(而非 ZFS)。我們開始從事這方面的工作,但是大量的 OEM 交易隨之而來,為了將最終成為 StorageTek 5320 NAS 實現生產化,文件系統被擱置在一邊。在這一過程中要全盤考慮許多事情,但主要問題之一是缺乏綜合的 CIFS 服務。開發團隊中沒有人精通 Windows 或 CIFS,因此我承擔了此項重任,沒有多久我就意識到我不得不轉到 DCE 中直接運行。CIFS 已經有所發展:MSRPC 從本質上是 DCE RPC,且 Active Directory 建立在 LDAP 和 Kerberos 的基礎上。哇,太棒了!
10 年了......
許多人會假設或者想要 Solaris CIFS 服務器項目像 Samba 那樣,但那樣會是什麼結果呢?誠然,要避免對 Solaris 做重大改動,但是目前 Samba 在 Solaris 上仍可用。創建另一個 Samba 沒有太多意義。如果您真想要一個可以在基礎層與 Windows 真正互操作的集成 CIFS 實現,操作系統必須支持一定核心功能。那麼就不得不對 Solaris 做重大改動。
這並不奇怪,最有爭議的話題似乎是將大小寫不敏感性引入 Solaris 文件系統內的可能性。導致反反復復討論的許多問題是十分討厭的事情而且也很是令人分心,因為這不是我真正關心的事情。大小寫不敏感性對於與 Windows 的透明互操作性很重要,因為它能確保文件名稱由使用完全不同的字符編碼體系的應用程序和協議所共享,但是對於解決方案不危及 POSIX 的一致性,我會將解決方案實現可視化。我真正關心的是,假設 UNIX 和 Windows 憑證不匹配,在文件系統內如何支持集成文件訪問控制。不惟一 UID 和 GID 的想法在 UNIX 內是非常盛行,以至於我不能確信有可能影響對獲得 CIFS 集成進行修改的水平。CIFS 訪問控制依賴於訪問標記(Windows 憑證)和安全描述符,其中用戶和用戶組由惟一的、長度可變的安全標識符 (SID)表示。NFSv4 和 ZFS 通過 NFSv4 訪問控制列表(Access Control List,ACL)提供部分兼容性,但是這些 ACL 和 Solaris 憑證在大小固定且在 NIS 域之間惟一的 UID 和 GID 上仍可找到。
Afshin(CIFS 項目團隊的高級成員)和我花了大量時間進行討論並做出結論,我們不能設法回避證書問題。結果,在 2006 年 12 月 — 也就是我提交 CIFS Service 項目建議書(PSARC case 2006/715)的當月,Afshin 撰寫並分發了題為“CIFS/NFSv4 統一授權” 的白皮書,文中提出針對 CIFS、NFSv4、局部用戶和 ZFS 建立統一訪問控制模型的建議,並引入了現在在 ZFS 中使用的 FUID 概念。該文章引發了相當廣泛的討論,但困難尚未克服;如何將如此巨大變動變為現實?
我們繼續在其他方面展開研究,其他方面沒有不足之處,但是很難看到通往勝利的曙光,直到 2007 年 2 月,當與 Jeff Bonwick 和 Mike Shapiro 一起喝咖啡時的一次偶然討論,Sun 公司的這兩名傑出工程師(在此不必介紹) 改變了 CIFS 項目的未來。他們問及項目的進展情況,我向他說明想要改動的數量。經過簡短的討論和白板辯論後我們達成一致意見,Mike 說本周要閱讀一下相關資料然後寫出一些東西。該詳細描寫內容成為 PSARC case 2007/064(用於 Solaris 的統一 POSIX 和 Windows 憑證),我們的 Solaris CIFS 服務開始有所進展。
我們已經具備了在 Solaris 上構建基本的 CIFS 服務,但是這還需要多花 8 個月,22 個 ARC 案例以及大量人手幫助和許多天來提交項目。2007 年 10 月 25 日,CIFS 服務項目將 800 多個文件、大約 370,000 行代碼 (包括 180,000 行新代碼)放回到 Solaris 操作系統。
這是一個龐大而又復雜的項目(包括最後一年緊鑼密鼓工作在內的幾年研制),它將一些根本性的更改融合到 Solaris。
這就是 CIFS 的真實情況、為什麼向 Solaris 添加支持以及我們做了哪些更改?
通用網際文件系統(CIFS),也稱作服務器信息塊(SMB),是用於 Windows 文件共享服務的標准,對於 Solaris 而言,基本目標之一是繼續提高和增強其作為存儲操作系統和平台的作用。通過添加 CIFS,對於 CIFS (Windows、MacOS 等)客戶機和 NFS,提供無縫、廣為應用的共享文件是實現該目標的主要步驟。與同樣是 OpenSolaris 項目的 CIFS 客戶機結合使用,CIFS 服務器幫助在 Solaris 上提供綜合、集成的本機 Windows 互操作性。
在 Solaris 上 Samba 意味著什麼呢 ?實際上不多。Samba 是一個良好的多平台應用服務,為 Windows 和 CIFS 客戶機提供文件和打印服務。它是一個可移植的用戶空間應用程序,並在 Solaris 上受到積極支持。Solaris CIFS 服務是本機的內核實現;也是 Solaris 操作系統的一級用戶,已經與 NFS、ZFS 和許多操作系統功能增強進行集成以便提供無縫、廣為應用的跨協議文件共享。
目前存在一個普遍的錯誤概念,即 Windows 的互操作性僅僅是使用 CIFS 協議實現文件傳輸的一種情況。不幸的是,那種理解並不深入。Windows 的互操作性也要求服務器支持各種 Windows 服務,通常是 MSRPC 服務,並且它對服務行為方式很敏感:Windows 的互操作性要求使 CIFS 服務器確保是 Windows 客戶機或“是 Windows”的服務器。如果操作系統在基礎層支持那些服務,上述情況才真正有可能。
除了 CIFS/SMB 和 MSRPC 協議和服務之外:
我們向 Solaris 憑證添加對 SID 的支持。這一做法解決了集中訪問控制問題:CIFS 可以根據 SID 指定用戶,並且 ZFS 可以使用該信息執行本機文件系統訪問控制。
目前存在各種各樣支持新屬性、共享預留空間和強制鎖定的 VFS 更新和增強。隨著憑證的更改,這也是影響在 Solaris 中每個文件系統接口的重要作用力。
ZFS 增強包括:
對 DOS 屬性(歸檔、隱藏、只讀和系統)的支持
大小寫不敏感文件名稱操作。
存在三種模式:區分大小寫模式、大小寫不敏感模式和混合模式
通過選項對廣為應用的的跨協議文件共享加以支持以便確保僅采用 UTF-8 進行名稱編碼。
原子 ACL-on-create 語義。
增強的 ACL 對 Windows 兼容性的支持
類似於 sharenfs 的 sharesmb。
我們項目的目標之一是最大限度減少引入新命令的數量。為此,被用於管理 NFS 共享和 NFS 配置的 sharemgr(1M) 和 sharectl(1M) 已經得到進一步增強從而支持 CIFS。Sharemgr 現在支持指定的共享資源且目錄可以被多次共享。Sharectl 已經得到進一步增強以便支持 CIFS 配置。
各種文件系統實用程序已經或正在被更新以便支持新屬性和功能:chmod、(un)compress、cp、cpio、ls、(un)pack、pax 和 tar。絕大多數文件系統命令已經得到修改以便適應所做的更改。pax 和 cpio 命令尚未進行修改並將簡單地忽略新屬性。
已經引入一項與 sys_nfs 類似的新權限 sys_smb,來限制對 NetBIOS 和 SMB 端口的訪問。sys_smb 權限要求對端口 137、138、139 和/ 或 445 進行綁定。因為這些端口作為根運行 Samba,使得這些端口之間沒有什麼差別。否則,將需要對進程權限設置使用 ppriv 進行修改,以便運行帶有 sys_smb 權限的進程。privileges(5) 手冊頁被更新以便包括 PRIV_SYS_SMB。
Solaris CIFS 服務的初始集成支持工作組和域模式,並提供綜合的 CIFS 文件共享服務實現。對於 CIFS 互操作性的最高水平,以混合的區分大小寫模式使用 ZFS。這將保留對本地和 NFS 訪問的預期行為,同時最大限度增加與 Windows、MacOS 和其他 CIFS 客戶機的互操作性。請注意,必須在ZFS 文件系統創建時設置區分大小寫模式,在創建後不得修改該模式。
盡管項目尚未完成,但這是一段漫長而又有趣的旅程。在從事 CIFS 的研究時使用“有趣”一詞當然是不錯的委婉說法 —— 其實質出於幽默。該現行項目正處於進行階段,在我們稍作休息之後還有更多工作要做。
Copyright © Linux教程網 All Rights Reserved