生產(chǎn)環(huán)境中安全運行Docker容器
在生產(chǎn)環(huán)境中,強化Docker容器的一種方法就是使它們不可變,也就是只讀。安全地運行容器的其他方法還包括最小化受攻擊面和應(yīng)用Linux安全過程,標(biāo)準(zhǔn)Linux安全過程和針對容器環(huán)境的特定過程都要應(yīng)用。
在啟動容器時傳入--read-only標(biāo)記就可以 在只讀模式下運行 它。這可以防止任何進程寫入文件系統(tǒng)。任何試圖寫入的動作都會導(dǎo)致錯誤。 運行這種不可變的基礎(chǔ)設(shè)施 也與其他軟件部署流水線的最佳實踐相吻合。
盡管不可變性可以阻止任何惡意腳本的執(zhí)行,可以禁止通過在容器里運行的其他軟件暴露出來的漏洞而引起的改動。但是在現(xiàn)實生產(chǎn)環(huán)境中,這種模式又是不是適用于應(yīng)用程序呢?比如,要產(chǎn)生的日志文件和要使用數(shù)據(jù)庫的應(yīng)用程序就需要可寫性。
寫日志的一個可能的解決方案可以是使用一個集中的日志系統(tǒng),比如Elasticsearch/Logstash/Kibana(ELK),這樣所有的日志都被收集在一個中心節(jié)點,可能是在另一個容器中,就不是用戶可以直接訪問的了。另一種替代的方案是在啟動容器時,通過使用--log-driver標(biāo)記將日志導(dǎo)出到容器之外。對于那些需要對/tmp之類的臨時目錄有寫入權(quán)限的應(yīng)用程序,一種解決辦法是在容器里為這些目錄 加載一個臨時的文件系統(tǒng) 。
終端用戶不能直接訪問數(shù)據(jù)庫,所以風(fēng)險較低。然而,這并不排除受到攻擊的可能,除非面對用戶的應(yīng)用程序得到了強化。
在不可避免地要有一個可寫的文件系統(tǒng)的情況下,Docker提供了審計和變化的回滾功能。在Docker容器里的文件系統(tǒng)是作為一系列層的堆疊。當(dāng)創(chuàng)建一個新容器時,將在頂部添加一個新層,該層可以寫入。Docker存儲驅(qū)動程序隱藏了這些細節(jié),并將它作為一個普通的文件系統(tǒng)交付給用戶。對正在運行的容器的寫入將寫入此新層。這通常被稱為寫時拷貝(Copy-On-Write,COW)。
在Docker容器里很容易檢測到配置漂移或預(yù)期的配置變更。“docker diff”命令可以顯示對文件系統(tǒng)的更改——無論更改操作是文件添加、刪除還是修改。
除了在可能的情況下運行一個只讀容器,我們 還 提出以下 建議 ,以確保在生產(chǎn)環(huán)境中容器的安全:
- 運行一個 Alpine Linux 之類的最小的鏡像,Alpine Linux是基于安全思想而設(shè)計的。它的內(nèi)核上打了一個grsecurity的非官方移植的補丁。 Grsecurity 是一套對Linux內(nèi)核的安全增強方法,它包括權(quán)限控制以及消除基于漏洞的內(nèi)存崩潰的可能,具體方法是將那些使系統(tǒng)可能被攻擊的方法減少到最少。
- 限制對CPU、RAM等資源的使用,以防止DoS攻擊。
- 在操作系統(tǒng)中配置線程和進程限制。
- 采用sysctl之類標(biāo)準(zhǔn)的Linux內(nèi)核強化程序。
- 每個容器中只運行一個應(yīng)用程序。建議這么做,是因為它減小了受攻擊面,即對于一個給定的容器,可能的漏洞數(shù)量就只取決于在該容器上運行的應(yīng)用程序了。
相關(guān)文章
docker swarm外部驗證負(fù)載均衡時不生效的解決方案
這篇文章主要介紹了docker swarm外部驗證負(fù)載均衡時不生效的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04zabbix監(jiān)控docker應(yīng)用配置
今天通過本文給大家分享zabbix監(jiān)控docker容器的原理及部署的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-07-07使用Docker進行node開發(fā)時實現(xiàn)熱加載功能
這篇文章主要介紹了使用docker進行vue、react或者node開發(fā)時實現(xiàn)熱加載功能,即宿主機文件修改之后實時刷新或者實時重啟服務(wù),文中通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下2024-09-09docker創(chuàng)建centos容器并在容器里下載MySQL本地連接MySQL
這篇文章主要介紹了docker創(chuàng)建centos容器并在容器里下載MySQL本地連接MySQL,文章內(nèi)容介紹詳細需要的小伙伴可以參考一下2022-03-03把數(shù)據(jù)庫部署在docker容器內(nèi)有哪些缺陷
這篇文章主要介紹了把數(shù)據(jù)庫部署在docker容器內(nèi)有哪些缺陷,幫助大家更好的理解和學(xué)習(xí)docker容器和數(shù)據(jù)庫,感興趣的朋友可以了解下2020-08-08Docker容器化spring boot應(yīng)用詳解
本篇文章主要介紹了Docker容器化spring boot應(yīng)用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04docker mysql修改root賬號密碼并賦予權(quán)限
本文主要介紹了docker mysql修改root賬號密碼并賦予權(quán)限,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07