麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網(wǎng)管 > 服務(wù)器 > 正文

對于Docker使用的一些安全配置建議

2020-05-27 12:57:34
字體:
供稿:網(wǎng)友

   介紹

  相信很多開發(fā)者都默認(rèn)Docker這樣的容器是一種沙盒(sandbox)應(yīng)用,也就是說他們可以用root權(quán)限在Docker中運行隨便什么應(yīng)用,而Docker有安全機制能保護宿主系統(tǒng)。比如,有些人覺得Docker容器里面的進程跟虛擬機里面的進程一樣安全;還有的人隨便找個源就下載沒有驗證過的Docker鏡像,看都不看內(nèi)容就在宿主機器上嘗試、學(xué)習(xí)和研究;還有一些提供PaaS服務(wù)的公司竟然允許用戶向多租戶系統(tǒng)中提交自己定制的Docker鏡像。請注意,上述行為均是不安全的。

  本文將介紹Docker的隔離性和安全性,以及為什么它在隔離和安全性上不如傳統(tǒng)的虛擬機。

  何謂安全性?

  單單就Docker來說,安全性可以概括為兩點:

  不會對主機造成影響

  不會對其他容器造成影響

  所以安全性問題90%以上可以歸結(jié)為隔離性問題。而Docker的安全問題本質(zhì)上就是容器技術(shù)的安全性問題,這包括共用內(nèi)核問題以及Namespace還不夠完善的限制:

  /proc、/sys等未完全隔離

  Top, free, iostat等命令展示的信息未隔離

  Root用戶未隔離

  /dev設(shè)備未隔離

  內(nèi)核模塊未隔離

  SELinux、time、syslog等所有現(xiàn)有Namespace之外的信息都未隔離

  當(dāng)然,鏡像本身不安全也會導(dǎo)致安全性問題。

  真的不如虛擬機安全?

  其實傳統(tǒng)虛擬機系統(tǒng)也絕非100%安全,只需攻破Hypervisor便足以令整個虛擬機毀于一旦,問題是有誰能隨隨便便就攻破嗎?如上所述,Docker的隔離性主要運用Namespace 技術(shù)。傳統(tǒng)上Linux中的PID是唯一且獨立的,在正常情況下,用戶不會看見重復(fù)的PID。然而在Docker采用了Namespace,從而令相同的PID可于不同的Namespace中獨立存在。舉個例子,A Container 之中PID=1是A程序,而B Container之中的PID=1同樣可以是A程序。雖然Docker可透過Namespace的方式分隔出看似是獨立的空間,然而Linux內(nèi)核(Kernel)卻不能Namespace,所以即使有多個Container,所有的system call其實都是通過主機的內(nèi)核處理,這便為Docker留下了不可否認(rèn)的安全問題。

  傳統(tǒng)的虛擬機同樣地很多操作都需要通過內(nèi)核處理,但這只是虛擬機的內(nèi)核,并非宿主主機內(nèi)核。因此萬一出現(xiàn)問題時,最多只影響到虛擬系統(tǒng)本身。當(dāng)然你可以說黑客可以先Hack虛擬機的內(nèi)核,然后再找尋Hypervisor的漏洞同時不能被發(fā)現(xiàn),之后再攻破SELinux,然后向主機內(nèi)核發(fā)動攻擊。文字表達起來都嫌繁復(fù),更何況實際執(zhí)行?所以Docker是很好用,但在遷移業(yè)務(wù)系統(tǒng)至其上時,請務(wù)必注意安全性!

  如何解決?

  在接納了“容器并不是全封閉”這種思想以后,開源社區(qū)尤其是紅帽公司,連同Docker一起改進Docker的安全性,改進項主要包括保護宿主不受容器內(nèi)部運行進程的入侵、防止容器之間相互破壞。開源社區(qū)在解決Docker安全性問題上的努力包括:

  Audit namespace

  作用:隔離審計功能

  未合入原因:意義不大,而且會增加audit的復(fù)雜度,難以維護。

  Syslognamespace

  作用:隔離系統(tǒng)日志

  未合入原因:很難完美的區(qū)分哪些log應(yīng)該屬于某個container。

  Device namespace

  作用:隔離設(shè)備(支持設(shè)備同時在多個容器中使用)

  未合入原因:幾乎要修改所有驅(qū)動,改動太大。

  Time namespace

  作用:使每個容器有自己的系統(tǒng)時間

  未合入原因:一些設(shè)計細(xì)節(jié)上未達成一致,而且感覺應(yīng)用場景不多。

  Task count cgroup

  作用:限制cgroup中的進程數(shù),可以解決fork bomb的問題

  未合入原因:不太必要,增加了復(fù)雜性,kmemlimit可以實現(xiàn)類似的效果。(最近可能會被合入)

  隔離/proc/meminfo的信息顯示

  作用:在容器中看到屬于自己的meminfo信息

  未合入原因:cgroupfs已經(jīng)導(dǎo)出了所有信息,/proc展現(xiàn)的工作可以由用戶態(tài)實現(xiàn),比如fuse。

  不過,從08年cgroup/ns基本成型后,至今還沒有新的namespace加入內(nèi)核,cgroup在子系統(tǒng)上做了簡單的補充,多數(shù)工作都是對原有subsystem的完善。內(nèi)核社區(qū)對容器技術(shù)要求的隔離性,本的原則是夠用就好,不能把內(nèi)核搞的太復(fù)雜。

  一些企業(yè)也做了很多工作,比如一些項目團隊采用了層疊式的安全機制,這些可選的安全機制具體如下:

  1、文件系統(tǒng)級防護

  文件系統(tǒng)只讀:有些Linux系統(tǒng)的內(nèi)核文件系統(tǒng)必須要mount到容器環(huán)境里,否則容器里的進程就會罷工。這給惡意進程非常大的便利,但是大部分運行在容器里的App其實并不需要向文件系統(tǒng)寫入數(shù)據(jù)。基于這種情況,開發(fā)者可以在mount時使用只讀模式。比如下面幾個: /sys 、/proc/sys 、/proc/sysrq-trigger 、 /proc/irq、/proc/bus

  寫入時復(fù)制(Copy-On-Write):Docker采用的就是這樣的文件系統(tǒng)。所有運行的容器可以先共享一個基本文件系統(tǒng)鏡像,一旦需要向文件系統(tǒng)寫數(shù)據(jù),就引導(dǎo)它寫到與該容器相關(guān)的另一個特定文件系統(tǒng)中。這樣的機制避免了一個容器看到另一個容器的數(shù)據(jù),而且容器也無法通過修改文件系統(tǒng)的內(nèi)容來影響其他容器。

  2、Capability機制

  Linux對Capability機制闡述的還是比較清楚的,即為了進行權(quán)限檢查,傳統(tǒng)的UNIX對進程實現(xiàn)了兩種不同的歸類,高權(quán)限進程(用戶ID為0,超級用戶或者root),以及低權(quán)限進程(UID不為0的)。高權(quán)限進程完全避免了各種權(quán)限檢查,而低權(quán)限進程則要接受所有權(quán)限檢查,會被檢查如UID、GID和組清單是否有效。從2.2內(nèi)核開始,Linux把原來和超級用戶相關(guān)的高級權(quán)限劃分成為不同的單元,稱為Capability,這樣就可以獨立對特定的Capability進行使能或禁止。通常來講,不合理的禁止Capability,會導(dǎo)致應(yīng)用崩潰,因此對于Docker這樣的容器,既要安全,又要保證其可用性。開發(fā)者需要從功能性、可用性以及安全性多方面綜合權(quán)衡Capability的設(shè)置。目前Docker安裝時默認(rèn)開啟的Capability列表一直是開發(fā)社區(qū)爭議的焦點,作為普通開發(fā)者,可以通過命令行來改變其默認(rèn)設(shè)置。

  3、NameSpace機制

  Docker提供的一些命名空間也從某種程度上提供了安全保護,比如PID命名空間,它會將全部未運行在開發(fā)者當(dāng)前容器里的進程隱藏。如果惡意程序看都看不見這些進程,攻擊起來應(yīng)該也會麻煩一些。另外,如果開發(fā)者終止pid是1的進程命名空間,容器里面所有的進程就會被全部自動終止,這意味著管理員可以非常容易地關(guān)掉容器。此外還有網(wǎng)絡(luò)命名空間,方便管理員通過路由規(guī)則和iptable來構(gòu)建容器的網(wǎng)絡(luò)環(huán)境,這樣容器內(nèi)部的進程就只能使用管理員許可的特定網(wǎng)絡(luò)。如只能訪問公網(wǎng)的、只能訪問本地的和兩個容器之間用于過濾內(nèi)容的容器。

  4、Cgroups機制

  主要是針對拒絕服務(wù)攻擊。惡意進程會通過占有系統(tǒng)全部資源來進行系統(tǒng)攻擊。Cgroups機制可以避免這種情況的發(fā)生,如CPU的cgroups可以在一個Docker容器試圖破壞CPU的時候登錄并制止惡意進程。管理員需要設(shè)計更多的cgroups,用于控制那些打開過多文件或者過多子進程等資源的進程。

  5、SELinux

  SELinux是一個標(biāo)簽系統(tǒng),進程有標(biāo)簽,每個文件、目錄、系統(tǒng)對象都有標(biāo)簽。SELinux通過撰寫標(biāo)簽進程和標(biāo)簽對象之間訪問規(guī)則來進行安全保護。它實現(xiàn)的是一種叫做MAC(Mandatory Access Control)的系統(tǒng),即對象的所有者不能控制別人訪問對象。

  安全建議

  最簡單的就是不要把Docker容器當(dāng)成可以完全替代虛擬機的東西。跑在Docker容器中的應(yīng)用在很長一段時間內(nèi)都將會是選擇性的,通常只跑測試系統(tǒng)或可信業(yè)務(wù)。

  門檻再高一點,我們對系統(tǒng)做減法,通過各種限制來達到安全性。這也是最主流的、有效的安全加固方法,比如上一章節(jié)介紹的幾種安全機制。同時一定要保證內(nèi)核的安全和穩(wěn)定。外部工具的監(jiān)控、容錯等系統(tǒng)也必不可少。

  總之通過適配、加固的Docker容器方案,在安全性上完全可以達到商用標(biāo)準(zhǔn)。就是可能對實施人員的技術(shù)要求和門檻較高。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 久国久产久精永久网页 | 免费一级毛片在线播放视频老 | 国产精品成人一区二区三区吃奶 | 日本黄色大片免费 | 欧美一区成人 | 精品国产乱码久久久久久丨区2区 | 精品一区二区三区在线观看视频 | 99riav视频一区二区 | 国产免费永久在线观看 | 久操福利视频 | av免费在线观看国产 | 成人av一区二区免费播放 | 国产午夜亚洲精品午夜鲁丝片 | 97超级碰碰人国产在线观看 | 亚洲国产高清一区 | 欧美亚洲免费 | 91a在线观看 | 国产精品久久久免费观看 | 禁漫天堂久久久久久久久久 | 成人免费看视频 | 国产精品久久久久久久久久久久久久久久 | 久草在线观看首页 | 一区二区三区欧美在线观看 | 失禁高潮抽搐喷水h | 日本黄色免费播放 | 91精品久久久久久 | 欧美久久久一区二区三区 | 一本一道久久久a久久久精品91 | 成熟女人特级毛片www免费 | 国产亚洲网 | 国产在线播放91 | 久久亚洲美女视频 | 欧美性生活区 | 亚洲精品一区二区三区在线看 | 成人一级免费 | 国产美女精品视频 | 国产免费一区二区三区最新不卡 | 在线播放污 | 国产精品免费观看视频 | 欧美羞羞视频 | www.热 |