宿主機與虛擬機文件系統(tǒng)隔離方法和裝置制造方法
【專利摘要】本發(fā)明提供了一種宿主機與虛擬機文件系統(tǒng)隔離方法和裝置,宿主機采用fuse機制虛擬一個虛擬proc文件系統(tǒng),將所述虛擬proc文件系統(tǒng)掛載到臨時目錄中;宿主機在所述虛擬proc文件系統(tǒng)注冊目標指定文件的回調(diào)函數(shù);宿主機將proc文件系統(tǒng)掛載到虛擬機的rootfs中;宿主機將所述虛擬proc文件系統(tǒng)中的目標指定文件與所述proc文件系統(tǒng)中的源指定文件綁定;宿主機調(diào)用open指令打開所述源指定文件,Linux系統(tǒng)中,宿主機所打開使用的源指定文件,虛擬機不能進行刪除和卸載,虛擬機無法執(zhí)行umount解除所述目標指定文件與的源指定文件的綁定,實現(xiàn)了對宿主機的proc系統(tǒng)文件的有效隔離。
【專利說明】宿主機與虛擬機文件系統(tǒng)隔離方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機【技術(shù)領(lǐng)域】,特別是涉及宿主機與虛擬機文件系統(tǒng)隔離方法和裝置。
【背景技術(shù)】
[0002]Linux container (lxc)中運行虛擬機時,將宿主機的proc文件系統(tǒng)直接掛載到虛擬機的根文件系統(tǒng)中。虛擬機與宿主機使用同一個proc文件系統(tǒng),proc文件系統(tǒng)中與宿主機與虛擬機對應的文件,除進程文件外,其他的文件都完全相同,并且,虛擬機與宿主機對proc文件系統(tǒng)中的所有文件的權(quán)限相同。因此,虛擬機可以對proc文件系統(tǒng)進行讀寫操作,會造成宿主機信息泄露或內(nèi)核崩潰等問題。例如,在虛擬機中使用top命令查看/proc/stat文件時,不僅可以查看虛擬機CPU的使用情況,也可以查看到宿主機的CPU使用情況;在虛擬機中向/proc/sysrq-1rq文件中寫入字符c時,會使導致宿主機的內(nèi)核崩潰,整個系統(tǒng)無法運行。
[0003]為了解決宿主機中信息泄露的問題,虛擬機將宿主機的proc文件系統(tǒng)掛載到臨時目錄下,例如:tmp/proc,再由虛擬機使用fuse機制虛擬一個虛擬proc文件系統(tǒng),執(zhí)行mount-bind/tmp/proc/proc,使用虛擬proc文件系統(tǒng)替換宿主機proc文件系統(tǒng)。當虛擬機執(zhí)行top命令時,讀取proc文件中的tmp/proc/stat文件時,由于proc文件與虛擬proc文件綁定,因此,讀取的是fuse機制虛擬出的proc文件系統(tǒng)。但是,采用fuse機制虛擬一個虛擬proc文件,以及用虛擬proc文件系統(tǒng)替換宿主機proc文件系統(tǒng)的命令需要在虛擬機的啟動腳本中執(zhí)行,而虛擬機的啟動腳本可以被虛擬機的用戶查看,用戶可以對虛擬文件系統(tǒng)實行反向操作(例如:mount-bind的反向操作為umount),即可解除宿主機proc文件系統(tǒng)與虛擬proc文件系統(tǒng)的綁定,解除后再使用top命令仍可以獲取宿主機的信息,安全性差。
[0004]為了解決宿主機內(nèi)核崩潰的問題,采用Linux系統(tǒng)中的Application Armor模塊,Application Armor模塊是Linux系統(tǒng)內(nèi)核中的一個安全模塊,可以將每個程序與一個安全配置文件關(guān)聯(lián),從而限制程序的功能。可以通過Application Armor模塊限制虛擬機對/proc/sysrq-1rq文件的操作權(quán)限,使得虛擬機無法對/proc/sysrq-1rq文件進行寫操作。但是,Application Armor模塊只能在Linux2.6.36以后的版本中才能使用,現(xiàn)有主流的Linux2.6.32版本中無法使用。
[0005]可見,上述兩種方式都不能很好的實現(xiàn)宿主機與虛擬機之間的有效隔離。
【發(fā)明內(nèi)容】
[0006]有鑒于此,本發(fā)明提供了一種宿主機與虛擬機文件系統(tǒng)隔離方法和裝置,宿主機虛擬一個虛擬proc文件系統(tǒng),將虛擬proc文件系統(tǒng)中的目標指定文件與虛擬機中掛載的proc文件系統(tǒng)的源指定文件綁定,打開源指定文件,防止對綁定的反向操作,并可以應用于所有版本的Iinux系統(tǒng)中。[0007]—種宿主機與虛擬機文件系統(tǒng)隔離方法,所述方法包括:
[0008]宿主機采用fuse機制虛擬一個虛擬proc文件系統(tǒng),將所述虛擬proc文件系統(tǒng)掛載到臨時目錄中;
[0009]宿主機在所述虛擬proc文件系統(tǒng)注冊目標指定文件的回調(diào)函數(shù),所述回調(diào)函數(shù)用于處理虛擬機的數(shù)據(jù)信息;
[0010]宿主機將proc文件系統(tǒng)掛載到虛擬機的rootfs中;
[0011]宿主機將所述虛擬proc文件系統(tǒng)中的目標指定文件與所述proc文件系統(tǒng)中的源指定文件綁定,所述綁定的目標指定文件與源指定文件的文件名相同;
[0012]宿主機調(diào)用open指令打開所述源指定文件。
[0013]可選的,所述目標指定文件包括:
[0014]目標stat文件、目標meminfo文件和目標sysrq-1rq文件。
[0015]可選的,所述宿主機在所述虛擬proc文件系統(tǒng)注冊目標指定文件的回調(diào)函數(shù)包括:
[0016]所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標stat文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入虛擬機的CPU使用數(shù)據(jù);
[0017]所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標meminfo文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入虛擬機內(nèi)存以及交換分區(qū)的使用數(shù)據(jù);
[0018]所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標sysrq-1rq文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入目標sysrq-1rq文件的數(shù)據(jù)。
[0019]可選的,宿主機將所述虛擬proc文件系統(tǒng)中的目標指定文件與所述proc文件系統(tǒng)中的源指定文件綁定包括:
[0020]宿主機將所述虛擬proc文件系統(tǒng)中的目標stat文件與所述proc文件系統(tǒng)中的源Stat文件綁定;
[0021]宿主機將所述虛擬proc文件系統(tǒng)中的目標meminfo文件與所述proc文件系統(tǒng)中的源meminfo文件綁定;
[0022]宿主機將所述虛擬proc文件系統(tǒng)中的目標sysrq-1rq文件與所述proc文件系統(tǒng)中的源sysrq-1rq文件綁定。
[0023]可選的,所述方法還包括:
[0024]當訪問虛擬機的roofs中掛載的proc文件系統(tǒng)中的源指定文件時,宿主機接收訪問與源指定文件綁定的目標指定文件的請求;
[0025]宿主機調(diào)用所述目標指定文件注冊的回調(diào)函數(shù);
[0026]宿主機利用所述回調(diào)函數(shù)返回訪問結(jié)果。
[0027]可選的,所述源指定文件為源stat文件或源meminfo文件時:
[0028]當讀取虛擬機的roofs中掛載的proc文件系統(tǒng)中的源stat文件或源meminfo文件時,宿主機接收讀取與源stat文件綁定的目標stat文件或與源meminfo文件綁定的目標meminfo文件的請求;
[0029]宿主機調(diào)用所述目標stat文件或目標meminfo文件注冊的read回調(diào)函數(shù);[0030]宿主機利用所述read回調(diào)函數(shù)返回讀取目標stat文件或目標meminfo文件的結(jié)
果O
[0031]可選的,所述源指定文件為源sysrq-1rq文件時;
[0032]當向虛擬機roofs中掛載的proc文件系統(tǒng)中的源sysrq-1rq文件寫入時,宿主機接收寫入與源sysrq-1rq文件綁定的目標sysrq-1rq文件的請求,
[0033]宿主機調(diào)用所述目標sysrq-1rq文件注冊的write回調(diào)函數(shù);
[0034]宿主機利用所述write回調(diào)函數(shù)向目標sysrq-1rq文件寫入數(shù)據(jù)。
[0035]一種宿主機與虛擬機文件系統(tǒng)隔離裝置,所述裝置包括:
[0036]虛擬模塊,用于宿主機采用fuse機制虛擬一個虛擬proc文件系統(tǒng),將所述虛擬proc文件系統(tǒng)掛載到臨時目錄中;
[0037]注冊模塊,用于宿主機在所述虛擬proc文件系統(tǒng)注冊目標指定文件的回調(diào)函數(shù),所述回調(diào)函數(shù)用于處理虛擬機的數(shù)據(jù)信息;
[0038]掛載模塊,用于宿主機將proc文件系統(tǒng)掛載到虛擬機的rootfs中;
[0039]綁定模塊,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標指定文件與所述proc文件系統(tǒng)中的源指定文件綁定,所述綁定的目標指定文件與源指定文件的文件名相同;
[0040]打開模塊,用于宿主機調(diào)用open指令打開所述源指定文件。
[0041]可選的,所述目標指定文件包括目標Stat文件、目標meminfo文件和目標sysrq-1rq文件,所述注冊模塊包括:
[0042]第一注冊單元,用于所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標stat文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入虛擬機的(PU使用數(shù)據(jù);
[0043]第二注冊單元,用于所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標meminfo文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入虛擬機內(nèi)存以及交換分區(qū)的使用數(shù)據(jù);
[0044]第三注冊單元,用于所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標sysrq-1rq文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入目標sysrq-1rq文件的數(shù)據(jù)。
[0045]可選的,所述目標指定文件包括目標Stat文件、目標meminfo文件和目標sysrq-1rq文件,所述綁定模塊包括:
[0046]第一綁定單元,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標stat文件與所述proc文件系統(tǒng)中的源Stat文件綁定;
[0047]第二綁定單元,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標meminfo文件與所述proc文件系統(tǒng)中的源meminfo文件綁定;
[0048]第三綁定單元,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標sysrq-1rq文件與所述proc文件系統(tǒng)中的源sysrq-1rq文件綁定。
[0049]可選的,所述裝置還包括:
[0050]接收模塊,用于當訪問虛擬機的roofs中掛載的proc文件系統(tǒng)中的源指定文件時,宿主機接收訪問與源指定文件綁定的目標指定文件的請求;
[0051]調(diào)用模塊,用于宿主機調(diào)用所述目標指定文件注冊的回調(diào)函數(shù);[0052]返回模塊,用于宿主機利用所述回調(diào)函數(shù)返回訪問結(jié)果。由上述內(nèi)容可知,本發(fā)明有如下有益效果:
[0053]本發(fā)明提供了一種宿主機與虛擬機文件系統(tǒng)隔離方法和裝置,宿主機采用fuse機制虛擬一個虛擬proc文件系統(tǒng),將所述虛擬proc文件系統(tǒng)掛載到臨時目錄中;宿主機在所述虛擬proc文件系統(tǒng)注冊目標指定文件的回調(diào)函數(shù),所述回調(diào)函數(shù)用于處理虛擬機的數(shù)據(jù)信息;宿主機將proc文件系統(tǒng)掛載到虛擬機的rootfs中;宿主機將所述虛擬proc文件系統(tǒng)中的目標指定文件與所述proc文件系統(tǒng)中的源指定文件綁定,所述綁定的目標指定文件與源指定文件的文件名相同;宿主機調(diào)用open指令打開所述源指定文件,Linux系統(tǒng)中,宿主機所打開使用的源指定文件,虛擬機不能進行刪除和卸載,因此,虛擬機無法執(zhí)行umount解除所述虛擬proc文件系統(tǒng)中的目標指定文件與所述proc文件系統(tǒng)中的源指定文件的綁定,也就無法獲得proc文件系統(tǒng)中的源指定文件,并且,由于本發(fā)明可以應用在所有Iinux系統(tǒng)的版本中,不會受到Iinux版本的限制,實現(xiàn)了對宿主機的proc系統(tǒng)文件的有效隔離。
【專利附圖】
【附圖說明】
[0054]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0055]圖1為本發(fā)明一種宿主機與虛擬機文件系統(tǒng)隔離方法實施例一流程圖;
[0056]圖2為本發(fā)明一種宿主機與虛擬機文件系統(tǒng)隔離方法實施例二流程圖;
[0057]圖3為本發(fā)明一種宿主機與虛擬機文件系統(tǒng)隔離裝置實施例三結(jié)構(gòu)示意圖;
[0058]圖4為本發(fā)明一種宿主機與虛擬機文件系統(tǒng)隔離裝置實施例四結(jié)構(gòu)示意圖。
【具體實施方式】
[0059]本發(fā)明提供了一種宿主機與虛擬機文件系統(tǒng)隔離方法和裝置,宿主機虛擬一個虛擬proc文件系統(tǒng),將虛擬proc文件系統(tǒng)中的目標指定文件與虛擬機中掛載的proc文件系統(tǒng)的源指定文件綁定,打開源指定文件,防止對綁定的反向操作,實現(xiàn)對宿主機proc文件系統(tǒng)的有效隔尚。
[0060]現(xiàn)有技術(shù)中,虛擬機將宿主機的proc文件系統(tǒng)掛載到虛擬機建立的臨時目錄下,例如:tmp/proc,再由虛擬機使用fuse機制虛擬一個虛擬proc文件系統(tǒng),執(zhí)行mount-bind/tmp/proc/proc,使用虛擬proc文件系統(tǒng)替換宿主機proc文件系統(tǒng)。當虛擬機執(zhí)行top命令時,讀取proc文件系統(tǒng)中的tmp/proc/stat文件時,由于proc文件系統(tǒng)中的stat文件與虛擬proc文件系統(tǒng)中的stat文件綁定,因此,讀取的是fuse機制虛擬出的proc文件系統(tǒng)中的stat文件。但是,采用fuse機制虛擬一個虛擬proc文件,以及用虛擬proc文件系統(tǒng)替換宿主機proc文件系統(tǒng)的命令需要在虛擬機的啟動腳本中執(zhí)行,而虛擬機的啟動腳本可以被虛擬機的用戶查看,用戶可以對虛擬文件系統(tǒng)實行反向操作(例如:mount-bind的反向操作為umount),即可解除宿主機proc文件系統(tǒng)與虛擬proc文件系統(tǒng)的綁定。虛擬機可以自行打開和關(guān)閉Stat文件、meminfo文件和sysrq-1rq文件等,可以隨意進行umount的反向解綁定的操作。
[0061]另一方面,若在虛擬機中實現(xiàn)虛擬一個虛擬proc文件系統(tǒng),并且綁定虛擬proc文件系統(tǒng)與虛擬機掛載的proc文件系統(tǒng),需要在虛擬機中掛載cgroup文件系統(tǒng),由于cgroup文件系統(tǒng)可以改寫對虛擬機的資源限制,會導致用戶可以隨意更改虛擬機的操作權(quán)限,對整個系統(tǒng)造成安全隱患。
[0062]再一方面,現(xiàn)有技術(shù)中解決proc文件系統(tǒng)中的sysrq-1rq文件不能寫入的問題,采用的是Application Armor機制,但是不能在所有Iinux版本中使用,在常用的linux2.6.32中使用受限。
[0063]本發(fā)明提供了一種宿主機與虛擬機文件系統(tǒng)隔離方法和裝置,用來解決上述技術(shù)問題,下面結(jié)合附圖對本發(fā)明具體實施例進行詳細說明。
[0064]實施例一
[0065]圖1為本發(fā)明一種宿主機與虛擬機文件系統(tǒng)隔離方法實施例一流程圖,所述方法包括:
[0066]步驟101:宿主機采用fuse機制虛擬一個虛擬proc文件系統(tǒng),將所述虛擬proc文件系統(tǒng)掛載到臨時目錄中。
[0067]用戶空間文件系統(tǒng)(Filesystem in Userspace,簡稱FUSE)是操作系統(tǒng)中的概念,指完全在用戶態(tài)實現(xiàn)的文件系統(tǒng),fuse機制提供可API (Application ProgrammingInterface,應用程序編程接口)用于生成用戶態(tài)文件系統(tǒng)。
[0068]fuse會派生一個進程用于處理應用程序訪問所生成的用戶態(tài)文件系統(tǒng),還提供了應用程序編程接口,將第一目錄下文件系統(tǒng)掛載到第二目錄下,可以從第二目錄訪問第一目錄下的文件系統(tǒng),采用下面兩種訪問形式:
[0069]鏡像(mirror)方式:對于文件系統(tǒng)中涉及一般數(shù)據(jù)的文件,可以從第二目錄直接訪問第一目錄下文件;
[0070]代理(proxy)方式:對于文件系統(tǒng)中涉及安全數(shù)據(jù)的文件,可以對第一目錄下的指定文件設(shè)置訪問限制,采用隔離系統(tǒng)中的文件替換指定文件,對指定文件進行隔離訪問。
[0071]在Iinux系統(tǒng)下,宿主機采用fuse機制虛擬一個與宿主機的proc文件系統(tǒng)相同的虛擬proc文件系統(tǒng),并建立一個臨時目錄,將虛擬proc文件系統(tǒng)掛載到宿主機所建立的臨時目錄中,以便對虛擬proc文件進行訪問。
[0072]步驟102:宿主機在所述虛擬proc文件系統(tǒng)注冊目標指定文件的回調(diào)函數(shù),所述回調(diào)函數(shù)用于處理虛擬機的數(shù)據(jù)信息。
[0073]宿主機可以對虛擬出來的proc文件系統(tǒng)中的文件進行訪問限制的設(shè)置,重新注冊目標指定文件的回調(diào)函數(shù)。
[0074]其中,目標指定文件包括目標stat文件、目標meminfo文件和目標sysrq-1rq文件。這里需要說明的是,目標指定文件指的是虛擬proc文件系統(tǒng)中的stat文件、meminfo文件和sysrq-1rq文件,但不僅限于上述三種文件,凡是涉及宿主機安全數(shù)據(jù)的文件,都可以在虛擬proc文件系統(tǒng)中重新注冊回調(diào)函數(shù),這里不再一一贅述。
[0075]分別設(shè)置目標stat文件、目標meminfo文件和目標sysrq-1rq文件的open、read以及write三種回調(diào)函數(shù)。設(shè)置的open、read定義了只能打開和讀取虛擬機的CPU使用率數(shù)據(jù)和虛擬機內(nèi)存以及交換分區(qū)的使用數(shù)據(jù),無法獲得宿主機的數(shù)據(jù)信息。Write回調(diào)函數(shù)定義了在向sysrq-1rq文件寫入時,只能寫入虛擬proc文件系統(tǒng)中的目標sysrq-1rq文件,不能寫入宿主機的proc文件系統(tǒng)中的源sysrq-1rq文件。
[0076]對宿主機虛擬出的虛擬proc文件系統(tǒng)中的目標指定文件重新注冊了回調(diào)函數(shù),回調(diào)函數(shù)重新定義了虛擬proc文件系統(tǒng)中的目標指定文件的訪問方式以及存儲數(shù)據(jù)內(nèi)容。
[0077]步驟103:宿主機將proc文件系統(tǒng)掛載到虛擬機的rootfs中。
[0078]步驟104:宿主機將所述虛擬proc文件系統(tǒng)中的目標指定文件與所述proc文件系統(tǒng)中的源指定文件綁定,所述綁定的目標指定文件與源指定文件的文件名相同。
[0079]虛擬機的rootfs中掛載了虛擬機的proc文件系統(tǒng),宿主機將虛擬機掛載的proc文件系統(tǒng)中的源指定文件與宿主機虛擬的虛擬proc文件系統(tǒng)中的目標指定文件進行綁定。其中,互相綁定的文件名相同。例如:將虛擬proc文件系統(tǒng)中的目標stat文件與proc文件系統(tǒng)中的源stat文件綁定;將虛擬proc文件系統(tǒng)中的目標meminfo文件與proc文件系統(tǒng)中的源meminfo文件綁定;將虛擬proc文件系統(tǒng)中的目標sysrq-1rq文件與proc文件系統(tǒng)中的源sysrq-1rq文件綁定。
[0080]這里需要說明的是,“目標”和“源”主要為了區(qū)分不同proc文件系統(tǒng)中的文件,實際使用過程中,在虛擬proc文件系統(tǒng)以及proc文件系統(tǒng)中,stat文件、meminfo文件以及sysrq-1rq文件的文件名相同。
[0081]例如:宿主機虛擬proc文件系統(tǒng)中的目標指定文件與虛擬機掛載的proc文件系統(tǒng)中的源指定文件綁定后,在虛擬機中執(zhí)行top命令查看proc文件系統(tǒng)中的源Stat文件時,由于源stat文件與宿主機中的目標stat文件綁定,即執(zhí)行查看目標stat文件。步驟102重新定義了目標stat文件的回調(diào)函數(shù),當目標stat文件被查看時,調(diào)用注冊的回調(diào)函數(shù),只獲取虛擬機的CPU使用數(shù)據(jù),不能獲取宿主機的CPU使用數(shù)據(jù),將虛擬機的CPU使用數(shù)據(jù)返回。
[0082]步驟105:宿主機調(diào)用open指令打開所述源指定文件。
[0083]宿主機打開使用了虛擬機掛載的proc文件系統(tǒng)中的源指定文件,由于虛擬機無法控制宿主機的操作,無法關(guān)閉宿主機打開的源指定文件。Linux系統(tǒng)規(guī)定,不能卸載和刪除打開使用了的文件。但是,如果從虛擬機對虛擬proc文件系統(tǒng)的目標指定文件于掛載的proc文件系統(tǒng)的源指定文件的綁定進行反向操作時,必須刪除虛擬proc文件系統(tǒng)的目標指定文件和proc文件系統(tǒng)的源指定文件。因此,虛擬機無法進行解除綁定的操作,實現(xiàn)了對宿主機proc文件系統(tǒng)的有效隔離。
[0084]由上述內(nèi)容可知,本發(fā)明有如下有益效果:
[0085]宿主機采用fuse機制虛擬一個虛擬proc文件系統(tǒng),將所述虛擬proc文件系統(tǒng)掛載到臨時目錄中;宿主機在所述虛擬proc文件系統(tǒng)注冊目標指定文件的回調(diào)函數(shù),所述回調(diào)函數(shù)用于處理虛擬機的數(shù)據(jù)信息;宿主機將proc文件系統(tǒng)掛載到虛擬機的rootfs中;宿主機將所述虛擬proc文件系統(tǒng)中的目標指定文件與所述proc文件系統(tǒng)中的源指定文件綁定,所述綁定的目標指定文件與源指定文件的文件名相同;宿主機調(diào)用open指令打開所述源指定文件,Linux系統(tǒng)中,宿主機所打開使用的源指定文件,虛擬機不能進行刪除和卸載,因此,虛擬機無法執(zhí)行umount解除所述虛擬proc文件系統(tǒng)中的目標指定文件與所述proc文件系統(tǒng)中的源指定文件的綁定,也就無法獲得proc文件系統(tǒng)中的源指定文件,并且,由于本發(fā)明可以應用在所有Iinux系統(tǒng)的版本中,不會受到Iinux版本的限制,實現(xiàn)了對宿主機的proc系統(tǒng)文件的有效隔離。
[0086]實施例二
[0087]圖2為本發(fā)明一種宿主機與虛擬機文件系統(tǒng)隔離方法實施例二流程圖,與實施例一相比,所述方法還包括虛擬機執(zhí)行文件訪問請求,所述方法包括:
[0088]步驟201:宿主機采用fuse機制虛擬一個虛擬proc文件系統(tǒng),將所述虛擬proc文件系統(tǒng)掛載到臨時目錄中。
[0089]步驟202:宿主機在所述虛擬proc文件系統(tǒng)注冊目標指定文件的回調(diào)函數(shù),所述回調(diào)函數(shù)用于處理虛擬機的數(shù)據(jù)信息。
[0090]步驟203:宿主機將proc文件系統(tǒng)掛載到虛擬機的rootfs中。
[0091]步驟204:宿主機將所述虛擬proc文件系統(tǒng)中的目標指定文件與所述proc文件系統(tǒng)中的源指定文件綁定,所述綁定的目標指定文件與源指定文件的文件名相同。
[0092]步驟205:宿主機調(diào)用open指令打開所述源指定文件。
[0093]步驟201至步驟205與實施例一類似,參考實施例一的描述,這里不再贅述。
[0094]步驟206:當訪問虛擬機的roofs中掛載的proc文件系統(tǒng)中的源指定文件時,宿主機接收訪問與源指定文件綁定的目標指定文件的請求。
[0095]在虛擬機中使用top命令可以查看虛擬機當前系統(tǒng)中CPU的使用情況,使用free命令可以查看虛擬機當前系統(tǒng)中內(nèi)存以及交換分區(qū)使用情況。
[0096]虛擬機接收到top命令時,訪問虛擬機中掛載的proc文件系統(tǒng)中的源stat文件,由于源stat文件與宿主機的虛擬proc文件系統(tǒng)中的目標stat文件綁定,則宿主機接收到訪問目標stat文件的請求。
[0097]虛擬機接收到free命令時,訪問虛擬機中掛載的proc文件系統(tǒng)中的源meminfo文件,由于源meminfo文件與宿主機的虛擬proc文件系統(tǒng)中的目標meminfo文件綁定,則宿主機接收到訪問目標meminfo文件的請求。
[0098]虛擬機接收到寫入sysrq-1rq文件的請求時,訪問虛擬機中掛載的proc文件系統(tǒng)中的源sysrq-1rq文件,由于源sysrq-1rq文件與宿主機的虛擬proc文件系統(tǒng)中的目標sysrq-1rq文件綁定,則宿主機接收到寫入目標sysrq-1rq文件的請求。
[0099]步驟207:宿主機調(diào)用所述目標指定文件注冊的回調(diào)函數(shù)。
[0100]宿主機在步驟201重新注冊了虛擬proc文件系統(tǒng)中的目標指定文件的回調(diào)函數(shù),當接收到訪問目標指定文件的請求時,調(diào)用與目標指定文件對應的回調(diào)函數(shù)。
[0101]宿主機接收到訪問虛擬proc文件系統(tǒng)中的目標stat文件時,調(diào)用給目標stat文件注冊的read回調(diào)函數(shù),read回調(diào)函數(shù)規(guī)定只能讀取虛擬機的CPU使用數(shù)據(jù),read回調(diào)函數(shù)只會查找虛擬機CPU使用數(shù)據(jù)。
[0102]宿主機接收到訪問虛擬proc文件系統(tǒng)中的目標meminfo文件時,調(diào)用給目標meminfo文件注冊的read回調(diào)函數(shù),read回調(diào)函數(shù)規(guī)定只能讀取虛擬機的內(nèi)存以及交換分區(qū)使用數(shù)據(jù),read回調(diào)函數(shù)只會查找虛擬機CPU內(nèi)存以及交換分區(qū)使用數(shù)據(jù)。
[0103]宿主機接收到寫入虛擬proc文件系統(tǒng)中的目標sysrq-1rq文件時,調(diào)用給目標sysrq-1rq文件注冊的write回調(diào)函數(shù),write回調(diào)函數(shù)規(guī)定只能向虛擬proc文件系統(tǒng)中的目標sysrq-1rq文件寫入,不能對宿主機的proc文件系統(tǒng)中的源sysrq-1rq文件寫入。[0104]由此可知,當虛擬機中執(zhí)行訪問掛載proc文件系統(tǒng)的命令時,由于掛載proc文件系統(tǒng)中源指定文件與宿主機的虛擬proc文件系統(tǒng)中目標指定文件綁定,實際訪問的是虛擬proc文件系統(tǒng)中的目標指定文件,由于宿主機重新注冊了目標指定文件的回調(diào)函數(shù),回調(diào)函數(shù)規(guī)定不能open、read宿主機proc文件系統(tǒng)中的stat文件、meminfo文件中的數(shù)據(jù)信息,只能訪問虛擬機的數(shù)據(jù)信息;在寫入時,不能寫入宿主機proc文件系統(tǒng)中的sysrq-1rq文件,只能寫入宿主機虛擬出的虛擬proc文件系統(tǒng)中的目標sysrq-1rq文件。由此實現(xiàn)對宿主機proc文件系統(tǒng)的有效隔離。
[0105]步驟208:宿主機利用所述回調(diào)函數(shù)返回訪問結(jié)果。
[0106]宿主機向虛擬機返回訪問結(jié)果,當宿主機接收到的是top命令時,向虛擬機返回虛擬機的CPU使用數(shù)據(jù);當宿主機接收到的是free命令時,向虛擬機返回虛擬機的內(nèi)存以及交換分區(qū)的使用數(shù)據(jù);當宿主機接收到的是write命令時,向虛擬proc文件系統(tǒng)中的目標sysrq-1rq文件寫入,并返回寫入結(jié)果。
[0107]由上述內(nèi)容可知,本發(fā)明還有如下有益效果:
[0108]本發(fā)明實施例二可以根據(jù)實施例一建立的有效隔離系統(tǒng),執(zhí)行top、free以及write等命令,不會造成宿主機信息的泄露,也不會向宿主機proc文件系統(tǒng)中的sysrq-1rq文件寫入數(shù)據(jù),不會造成宿主機內(nèi)核崩潰。
[0109]實施例三
[0110]圖3為本發(fā)明一種宿主機與虛擬機文件系統(tǒng)隔離裝置實施例三結(jié)構(gòu)示意圖,實施例三是與實施例一所述的方法所對應的裝置,所述裝置包括:
[0111]虛擬模塊301,用于宿主機采用fuse機制虛擬一個虛擬proc文件系統(tǒng),將所述虛擬proc文件系統(tǒng)掛載到臨時目錄中。
[0112]注冊模塊302,用于宿主機在所述虛擬proc文件系統(tǒng)注冊目標指定文件的回調(diào)函數(shù),所述回調(diào)函數(shù)用于處理虛擬機的數(shù)據(jù)信息。
[0113]所述注冊模塊302包括:
[0114]第一注冊單元,用于所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標stat文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入虛擬機的(PU使用數(shù)據(jù);
[0115]第二注冊單元,用于所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標meminfo文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入虛擬機內(nèi)存以及交換分區(qū)的使用數(shù)據(jù);
[0116]第三注冊單元,用于所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標sysrq-1rq文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入目標sysrq-1rq文件的數(shù)據(jù)。
[0117]掛載模塊303,用于宿主機將proc文件系統(tǒng)掛載到虛擬機的rootfs中。
[0118]綁定模塊304,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標指定文件與所述proc文件系統(tǒng)中的源指定文件綁定,所述綁定的目標指定文件與源指定文件的文件名相同。
[0119]所述綁定模塊304包括:
[0120]第一綁定單元,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標stat文件與所述proc文件系統(tǒng)中的源Stat文件綁定;
[0121]第二綁定單元,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標meminfo文件與所述proc文件系統(tǒng)中的源meminfo文件綁定;
[0122]第三綁定單元,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標sysrq-1rq文件與所述proc文件系統(tǒng)中的源sysrq-1rq文件綁定。
[0123]打開模塊305,用于宿主機調(diào)用open指令打開所述源指定文件。
[0124]此處與實施例一類似,參考實施例一的描述,這里不再贅述。
[0125]實施例四
[0126]圖4為本發(fā)明一種宿主機與虛擬機文件系統(tǒng)隔離裝置實施例四結(jié)構(gòu)示意圖,實施例四是與實施例二所述的方法所對應的裝置,所述裝置包括:
[0127]虛擬模塊301,用于宿主機采用fuse機制虛擬一個虛擬proc文件系統(tǒng),將所述虛擬proc文件系統(tǒng)掛載到臨時目錄中。
[0128]注冊模塊302,用于宿主機在所述虛擬proc文件系統(tǒng)注冊目標指定文件的回調(diào)函數(shù),所述回調(diào)函數(shù)用于處理虛擬機的數(shù)據(jù)信息。
[0129]所述注冊模塊302包括:
[0130]第一注冊單元,用于所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標stat文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入虛擬機的(PU使用數(shù)據(jù);
[0131 ] 第二注冊單元,用于所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標meminfo文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入虛擬機內(nèi)存以及交換分區(qū)的使用數(shù)據(jù);
[0132]第三注冊單元,用于所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標sysrq-1rq文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入目標sysrq-1rq文件的數(shù)據(jù)。
[0133]掛載模塊303,用于宿主機將proc文件系統(tǒng)掛載到虛擬機的rootfs中。
[0134]綁定模塊304,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標指定文件與所述proc文件系統(tǒng)中的源指定文件綁定,所述綁定的目標指定文件與源指定文件的文件名相同。
[0135]所述綁定模塊304包括:
[0136]第一綁定單元,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標stat文件與所述proc文件系統(tǒng)中的源Stat文件綁定;
[0137]第二綁定單元,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標meminfo文件與所述proc文件系統(tǒng)中的源meminfo文件綁定;
[0138]第三綁定單元,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標sysrq-1rq文件與所述proc文件系統(tǒng)中的源sysrq-1rq文件綁定。
[0139]打開模塊305,用于宿主機調(diào)用open指令打開所述源指定文件。
[0140]接收模塊401,用于當訪問虛擬機的roofs中掛載的proc文件系統(tǒng)中的源指定文件時,宿主機接收訪問與源指定文件綁定的目標指定文件的請求。
[0141]調(diào)用模塊402,用于宿主機調(diào)用所述目標指定文件注冊的回調(diào)函數(shù)。[0142]返回模塊403,用于宿主機利用所述回調(diào)函數(shù)返回訪問結(jié)果。
[0143]當讀取虛擬機的roofs中掛載的proc文件系統(tǒng)中的源stat文件或源meminfo文件時,宿主機接收讀取與源stat文件綁定的目標stat文件或與源meminfo文件綁定的目標meminfo文件的請求;
[0144]宿主機調(diào)用所述目標stat文件或目標meminfo文件注冊的read回調(diào)函數(shù);
[0145]宿主機利用所述read回調(diào)函數(shù)返回讀取目標stat文件或目標meminfo文件的結(jié)
果O
[0146]當向虛擬機roofs中掛載的proc文件系統(tǒng)中的源sysrq-1rq文件寫入時,宿主機接收寫入與源sysrq-1rq文件綁定的目標sysrq-1rq文件的請求,
[0147]宿主機調(diào)用所述目標sysrq-1rq文件注冊的write回調(diào)函數(shù);
[0148]宿主機利用所述write回調(diào)函數(shù)向目標sysrq-1rq文件寫入數(shù)據(jù)。
[0149]以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。
【權(quán)利要求】
1.一種宿主機與虛擬機文件系統(tǒng)隔離方法,其特征在于,所述方法包括: 宿主機采用fuse機制虛擬一個虛擬proc文件系統(tǒng),將所述虛擬proc文件系統(tǒng)掛載到臨時目錄中; 宿主機在所述虛擬proc文件系統(tǒng)注冊目標指定文件的回調(diào)函數(shù),所述回調(diào)函數(shù)用于處理虛擬機的數(shù)據(jù)信息; 宿主機將proc文件系統(tǒng)掛載到虛擬機的rootfs中; 宿主機將所述虛擬proc文件系統(tǒng)中的目標指定文件與所述proc文件系統(tǒng)中的源指定文件綁定,所述綁定的目標指定文件與源指定文件的文件名相同; 宿主機調(diào)用open指令打開所述源指定文件。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述目標指定文件包括: 目標stat文件、目標meminfo文件和目標sysrq-1rq文件。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述宿主機在所述虛擬proc文件系統(tǒng)注冊目標指定文件的回調(diào)函數(shù)包括: 所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標stat文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入虛擬機的CPU使用數(shù)據(jù); 所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標meminfo文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入虛擬機內(nèi)存以及交換分區(qū)的使用數(shù)據(jù); 所述宿主機在所述虛擬proc文 件系統(tǒng)中注冊目標sysrq-1rq文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入目標sysrq-1rq文件的數(shù)據(jù)。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,宿主機將所述虛擬proc文件系統(tǒng)中的目標指定文件與所述proc文件系統(tǒng)中的源指定文件綁定包括: 宿主機將所述虛擬proc文件系統(tǒng)中的目標stat文件與所述proc文件系統(tǒng)中的源Stat文件綁定; 宿主機將所述虛擬proc文件系統(tǒng)中的目標meminfo文件與所述proc文件系統(tǒng)中的源meminfo文件綁定; 宿主機將所述虛擬proc文件系統(tǒng)中的目標sysrq-1rq文件與所述proc文件系統(tǒng)中的源sysrq-1rq文件綁定。
5.根據(jù)權(quán)利要求1-4任意一項所述的方法,其特征在于,所述方法還包括: 當訪問虛擬機的roofs中掛載的proc文件系統(tǒng)中的源指定文件時,宿主機接收訪問與源指定文件綁定的目標指定文件的請求; 宿主機調(diào)用所述目標指定文件注冊的回調(diào)函數(shù); 宿主機利用所述回調(diào)函數(shù)返回訪問結(jié)果。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述源指定文件為源stat文件或源meminfo文件時: 當讀取虛擬機的roofs中掛載的proc文件系統(tǒng)中的源stat文件或源meminfo文件時,宿主機接收讀取與源stat文件綁定的目標stat文件或與源meminfo文件綁定的目標meminfo文件的請求;宿主機調(diào)用所述目標stat文件或目標meminfo文件注冊的read回調(diào)函數(shù); 宿主機利用所述read回調(diào)函數(shù)返回讀取目標stat文件或目標meminfo文件的結(jié)果。
7.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述源指定文件為源sysrq-1rq文件時; 當向虛擬機roofs中掛載的proc文件系統(tǒng)中的源sysrq-1rq文件寫入時,宿主機接收寫入與源sysrq-1rq文件綁定的目標sysrq-1rq文件的請求, 宿主機調(diào)用所述目標sysrq-1rq文件注冊的write回調(diào)函數(shù); 宿主機利用所述write回調(diào)函數(shù)向目標sysrq-1rq文件寫入數(shù)據(jù)。
8.一種宿主機與虛擬機文件系統(tǒng)隔離裝置,其特征在于,所述裝置包括: 虛擬模塊,用于宿主機采用fuse機制虛擬一個虛擬proc文件系統(tǒng),將所述虛擬proc文件系統(tǒng)掛載到臨時目錄中; 注冊模塊,用于宿主機在所述虛擬proc文件系統(tǒng)注冊目標指定文件的回調(diào)函數(shù),所述回調(diào)函數(shù)用于處理虛擬機的數(shù)據(jù)信息; 掛載模塊,用于宿主機將proc文件系統(tǒng)掛載到虛擬機的rootfs中; 綁定模塊,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標指定文件與所述proc文件系統(tǒng)中的源指定文件綁定,所述綁定的目標指定文件與源指定文件的文件名相同; 打開模塊,用于宿主機調(diào)用open指令打開所述源指定文件。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述目標指定文件包括目標Stat文件、目標meminfo文件和目標sysrq-1rq文件,所述注冊模塊包括: 第一注冊單元,用于所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標stat文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入虛擬機的(PU使用數(shù)據(jù); 第二注冊單元,用于所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標meminfo文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入虛擬機內(nèi)存以及交換分區(qū)的使用數(shù)據(jù); 第三注冊單元,用于所述宿主機在所述虛擬proc文件系統(tǒng)中注冊目標sysrq-1rq文件的open、read和write函數(shù),所述open、read和write函數(shù)用于打開、讀取和寫入目標sysrq-1rq文件的數(shù)據(jù)。
10.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述目標指定文件包括目標Stat文件、目標meminfo文件和目標sysrq-1rq文件,所述綁定模塊包括: 第一綁定單元,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標stat文件與所述proc文件系統(tǒng)中的源Stat文件綁定; 第二綁定單元,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標meminfo文件與所述proc文件系統(tǒng)中的源meminfo文件綁定; 第三綁定單元,用于宿主機將所述虛擬proc文件系統(tǒng)中的目標sysrq-1rq文件與所述proc文件系統(tǒng)中的源sysrq-1rq文件綁定。
11.根據(jù)權(quán)利要求8-10任意一項所述的裝置,其特征在于,所述裝置還包括: 接收模塊,用于當訪問虛擬機的roofs中掛載的proc文件系統(tǒng)中的源指定文件時,宿主機接收訪問與源指定文件綁定的目標指定文件的請求; 調(diào)用模塊,用于宿主機調(diào)用所述目標指定文件注冊的回調(diào)函數(shù);返回模塊,用于宿主機利用所·述回調(diào)函數(shù)返回訪問結(jié)果。
【文檔編號】G06F9/455GK103593607SQ201310627409
【公開日】2014年2月19日 申請日期:2013年11月26日 優(yōu)先權(quán)日:2013年11月26日
【發(fā)明者】魏子然 申請人:北京搜狐新媒體信息技術(shù)有限公司