前言
Docker 是一個
開源的應(yīng)用容器引擎
,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的Linux或Windows
操作系統(tǒng)的機(jī)器上,也可以實(shí)現(xiàn)虛擬化,容器是完全使用沙箱機(jī)制,相互之間不會有任何接口。
??作者簡介:熱愛跑步的恒川,致力于C/C++、Java、Python等多編程語言,熱愛跑步,喜愛音樂的一位博主。
??本文收錄于恒川的日常匯報(bào)系列,大家有興趣的可以看一看
??相關(guān)專欄C語言初階、C語言進(jìn)階系列等,大家有興趣的可以看一看
??Python零基礎(chǔ)入門系列,Java入門篇系列正在發(fā)展中,喜歡Python、Java的朋友們可以關(guān)注一下哦!
1. 工具實(shí)踐
??Docker推出的一個名為Docker Content Trust(DCT)的新功能,它可幫助IT專業(yè)人士確保Docker的安全性
。DCT使用了一個公共密鑰基礎(chǔ)設(shè)施(PKI)的方法,它提供了兩個不同的密鑰:一個離線(root)密鑰和一個標(biāo)記(每次入庫)密鑰,當(dāng)?shù)谝淮伟l(fā)布者推出鏡像時它可創(chuàng)建和存儲客戶端。
??此舉有助于彌補(bǔ)正在使用惡意容器這一最大的漏洞。DCT還生成了一個時間戳密鑰,它可保護(hù)系統(tǒng)免受重放攻擊,即運(yùn)行過期的標(biāo)記內(nèi)容
。這解決了上面提及容器具有不同安全補(bǔ)丁等級的問題。
為了解決針對容器安全性的問題,包括Docker在內(nèi)的眾多公司都為Docker發(fā)布了安全基準(zhǔn)
。這套標(biāo)準(zhǔn)為確保Docker容器的安全性提供了指導(dǎo)。全篇118頁的文檔囊括了部署Docker容器的84個最佳實(shí)踐以及一個涉及所有內(nèi)容的檢查清單。
??如果用戶決定自行負(fù)責(zé)確保Docker容器的安全性
,但又不知道從何入手,這里提供了一些建議:
??閱讀上面提及的Docker安全基準(zhǔn)文件。重點(diǎn)關(guān)注與如何部署基于容器的應(yīng)用程序相關(guān)的建議和最佳實(shí)踐。這真的是有助于緩解財(cái)務(wù)壓力,認(rèn)真考慮大部分因糟糕設(shè)計(jì)而導(dǎo)致的Docker安全性問題。
考慮特定安全性需求。這將促使選擇正確的工具和方法
。很多使用容器技術(shù)的企業(yè)對于他們基于容器的應(yīng)用程序要么安全措施不足,要么安全措施過足。
??盡可能多地進(jìn)行測試。容器技術(shù)是新技術(shù),因此需要搞清楚哪些是能夠發(fā)揮作用,哪些是無用的,而要做到這一點(diǎn)的方法就是進(jìn)行安全性方面的測試,例如滲透測試
。
??容器安全性的發(fā)展趨勢可能會與虛擬化安全性一樣。雖然安全性從第一臺虛擬機(jī)部署開始就是一個問題,但是多年以來積累下來的良好安全性實(shí)踐、架構(gòu)和工具都證明了其有效性。鑒于此,Docker容器安全性的問題也同樣能夠得到較好解決
。
下面講解一下工具實(shí)踐內(nèi)所介紹的內(nèi)容
2. root概念
root,也稱為根用戶,是Unix(如Solaris、AIX、BSD)和類UNIX系統(tǒng)(如Linux、QNX等),及Android和iOS移動設(shè)備系統(tǒng)中的唯一的超級用戶,因其可對根目錄執(zhí)行讀寫和執(zhí)行操作而得名。
其相當(dāng)于Windows系統(tǒng)中的SYSTEM(XP及以下)/TrustedInstaller(Vista及以上)用戶
。其具有系統(tǒng)中的最高權(quán)限,如啟動或停止一個進(jìn)程,刪除或增加用戶,增加或者禁用硬件,新建文件、修改文件或刪除所有文件等等。
2.1 背景介紹
??現(xiàn)代操作系統(tǒng)一般屬于多用戶的操作系統(tǒng),也就是說,同一臺機(jī)器可以為多個用戶建立賬戶,一般這些用戶都是為普通用戶,這些普通用戶能同時登錄這臺計(jì)算機(jī),計(jì)算機(jī)對這些用戶分配一定的資源,普通用戶在所分配到的資源內(nèi)進(jìn)行各自的操作,相互之間不受影響
。但是這些普通用戶的權(quán)限是有限制的,且用戶太多的話,管理就不便,從而引入root用戶,此用戶是唯一的,且擁有系統(tǒng)的所有權(quán)限。root用戶所在的組稱為root組?!敖M”是具有相似權(quán)限的多個用戶的集合。
2.2 權(quán)限設(shè)置
??root用戶是系統(tǒng)中唯一的超級管理員,它具有等同于操作系統(tǒng)的權(quán)限。一些需要root權(quán)限的應(yīng)用,譬如廣告阻擋,是需要root權(quán)限的??蓡栴}在于root比windows的系統(tǒng)管理員的能力更大,足以把整個系統(tǒng)的大部分文件刪掉,導(dǎo)致系統(tǒng)完全毀壞,不能再次使用。所以,用root進(jìn)行不當(dāng)?shù)牟僮魇窍喈?dāng)危險的,輕微的可以死機(jī),嚴(yán)重的甚至不能開機(jī)。所以,在Unix、Linux及Android中,除非確實(shí)需要,一般情況下都不推薦使用root
。最好單獨(dú)建立一個普通的用戶,作為日常之用。
2.3 安全性
??不推薦使用root的一個原因則是出于安全的考慮。root具有系統(tǒng)所有的權(quán)限,root密碼如果泄漏,足以導(dǎo)致整臺計(jì)算機(jī)完全被竊取root密碼的人所控制,擁有root密碼就意味著擁有了這臺計(jì)算機(jī)上所有用戶的所有數(shù)據(jù)。
??有些任務(wù)必須由root才能執(zhí)行,例如刪除系統(tǒng)內(nèi)置應(yīng)用程序。但在Unix或Linux系統(tǒng)中又不推薦使用root,這構(gòu)成了一個矛盾。于是產(chǎn)生了一個sudo的做法,就是在必要時使用su提權(quán),即把系統(tǒng)管理的一部分權(quán)限授予普通用戶,并且只有在這些用戶需要更高權(quán)限的時候,才允許這些用戶暫時性的使用root命令來管理系統(tǒng)
。
??在默認(rèn)情況下root的根目錄(/root)是其他用戶無權(quán)訪問的,這在一定程度上增強(qiáng)了整個系統(tǒng)的安全性,但不完全是
。Unix、Linux及Android的安全性更在于它的高度可配置性,也就是說,Unix或者Linux的安全性更取決于系統(tǒng)管理員而不是Unix或Linux系統(tǒng)本身。一般的模式是:Unix、Linux和Android提供一種健全的安全機(jī)制,由系統(tǒng)管理員根據(jù)實(shí)際需要制定相應(yīng)的安全策略,并且部署這些安全策略。“機(jī)制”是能做什么不能做什么,“策略”是要做什么不要做什么
。而Windows的安全策略和安全機(jī)制則比較混亂,windows本身過于依賴安全策略,導(dǎo)致系統(tǒng)管理員在很多時候束手束腳,反而得不償失。
3. 時間戳的概念
??時間戳是使用數(shù)字簽名技術(shù)產(chǎn)生的數(shù)據(jù),簽名的對象包括了原始文件信息、簽名參數(shù)、簽名時間等信息
。時間戳系統(tǒng)用來產(chǎn)生和管理時間戳,對簽名對象進(jìn)行數(shù)字簽名產(chǎn)生時間戳,以證明原始文件在簽名時間之前已經(jīng)存在。
??可信時間戳是由聯(lián)合信任時間戳服務(wù)中心簽發(fā)的一個電子憑證,用于證明電子數(shù)據(jù)文件自申請可信時間戳后內(nèi)容保持完整、未被更改??尚艜r間戳接入核準(zhǔn)書的頒發(fā),標(biāo)志著可信時間戳在檔案領(lǐng)域規(guī)范化應(yīng)用已經(jīng)開始,并將起到電子檔案和檔案數(shù)字化副本內(nèi)容防篡改、保障檔案的法律憑證的作用
。根據(jù)《電子簽名法》有關(guān)數(shù)據(jù)電文原件形式的要求,申請了可信時間戳認(rèn)證的電子文件、電子檔案或紙質(zhì)檔案的數(shù)字化副本等可視為法規(guī)規(guī)定的原件形式。
4. Docker容器
Docker 容器是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以以統(tǒng)一的方式打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何安裝了docker引擎的服務(wù)器上(包括流行的Linux機(jī)器、windows機(jī)器),也可以實(shí)現(xiàn)虛擬化
。容器是完全使用沙箱機(jī)制,相互之間不會有任何接口(類似 iPhone 的 app)。幾乎沒有性能開銷,可以很容易地在機(jī)器和數(shù)據(jù)中心中運(yùn)行。最重要的是,他們不依賴于任何語言、框架包括系統(tǒng)。
4.1 安全性設(shè)置
- 定期滲透測試,安全審計(jì);
- 盡量采用image的正規(guī)鏡像來源,相對于傳統(tǒng)安全,容器安全受質(zhì)疑很大程度上是在于鏡像的維護(hù)及升級,因此在鏡像源頭保證安全和及時更新;
- 及時升級容器服務(wù),比如
采用rollingupdate的方式對跑服務(wù)的容器進(jìn)行升級等方式
。
4.2 遷移步驟
步驟1:分解
??一般來說,應(yīng)用程序都是復(fù)雜的,它們都有很多的組件。例如,大多數(shù)應(yīng)用程序都需要數(shù)據(jù)庫或中間件服務(wù)的支持以實(shí)現(xiàn)對數(shù)據(jù)的存儲、檢索和集成
。所以,需要通過設(shè)計(jì)和部署把這些服務(wù)拆分成為它們自己的容器。如果一個應(yīng)用程序能夠被拆分成為越多的分布式組件,那么應(yīng)用程序擴(kuò)展的選擇則越多。但是,分布式組件越多也意味著管理的復(fù)雜性越高。
步驟2:選擇一個基礎(chǔ)映像
??當(dāng)執(zhí)行應(yīng)用程序遷移時,應(yīng)盡量避免推倒重來的做法。搜索Docker注冊庫找到一個基本的Docker映像并將其作為應(yīng)用程序的基礎(chǔ)來使用
。
隨著時間的推移,企業(yè)將會發(fā)現(xiàn)這些Docker注冊庫中基本映像的價值所在。
步驟3:解決安全性和管理問題
??安全性和管理應(yīng)當(dāng)是一個高優(yōu)先級的考慮因素;企業(yè)用戶不應(yīng)再把它們當(dāng)作應(yīng)用程序遷移至容器的最后一步
。反之,企業(yè)必須從一開始就做好安全性和管理的規(guī)劃,把它們的功能納入應(yīng)用程序的開發(fā)過程中,并在應(yīng)用程序運(yùn)行過程中積極主動地關(guān)注這些方面。這就是企業(yè)應(yīng)當(dāng)花大功夫的地方。
步驟4:增加代碼
??為了創(chuàng)建映像,企業(yè)用戶需要使用一個Dockerfile來定義映像開發(fā)的必要步驟。一旦創(chuàng)建了映像,企業(yè)用戶就應(yīng)將其添加至Docker Hub。
步驟5:配置、測試、部署
??應(yīng)對在容器中運(yùn)行的應(yīng)用程序進(jìn)行配置,以便于讓應(yīng)用程序知道可以在哪里連接外部資源或者應(yīng)用程序集群中的其他容器
。企業(yè)用戶可以把這些配置部署在容器中或使用環(huán)境變量。
??最后,把容器部署到實(shí)際生產(chǎn)環(huán)境中。為了積極主動地關(guān)注基于容器的應(yīng)用程序的運(yùn)行狀況,可考慮實(shí)施必要的監(jiān)控和管理機(jī)制 。確保打開日志記錄功能。
4.3 特性
??Docker容器與其他的容器技術(shù)都是大致類似的
。但是,Docker在一個單一的容器內(nèi)捆綁了關(guān)鍵的應(yīng)用程序組件,這也就讓這容器可以在不同平臺和云計(jì)算之間實(shí)現(xiàn)便攜性。其結(jié)果就是,Docker就成為了需要實(shí)現(xiàn)跨多個不同環(huán)境運(yùn)行的應(yīng)用程序的理想容器技術(shù)選擇。
??Docker還可以讓使用微服務(wù)的應(yīng)用程序得益,所謂微服務(wù)就是把應(yīng)用程序分解成為專門開發(fā)的更小服務(wù)。 這些服務(wù)使用通用的RESTAPI來進(jìn)行交互
。使用完全封裝Docker容器的開發(fā)人員可以針對采用微服務(wù)的應(yīng)用程序開發(fā)出一個更為高效的分發(fā)模式。文章來源:http://www.zghlxwxcb.cn/news/detail-620365.html
如果這份博客對大家有幫助,希望各位給恒川一個免費(fèi)的點(diǎn)贊??作為鼓勵,并評論收藏一下?,謝謝大家?。?!
制作不易,如果大家有什么疑問或給恒川的意見,歡迎評論區(qū)留言。文章來源地址http://www.zghlxwxcb.cn/news/detail-620365.html
到了這里,關(guān)于【Docker】Docker的工具實(shí)踐及root概念和Docker容器安全性設(shè)置的詳細(xì)講解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!