在這個雲端系統中,我們以 NFS(Network File System)作為使用者存放各 種檔案的儲存空間。 cloudhome/user1 及 cloudtmp/user1。由於 CVM 中可能執行使用者自行開發的模
cloudhome/
51
擬引擎及應用程式,基於安全性考量,我們限制 CVM 只能掛載屬於該使用者的 目錄。此安全性考量將於下一個小節說明。
DVM 會掛載兩個根目錄,即 cloudhome 及 cloudtmp。因為一台 DVM 中會 執行多個 Dispatcher 分別負責不同模擬工作,這些模擬工作可能分屬不同使用者,
使一台 DVM 可能處理多個使用者的模擬工作。DVM 需掛載 NFS 目錄結構中的 根目錄,才能存取各使用者的模擬設定檔。由於 Dispatcher 是我們雲端系統中的 軟體元件,不像 CVM 有安全性問題,因此不須像 CVM 限制只能掛載使用者的 目錄。
Dispatcher 產生模擬子工作時,會在上述使用者的暫存目錄下建立子工作的 目錄,並將模擬設定檔放在子工作的目錄中。模擬引擎執行於 CVM,可存取子 工作的目錄,從中讀取模擬設定檔以及寫入模擬結果檔。
我們將使用者儲存於雲端系統的檔案類型分為:模擬結果檔、模擬引擎執行 檔、應用程式執行檔以及 coredump。這些檔案會分別存在使用者家目錄中的不 同子目錄,資料庫中也會記錄這些檔案的相關資訊。
4.4.1 檔案權限控管 檔案權限控管 檔案權限控管 檔案權限控管
EstiNet 網路模擬器執行模擬引擎時需要 root 身分的權限,因此我們在雲端 系統的虛擬機器中都是以 root 身分執行模擬引擎。由於使用者可自行開發模擬 引擎並上傳至雲端系統中使用,這代表使用者的模擬引擎可以虛擬機器的 root 身分執行。由於使用者上傳的是執行檔,目前我們沒有相關機制可判斷一個執行 檔是否為模擬引擎,此表示使用者可以虛擬機器的 root 權限執行任意程式,相 當於使用者擁有虛擬機器的 root 權限。
在網路模擬雲端系統中有許多安全性議題,我們較在乎的是模擬結果檔,因 此在安全性上以保護使用者的模擬結果為優先。我們希望避免惡意使用者透過其 上傳的執行檔存取、修改或刪除他人的模擬結果。
52 10.10.10.101、10.10.10.102、10.10.10.103,此時 NFS 需將使用者 A 的目錄分享 給前述三個 IP Address。當使用者 A 的第一個模擬工作結束時,NFS 需取消這三 個 IP Address 對於使用者 A 目錄的分享。如果使用者 A 再進行下一個模擬工作,
使用 IP Address 分別為 10.10.10.105、10.10.10.110 的 CVM,NFS 又需再設置相 應的目錄分享。
NFS 在目錄分享上一般是手動寫入設定檔再做分享(export),但由於有上 述 IP Address 與分享目錄對應的變動,我們希望 NFS 能動態分享目錄給虛擬機 器。因此我們撰寫 NFS Exporter,負責動態分享目錄給虛擬機器。
Manager 在啟動 DVM 時,會要求 NFS Exporter 將兩種目錄的根目錄分享給 新開啟的 DVM。Manager 在分配模擬工作時要求 NFS Exporter 將使用者的兩個 目錄分享給分配的 CVM。Coordinator 啟動後先由 Manager 告知其負責工作屬於 哪個使用者,Coordinator 再掛載 NFS 相應的資料夾。模擬工作完成時,Manager 會要求 NFS Exporter 移除對完成工作的 CVM 的分享。
實作上,我們在 Worker 上架設 NFS,並於 Worker 中執行 NFS Exporter。NFS Exporter 會接收 Manager 的命令,在/etc/exports 加入或刪除目錄分享設定,執行 exportfs 重新分享目錄。
NFS Exporter 設定的 IP Address 是由 Manager 告知,而 Manager 是由與 Coordinator 的連線取得 CVM 的 IP Address。如架構中所述,由於執行 Manager
53
的 Worker 位於內層網路之外,Manager 會得到的 IP 為 CVM 的 Floating IP Address,
所以 NFS 在 IP Address 的設置上是使用虛擬機器的 Floating IP Address。
4.4.2 空間配額 空間配額 空間配額 空間配額
由於使用者在雲端系統中會使用儲存空間,我們不希望使用者毫無限制的使 用雲端系統的儲存空間,我們希望能記錄使用者儲存空間的使用量及控管空間配 額。
原先我們希望以 Linux 本身具有之空間配額(quota)管理功能控管使用者 的空間配額。但此方式需使用 NFS 分享目錄時需針對不同 CVM 做帳號身分的 轉換,並整合存於資料庫中的使用者帳號資訊與 Worker 本身的 Linux 帳號。由 於此整合可能需以 LDAP(Lightweight Directory Access Protocol)進行,但整合 資料庫中的帳號資料與 Linux 系統的帳號目前在此雲端系統中只有空間配額的 功用。在整合的效用與複雜度的評估下,我們認為以 LDAP 做此整合的整體效 益不大,因此以另外的方式控管空間配額及空間使用量。
此雲端系統並非直接開放使用者存取儲存空間,任何與檔案有關的操作皆須 透過 GUI,且與檔案有關的操作皆以我們的軟體元件進行。因此,我們可在與檔 案操作的動作中加入空間使用量計算及檢查是否超過配額。
與檔案操作有關的動作有:
1 完成模擬,將結果檔移至使用者家目錄
2 使用者刪除模擬工作、刪除模擬結果
3 上傳及刪除模擬引擎或應用程式
4 模擬引擎異常結束、產生 coredump
5 刪除 coredump
54
我們將空間配額及空間使用量記錄於資料庫。以上與檔案有關的動作分別在 File Manager 及 Dispatcher,我們在這些動作的前後加入空間使用量的計算並更 新資料庫。在使用者傳送模擬工作、上傳模擬引擎及應用程式時檢查使用者剩餘 的空間是否足夠,不足則不讓使用者進行這些動作。在產生模擬結果、coredump 時則不會檢查空間是否足夠,避免因空間限制造成使用者的模擬結果或錯誤資訊 遺失,但仍會計算使用量。若因這些檔案造成使用者使用超過配額的空間,之後 他需刪除檔案、騰出空間才可再次傳送模擬工作。
在 NFS 目錄結構中,每位使用者有一家目錄及暫存目錄。做此設計的原是 避免受到 Linux 空間配額的限制而使模擬過程中無法再寫入檔案,因為在模擬過 程中可能產生較大的模擬結果檔,如封包紀錄檔。雖然系統最終未使用 Linux 的 空間配額管理,但經過打包及壓縮可減少結果檔的整體大小,這可使同樣的硬碟 空間能容納更多使用者的結果檔案,且 Dispatcher 於模擬結束時進行打包及壓縮 亦可較簡易的計算檔案大小及空間使用量,因此我們仍保留此項設計。