【編者按】對(duì)比虛擬機(jī),Docker在體量等方面擁有顯著的優(yōu)勢(shì)。然而,當(dāng)DevOps享受Docker帶來擴(kuò)展性、資源利用率和彈性提升的同時(shí),其所面臨的安全隱患同樣值得重視,近日Chris Taschner在SEI上撰文進(jìn)行了總結(jié)。
以下為譯文
基于容器的虛擬化平臺(tái)提供了一種方式在隔離的實(shí)例中運(yùn)行多個(gè)應(yīng)用程序。容器技術(shù)可以為DevOps提供顯著的優(yōu)勢(shì),包括提高系統(tǒng)的擴(kuò)展性、資源利用率和彈性。然而除下容器與主系統(tǒng)完全解耦,這種使用就會(huì)存在潛在的安全隱患。因此,這篇博文主要描述了為什么系統(tǒng)管理員應(yīng)該密切關(guān)在容器中運(yùn)行應(yīng)用所采納的權(quán)限等級(jí),以及用戶訪問主機(jī)系統(tǒng)的權(quán)限。
容器已經(jīng)成為DevOps中的新熱點(diǎn)技術(shù)。特別是Docker公司,已經(jīng)成為了提供容器技術(shù)服務(wù)的領(lǐng)頭公司。使用Docker平臺(tái),應(yīng)用程序極其依賴可以被打包進(jìn)一個(gè)單元,也就是所謂的鏡像。隨后,Docker就可以運(yùn)行這個(gè)鏡像的實(shí)例,每個(gè)鏡像的實(shí)例都是在駐留在容器中。
Docker正成為DevOps的代名詞。如果你還不熟悉容器的優(yōu)勢(shì)的話,概括地說,它們包括了可使用的鏡像和易于使用的公共庫、鏡像版本,以及Docker的思想。(欲了解更多信息,請(qǐng)參見 devops.com上的Three Reasons We Use Docker)。
在談到大小時(shí),容器具有很多優(yōu)勢(shì)。不像虛擬機(jī),一個(gè)容器不需要運(yùn)行整個(gè)操作系統(tǒng),或者對(duì)系統(tǒng)的硬件進(jìn)行拷貝。容器僅僅只需要足夠的操作系統(tǒng)和硬件信息資源來運(yùn)行它負(fù)責(zé)托管的應(yīng)用。所以,容器所消耗的資源比虛擬機(jī)小很多,因此同一主機(jī)上可以跑的容器肯定比虛擬機(jī)多。
而在最小化需要運(yùn)行的容器上,開發(fā)者需要做好足夠的權(quán)衡。其中一個(gè)就是減少容器與系統(tǒng)之間的分離度。與此相反,虛擬機(jī)與主機(jī)的分離性比容器的更高。Docker用戶需要root用戶權(quán)限去運(yùn)行容器,如果Docker用戶不知道容器中運(yùn)行的是什么,這可能會(huì)引發(fā)問題。通常,那些repository都是未經(jīng)過審核的,這意味著任何人都可以創(chuàng)建和上傳鏡像。顯然,對(duì)從互聯(lián)網(wǎng)上下載下來的容器給以太多的信任會(huì)引發(fā)安全問題。
共享命名空間的問題通常是Docker的最大問題。命名空間是系統(tǒng)內(nèi)核所創(chuàng)建的組,它通常會(huì)為不同源和區(qū)域指定不同的訪問級(jí)別。而究于擴(kuò)展性,在Docker中并沒有為容器提供不同的命名空間——倘若有數(shù)百個(gè)容器在運(yùn)行,那么每個(gè)容器都需要有獨(dú)立的命名空間。而且,如果一個(gè)容器想要共享存儲(chǔ),那么所有共享這個(gè)存儲(chǔ)的命名空間必須使用顯式訪問。
在回應(yīng)有關(guān)Docker的安全問題時(shí),這里詳細(xì)討論了如何緩解Docker的安全問題。緩解方法的建議包括了限制直接訪問主機(jī)和在容器中運(yùn)行應(yīng)用的權(quán)限。
除了Doker容器的安全指導(dǎo),還有其它在確保容器安全方面的建議。共享命名空間的一個(gè)潛在解決方案是使用Seccomp,它是一個(gè)進(jìn)程處理工具。Daniel Walsh 在opensource.com上詳細(xì)地介紹了這項(xiàng)工作。
管理員必須清楚容器中運(yùn)行的究竟是什么。從互聯(lián)網(wǎng)上下載來的鏡像應(yīng)該仔細(xì)審核,然后才在敏感的環(huán)境中運(yùn)行。一般規(guī)則,不像字面意義,容器不應(yīng)是包含在容器內(nèi)運(yùn)行的應(yīng)用程序。