本節書摘來自華章出版社《虛拟化安全解決方案》一書中的第2章,第2.4節,作者[美]戴夫·沙克爾福(dave shackleford),更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視
xenserver的優點是它非常類似linux,對于一些虛拟管理者,這也是缺點,因為它們可能沒有指令行正确管理和配置這些系統。但仍有許多事情使用xencenter是可以完成的,使用者仍需要利用指令行完成許多特定的任務。這裡的另一點是很重要的——xenserver不是标準的linux核心或作業系統。它是充分修改的,以至于應該仔細地考慮運作标準作業系統指令可能産生什麼負面影響。
xenserver的所有更新檔都被稱為hotf?ixes,一個與microsoft更新檔相關的術語。為了示範xenserver與主要linux分發版本(尤其是red hat和centos)之間的一個主要差別,系統的控制台作業系統有一個衆所周知的更新工具yum的拷貝。但是,citrix不建議啟用或使用它,因為它将導緻标準centos包被下載下傳和安裝,這可能與系統的定制包操作沖突。
所有修補程式都由citrix釋出,并加密簽名,當上載到一個管理程式主機的時候,這些簽名要被檢查。修補程式也包含下面的中繼資料元件:
一個獨一無二的修補程式的識别号碼。
一個簡單的評估檢查,它确定修補程式對要安裝的單個主機的可應用性。
當可應用時,安裝後配置和激活的指導。
1.?通過xencenter打更新檔
更新xenserver的第一個方法是通過xencenter。更新過程很簡單,有一個向導引導整個過程。通過xencenter更新,使用者有兩個選擇:軟體更新和滾動池更新。
為了開始标準軟體更新,首先需要擷取修補程式檔案,并中心平台或本地系統存儲它們,然後按照下面的步驟進行:
1)在xencenter中單擊“工具”,然後安裝軟體更新,打開向導。
2)單擊“下一步”,然後單擊“添加”按鈕,添加修補程式檔案。單擊“下一步”,然後選擇你想要更新的伺服器,再次單擊“下一步”。
3)然後進行更新評估檢查,xencenter将通知你任何可能阻止修補程式正确安裝的問
題,例如版本不比對。一個例子如圖2.40所示。

4)在所有問題解決之後,單擊“下一步”繼續。
5)向導的下一階段是更新模式。選擇更新xenserver的選項——自動或手動。
自動模式允許xencenter決定如何遷移虛拟機到其他主機,一旦主機被更新,可以再次将它們遷移回來。
手動模式允許你選擇哪個更新被發送到哪個伺服器,以及何時發送,還有如何和合适遷移在主機上運作的虛拟機到其他主機。
6)單擊“下一步”,然後完成更新過程。
滾動池更新是一個允許在一個池中更新xenserver主機到一個新的xenserver版本的工具。池中運作的服務将在更新程序中仍可用。步驟與基本更新過程非常類似。選擇工具啟動過程,然後是滾動池更新,然後選擇池而不是單個主機。
2.?通過指令行打更新檔
也可以使用指令行更新單個xenserver或完成滾動池更新。
首先需要擷取修補程式檔案,在中心平台或本地系統存儲它們。然後關閉或挂起主機系統上的任何運作的虛拟機。在一個池中,可以将虛拟機遷移到其他池主機,然後按照下面的步驟進行:
1)複制更新檔案到主機,這可以通過使用如下scp指令完成:
是以一個例子也可能是這樣:
4)運作xe更新檔清單指令驗證主機是否接受更新檔。
還有其他可以打更新檔的選擇,但這是開始打更新檔的基礎。一個簡單的腳本可用于自動化從指令行給xenserver打更新檔,按照下面的步驟:
1)首先,使用vi編輯器建立一個名為xenpatch.sh的新檔案,輸入下面的代碼:
2)儲存腳本,退出檔案。現在在指令行輸入下面的指令修改腳本的權限(這樣做的原因是任何使用者都可能運作這個腳本):
與vmware esxi很像,xenserver非常依賴ssl證書與管理控制台群組件進行互動,尤其是xencenter。xenserver的ssl證書與xenapi網絡服務捆綁,它被多數需要通路系統的應用程式調用。
在xenserver主機上驗證ssl指紋是一個好主意,确認正在連接配接的主機是計劃連接配接的主機,有助于防止中間人(mitm)攻擊。
首先,通路xenserver互動控制台,通過ssh登入或在xencenter中選擇一個xenserver主機,在右側面闆中單擊控制台頁面完成。一旦進入指令窗,輸入xsconsole。菜單中的第一個選項,即狀态顯示,将顯示當選擇時的ssl證書指紋(見圖2.41)。當使用者在xencenter中第一次連接配接主機的時候,這個指紋要與呈現的比對。
為了替換主機上預設的ssl證書,完成下面的步驟:
1)在指令行,首先将原始證書檔案改為另一個名稱。如果出錯,可以再次重命名檔案,恢複系統到原始配置,如下面的例子所示:
3)一個可選的配置步驟是在讓openssl證書包含dif?e-hellman參數。這對于某些與伺服器的關鍵交換方法是有用的,但對于多數xenserver互動這不是必需的。要這麼做的話,運作下面的指令:
為了確定xencenter認識任何ssl證書中的反常變化,可以開啟改變ssl修改檢測。為了實作它,登入到xencenter,單擊tools菜單選項,選擇option。看到的第一個菜單項是security。可以檢查兩個配置項:第一個是當任何新ssl證書被檢測到時改變,第二個是當檢測到已知xenserver主機上的ssl證書修改時改變。這些設定如圖2.42所示。
有許多可以實作的xenserver變更,它們都遵守linux強化最佳實踐。本書不是建立另一個linux強化指南,而是将列出一些更加基本的配置步驟。這些步驟已經在xenserver最近的版本上測試過了。并且可以與其他強化步驟一起無限制地在red hat企業版和centos作業系統上測試,但是需要先檢測确認xenserver能與它們一起正常工作。專注于linux強化指南的好例子可以在網際網路安全中心找到:
1.?限制運作的服務
許多服務運作在預設xenserver的安裝版本上。為了确定哪個服務在運作,可以執行下面的指令:
在預設安裝上,應該看到下面的服務:
這些服務通常是預設需要或有用的,建議保留它們。如果看到其他服務,并确定不需要,可以使用下面的指令容易的關閉它們:
2.?改變啟動行為
xenserver像傳統linux系統一樣,允許使用者重新開機或登入到單一使用者模式。單一使用者模式是一種特殊的指令行模式,它允許對作業系統根權限通路,進行配置和緊急變更。這當然是一種責任!為了獲得根密碼進入單一使用者模式,編輯/etc/inittab檔案,輸入下面一行:
xenserver上另一個引導裝載程式是extlinux裝載程式,它也是有密碼保護的。按照下面的步驟完成這個改變:
1)首先,為裝載程式選擇一個密碼,運作sha1sum指令擷取一個40個字元的哈希碼:
3)保持并退出檔案。
3.?禁用調試模式
調試模式允許使用者和程序潛在的通路xenserver檔案系統的敏感區域,産生和讀取潛在的敏感日志資料。這裡建議以兩種方式禁用調試模式。首先,禁用xenstored程序的調試模式,它允許虛拟機存儲(是以也允許虛拟機)通路調試模式。為了禁用xenstored調試模式,檢查檔案/etc/xensource/xenstored.conf,确認沒有讀取的項目allowdebug=true。預設應該沒有任何這些項,但周期性地檢查是一個好主意。
另一個調試模式通路類型是,當xenserver使用活動目錄和ldap庫時,xapi程序使用的全局目錄調試模式。如禁用全局目錄調試的話,編輯/etc/xapi, conf檔案,找到下面的行:
将true改為false,然後保持并退出檔案。
4.?限制對cron和at的通路
某些使用者可能需要使用cron或at程式功能建立計劃工作和任務。應該對特定管理者使用者限制這些功能,保護運作完整性,限制xenserver主機上的資源消耗。為了限制對這些功能的通路,在xenserver指令行上按照下面的步驟進行:

5.?限制xenserver網絡配置
xenserver核心可以很巧妙地處理各種網絡流量和條件。在/etc/sysctl.conf檔案裡有很多設定可以提供與/或設定。這些設定的多數都意在禁止潛在的惡意資料流。例如,網際網路控制消息協定(internet control message protocol,icmp)流、直接廣播和資源路由包。另一些是過濾和拒絕服務(denial of service dos)減輕工具。
代碼清單2.1顯示了你要找的設定。在這個檔案中0(零)是禁止,1(一)是啟用。如果設定不存在,就建立它們!在添加和修改這些配置之後,運作指令sysctl -p啟用它們(這個清單在本書的網頁www.sybex.com/go/virtualizationsecurity上也有)。
代碼清單2.1 /etc/sysctl.conf檔案的設定
在xenserver上啟用ntp和snmp是相當簡單的,尤其對熟悉linux的管理者來說。它們都可以通過修改關鍵配置檔案來配置并啟動标準服務。
為了添加時鐘服務,使用vi編輯器修改檔案/etc/ntp.conf,在檔案中添加下面的行(預設是有它們的):
這4個ntp伺服器是citrix推薦的,但是應該添加熟悉的時間伺服器,與基礎設施一起使用。為了确認這些變更生效,通過運作下面的指令重新開機時間服務:
這将重新開機ntp背景程式,配置本地ntp服務從配置檔案指定的ntp伺服器擷取時間。
為了檢查xenserver主機ntp的狀态,可以運作ntpq -p指令。這個指令将傳回xenserver主機上ntp同步相關的許多域。
為了啟用和修改snmp服務,首先需要修改本地防火牆來允許到主機snmp資料流。可以按照下面的步驟實作:
1)使用vi編輯器修改檔案/etc/sysconf?ig/iptables。在最後的規則前面的某些地方添加下面的行(最後一行應該是read -a rh-firewall-1-input -j reject --reject-with icmp-host-prohibited):
3)現在,修改snmp配置檔案/etc/snmp/snmpd.conf,這裡可以配置許多設定。預設僅顯示xen管理資訊庫(mib)的系統試圖子樹,這個不用修改,除非有特定的原因允許更多的通路。但是,應該改變預設的社群字元串從公有變為更加安全的事物。在基礎設施監控系統中,将下面幾行修改公用為snmp社群字元串設定來進行設定。
4)在完成任何其他你需要的改變以後,保持檔案設定并關閉它。現在,輸入service snmpd start指令來重新開機snmp服務。
5)為了啟用snmp為一個服務自動啟動,運作下面的指令;
現在應該有在xenserver主機上能運作的ntp和snmp服務了。
在xenserver平台上,許多配置檔案應該被監控。對于esxi和hyper-v來說,監控這些檔案變更和整體完整性的關鍵在于定期在特定時間點對這個檔案進行哈希運算,記錄輸出的值。這些值可以作為以後相同哈希運算的結果比較的基線。如果值變了,那麼檔案就以某種方式改變;如果哈希相同,檔案就沒有改變。
記住更新和更新系統将可能改變許多檔案,是以確定在進行這些操作之後,建立新的基線。
有許多不同的方法來監控linux平台上重要檔案和目錄。簡單來說,下面這些目錄應該在xenserver的實作中被監控:
釋出版有許多内建的哈希工具,這些包括md5sum, sha-1sum, sha256sum, sha512sum。我建議使用sha512sum,因為它是這些雜湊演算法中最安全的一個。下面是一個簡單的腳本,它能用于xenserver指令行定期完成這個任務:
添加下面的代碼行到腳本檔案(名為hashing.sh),用chmod +x修改腳本為可執行,然後建立包含所有之前列出的目錄的文本檔案(以及任何你想監控的事物)。像下面這樣運作腳本:
運作後在目錄/tmp中找到檔案的哈希值,然後可以使用diff函數來将它與這個新檔案比較。可以日常進行這種簡單的檔案完整性監控。
在xenserver上添加、删除和修改本地使用者群組的程序與标準linux程序基本相同。也有許多可應用的基于角色通路控制定義的簡單角色。
1.?改變密碼檔案的格式
遺憾的是,從一開始在xenserver的本地安全配置中就有一個重大缺陷——密碼哈希值存儲在/etc/passwd檔案中,所有使用者都有讀取它的權限!今天在許多linux系統中已經廢棄了,為了支援一個更安全的系統,同時使用/etc/passwd使用者檔案和受限制的/etc/shadow檔案存儲密碼哈希值。可以使用pwconv指令改變這個行為,它将轉換系統去使用/etc/shadow格式。也可以通過編輯/etc/pam.d/system-auth檔案将影子檔案與可插拔驗證子產品相連,參考下面的行:
儲存檔案并退出。
xenserver官方不支援影子密碼的使用,如果将系統轉換為使用/etc/shadow檔案,那麼可能破壞了系統在池内的相容性!在測試實驗室裡面仔細測試,看看配置在生産設定中啟用影子密碼是否仍正常工作。
2.?設定使用者群組
adduser和useradd指令(它們兩個的功能是一樣的)可用于建立一個新的,低優先級的使用者。在下面的例子中,實體regularuser被指定的使用者id是523(任何大于500的未使用數都是可接受的,也可以讓useradd替你産生一個值),使用者組id是200,主目錄是/home/reguser,指令行/bin/bash, reguser的使用者名:
一個額外的可以采取的步驟是確定所有使用者賬戶均有密碼。檢視/etc/passwd或/etc/shadow(如果你使用影子密碼)檔案,确認使用者名後的第一個域有一個哈希值或“!!”辨別,這表示賬戶不能登入。
3.?配置密碼過期和曆史
密碼過期預設設定可在/etc/login.defs檔案中配置,在這個檔案中,有四個可以編輯的設定,建議顯示在表2.3中。
另一個公共密碼安全控制是密碼曆史。這個控制跟蹤一定數目的使用者密碼,阻止使用者一而再再而三的使用相同的密碼。許多人覺得這個控制是有幫助的,如果某人常使用的密碼在某處是缺乏抵抗力的,那麼攻擊者會經常在其他系統嘗試相同的密碼。配置密碼曆史,需要修改/etc/pam.d/system-auth檔案。在檔案中添加下面的行,記住之前的六個密碼,這是筆者建議的最小值:
現在,儲存檔案,退出。使用者将被迫在後面六個密碼周期中使用新密碼。
4.?配置sudoers檔案
sudo的出現對于在xenserver平台上管理本地使用者是一件好事。這是到目前為止最簡單的限制和控制單個使用者和/或組可以進行活動的方式。使用指令visudo編輯/etc/sudoers檔案,能建立指定給使用者的指令别名組——換句話說,就是某些使用者群組可以不需要根權限運作的指令組。對于xenserver平台,可以通過添加下面的行,建立xen admin指令的新指令别名組:
然後可以控制哪個使用者可以通路和運作這些指令。例如,如果你有一個稱為xenadmins的特殊組,你可以添加下面一行到sudoers檔案:
這将授權組通路xenserver管理者的可執行檔案。
5.?使用pam檔案
額外的使用者控制由可插拔驗證子產品(pam)檔案管理,盡管xenserver上的該子產品似乎不像在esxi上或現代linux變體上那樣有完全功能。但是仍可以使用pam限制使用者組通路xenapi組。首先,建立你想要的使用者清單。例如,可以建立名為/etc/localadmins的檔案。每行添加一個使用者名。然後可以編輯pam配置使用pam限制這種通路。對于xenserver,所有必需的政策都在單個檔案/etc/pam.d/system-auth中配置。使用vi編輯這個檔案,進行下面的修改(高亮的行):
現在,需要使用xe指令為主機啟用外部pam驗證:
6.?啟用活動目錄驗證
另一種使用pam限制通路的方法是啟用xenserver活動目錄驗證。這通常是企業環境中驗證的首選模式。
首先,确認xenserver主機上的下面的防火牆端口是打開的,允許與域控制器通信(通過運作iptables -l指令完成):
udp/tcp 53 (dns) udp/tcp 88 (kerberos 5) udp 123 (ntp)
udp 137 (netbios name service)
tcp 139 (netbios session (smb) ) udp/tcp 389 (ldap)
tcp 445 (smb over tcp)
udp/tcp 464 (machine password changes) tcp 3268 (global catalog query)
現在需要啟用外部驗證就像pam描述的那樣,但要指向ad域:
另一種方式是通過xenserver添加主機到活動目錄,按照下面的步驟:
1)登入到xenserver,選擇你喜歡的主機或池添加到域。
2)在右側單擊“使用者”頁。
3)單擊“加入域”按鈕。輸入域名、域管理使用者和使用者密碼。然後單擊“ok”。
4)現在你應該看到面闆下有通路權的使用者群組的清單,如圖2.43所示。
對于pam或ad驗證,可以在xenserver主機上使用這個指令禁用外部驗證:
xe pool-disable-external-auth。
現在可以利用xenserver内建的基于角色的通路控制(rbac)系統。為了檢視xenserver主機上定義的角色,運作指令xe role-list,将看到與圖2.44類似的輸出結果。
這些角色有下面清單所介紹的能力:
池管理者:指定/修改角色,使用ssh和xenserver登入到伺服器控制台,伺服器備份/恢複,登出活動使用者連接配接,建立和解除報警,取消任何使用者的任務,池管理,虛拟機進階操作,虛拟機建立/銷毀操作,虛拟機改變cd媒體,浏覽虛拟機控制台,xencenter試圖管理操作,取消擁有的任務,讀取審計日志,配置和管理wlb,應用wlb優化建議,修改wlb報告訂閱,接受wlb替換建議,顯示wlb配置,産生wlb報告,連接配接到池,讀取所有池中繼資料。
池操作員:登出活動使用者連接配接,建立和解除報警,需求任何使用者的任務,池管理,虛拟機進階操作,虛拟機建立/銷毀操作,虛拟機改變cd媒體,檢視虛拟機控制台,xenserver流量管理操作,取消擁有的任務,讀取審計日志,配置和管理wlb,應用wlb優化建議,修改wlb報告訂閱,接受wlb替換建議,顯示wlb配置,産生wlb報告,連接配接到池,讀取所有池中繼資料。
虛拟機電源管理者:虛拟機進階操作,虛拟機建立/銷毀操作,虛拟機改變cd媒體,檢視虛拟機控制台,xenserver流量管理操作,取消擁有的任務,讀取審計日志,配置和管理wlb,應用wlb優化建議,修改wlb報告訂閱,接受wlb替換建議,顯示wlb配置,産生wlb報告,連接配接到池,讀取所有池中繼資料。
虛拟機管理者:虛拟機建立/銷毀操作,虛拟機改變cd媒體,檢視虛拟機控制台,xenserver流量管理操作,取消擁有的任務,讀取審計日志,配置和管理wlb,應用wlb優化建議,修改wlb報告訂閱,接受wlb替換建議,顯示wlb配置,産生wlb報告,連接配接到池,讀取所有池中繼資料。
虛拟機操作員:虛拟機改變cd媒體,檢視虛拟機控制台,xenserver流量管理操作,取消擁有的任務,讀取審計日志,配置和管理wlb,應用wlb優化建議,修改wlb報告訂閱,接受wlb替換建議,顯示wlb配置,産生wlb報告,連接配接到池,讀取所有池中繼資料。
隻讀:取消擁有的任務,讀取審計日志,配置和管理wlb,應用wlb優化建議,修改wlb報告訂閱,接受wlb替換建議,顯示wlb配置,産生wlb報告,連接配接到池,讀取所有池中繼資料。
為了利用xenserver rbac的優勢,你需要添加使用者(本地或基于ad的)到系統作為主題,主題是rbac能了解的目标類型,是以需要在利用rbac系統的優勢之前比對這些。添加使用者為主題的指令如下:
例如,圖2.45顯示一個加入virtsec.com域的主機,其中添加一個域使用者名為shack。這被後面的xe subject-list驗證(在圖中,一些輸出被截斷了)。
7.?設定基于角色的通路控制
現在使用者可以被添加到一個或多個系統的角色中。為了用pam完成這個任務,按照下面的步驟進行:
1)停止xenapi服務(xapi):
2)複制檔案/var/xapi/state.db,然後用vi編輯檔案。搜尋添加作為主題的使用者名。應該看到與下面類似的資訊(假設使用者名是xenadmin1):
3)新主題預設被添加到池管理者角色,但是,出于不同的原因可能會應用不同的角色。那麼可以在運作xe role-list後得到你獲得的角色的通用唯一辨別符(uuid)。在之前提供的例子中(如圖2.44),vm admin角色的uuid是aaa00ab5-7340-bfbc-0d1b-7cf342639a6e。修改檔案state.db中的行為讀:
4)儲存,退出state.db檔案,然後重新開機xenapi服務:
簡而言之,這就是為pam添加rbac的過程。
為ad添加rbac更簡單點!使用下面指令之一,添加ad使用者或組到特定角色(這些完成相同的事情):
在添加了ad使用者後,你應該能夠使用域認證資訊登入到系統中。圖2.46顯示了通過ssh用域管理賬戶[email protected]登入到xenserver主機的例子。正如你所看到的,由于指定了rbac pool admin角色,使用者在系統上被授予了全部權限。
使用rbac有許多許多好處,主要是有細粒度的權限設定和詳細的所有使用者活動的審計日志生成。本書的第7章将大體介紹審計日志和登入。
xenserver有許多可用的方法控制對系統和服務的遠端通路。首先,對于許多版本而言一個标準linux元件,是tcp包裝器。tcp包裝器由兩個檔案組成,/etc/hosts.allow和/etc/hosts.deny,它們可以明确的被配置為允許和拒絕通路某些在/etc/xinetd.d中有的inet服務。這兩個檔案有相似的文法,當在檔案中放置條目用于通路控制的時候遵循特定的順序:
1)當伺服器/客戶組比對/etc/hosts.allow檔案中的一條的時候,通路被授權。
2)當背景程式/客戶組比對/etc/hosts.deny檔案中的一個條目的時候,通路被拒絕。
3)否則,通路被授權(如果根本不存在條目)。
許多組織僅選擇将所有條目(允許和拒絕的)都放在/etc/hosts.allow檔案中,下面示範了ssh背景程式的一個允許和一個拒絕的條目:
最後,你可以通過配置内建的iptables防火牆控制多數出入xenserer的流量。xenserver 6.x主機的預設防火牆規則包括如下項目:
看看這個清單,能注意到一些不同尋常列出的端口,例如網際網路列印協定(ipp,端口631)。為什麼有它?好問題。好消息是這些端口的多數預設沒有啟用,沒有流量。防火牆僅僅是這麼設定它們。下面是企業版xenserver中使用的多數常用端口:
xencenter端口
tcp 22(ssh)
tcp 443(xenapi管理)
tcp 5900(用于linux客戶的vnc)
tcp 3389(用于windows guests客戶的rdp)
資源池端口
内部基礎設施端口
tcp/udp 123(ntp)
tcp/udp 53(dns)
tcp 389(活動目錄或ldap)
tcp/udp 139(netbios會話服務)
tcp/udp 445(microsoft-ds)
存儲端口
tcp 3260 (iscsi)
tcp 2049 (nfs)
tcp 21605 (存儲連結網關通信之上的簡單對象通路協定[soap])
有許多方式配置本地iptables防火牆,一個簡單的方法是在指令行提示符中輸入指令lokkit,然後将看到如圖2.47所示的界面。
也可以在這個界面啟用selinux(安全增強linux)。有三種選擇:
enforcing(增強的):啟用selinux。
permissive(許可的):僅發出警告而不實際控制平台上的行為。
disabled(禁止的):關閉selinux。
selinux配置可能非常複雜,超出了本書的讨論範圍。僅需要知道的是,在多數環境中它帶來的問題比具有的價值多!
為了在本地防火牆上快速完成讨厭的配置,選擇自定義,應該看到圖2.48類似的界面。
這裡,可以容易地啟用或禁止到來的防火牆規則。單擊“ok”,然後再次單擊“ok”結束。為了檢視有哪些規則,運作下面的指令:
也可以簡單地添加新防火牆規則。例如,為了添加新規則允許tcp端口31337在input鍊中,可以使用下面的文法:
現在,除了root使用者以外都被明确使用cron或at功能。