你的映象安全嗎?

2022-06-17 20:24:16 字數 3237 閱讀 1867

與傳統的伺服器和虛擬機器相比,docker容器為我們工作提供了更安全的環境。容器中可以使我們的應用環境元件實現更小,更輕。每個應用的元件彼此隔離並且大大減少了攻擊面。這樣即使有人入侵了您的應用,也會最大程度限制被攻擊的程度,而且入侵後,利用漏洞傳播攻擊更難。

不過,我們還是需要最大程度了解docker技術本身的存在的安全隱患,這樣才能實現最大程度保護我們的容器化系統。

其中大部分將類似於我們已經為基於伺服器所做的工作,例如監視容器活動,限制每個容器環境的資源消耗,維持良好的應用程式設計實踐,修補漏洞並確保憑據不會被入侵您的docker映像。

但是,我們還是需要採取專門針對docker部署的安全措施。因此,以下列出了確保容器平台上託管的應用程式安全的三個基本步驟。

讓我們從最重要的開始。

預設情況下,docker授予容器中程序的root許可權,這意味著它們具有對容器和主機環境的完全管理訪問許可權。 一般來說,就像我們不會在標準linux伺服器上以root身份執行程序一樣,我們大部分容器應用部署時,也不會在容器中以root身份執行。

但是,如果沒有適當的注意和關注,開發人員可以輕鬆地忽略此預設行為並建立不安全的映像,這些映像會錯誤地授予root使用者訪問許可權。這可能是對黑客送了乙份大禮,黑客可以利用此漏洞竊取api金鑰,令牌,密碼和其他機密資料,或者干擾容器部署的基礎主機,並對伺服器系統造成惡意破壞。

甚至,您的devops團隊還可能會受到侵害,從而給docker環境帶來意想不到的後果。例如,他們可能會無意中建立具有管理訪問許可權的,由dockerfile命令構建的映像,這些映像在啟動容器時會擦除資料或更改主機系統設定。

如果不確定基礎映象使用什麼許可權,應該強制使用自定義使用者的非root使用者或使用者組。這樣,容器程序只能訪問我們預期功能所需要的資源

可以通過以下任意方式操作即可:

l  在dockerfile中設定非root使用者

首先,設定僅具有應用程式所需訪問許可權的專用使用者或使用者組。

然後,dockerfile中新增user,並以此使用者或組以構建映象和啟動容器執行時程序命令

from centos:7

run groupadd -g 1000 basicuser &&

useradd -r -u 1000 -g basicuser basicuser

user basicuser

l  在docker run命令中使用-user指定非root使用者

docker run命令中的-user選項將覆蓋dockerfile中指定的任何使用者。所以,在以下示例中,您的容器將始終以最低特權執行-所提供的使用者識別符號1009的許可權級別也最低。但是,此方法無法解決映像本身的潛在安全缺陷。因此,最好在dockerfile中指定乙個非root使用者,以便您的容器始終安全執行。

$ docker run --user 1009 centos:7

私有註冊中心是由我們自己的組織搭建的完全獨立的容器映像倉庫。您可以搭建在自己的伺服器上,也可以託管在第三方雲服務上,例如amazon ecr,azure容器註冊,google容器註冊,red hat quay和jfrog自己的容器註冊服務。

私有註冊中心可以讓您獲得更完善的映象的管理方式,並且通常提供更高階的功能,可以幫助確保庫存安全。

例如:l  複雜的映象掃瞄工具,用於識別威脅和未修補的漏洞。

l  嚴格的治理,例如基於角色的訪問控制(rbac)和合規性監視。

l  數字簽名,映象認證和其他防篡改功能。

l  用於開發,測試和生產多環境的映象倉庫。

相比之下,諸如docker hub之類的公共登錄檔一般僅提供基本服務-您必須信任映象發布者,而映象發布者可能未遵循相同的高安全標準。

這樣,您最終可能會得到包含惡意或過時**的映象,並最終獲得對資料洩露敞開大門的容器環境。

映象越大,受到攻擊的可能性越大。對於linux系統,您沒有選擇餘地,但是對於docker來說,只選擇自己需要的元件即可。

docker hub上的某些映象比其他的映象更簡化。比如在ubuntu倉庫中,有些映象的大小是部分版本的2倍以上。

所以在您獲取映象時,不要單純的只獲取最新版本的映象,最理想的是獲取占用空間最小的映象,然後自主新增應用所需的軟體包和依賴。

docker hub顯示儲存庫中每個映像的壓縮大小,如下面的minimal ubuntu版本所示。

拉取映象後可以使用docker images命令檢查其實際大小。

接下來,您需要建立乙個dockerfile來為容器構建簡化映象。這將由基礎映象層和自己的映象層組成。新增這些層時,有些製品將不是執行時環境的必需部分。要排除這些,應該在要從中構建映像的根目錄中設定乙個.dockerignore檔案。

最後,減小映象大小的另一種方法是使用docker多階段構建功能,docker 17.05及更高版本支援。

基於這個能力,dockerfile中可以使用多個from命令。

改善容器安全狀況的另一種方法是在將映象從docker hub中拉出之前進行驗證。

docker守護程式預設在不檢查其完整性的情況下拉取docker映像。但是,隨著docker engine 1.8的發布,該平台引入了一項新功能docker content trust,該功能支援映象的數字簽名和身份驗證。

此服務使您可以向發布到遠端倉庫的映象新增加密簽名。同時,每當您嘗試拉取映象時,它都會自動驗證數字簽名。這樣,您可以確定映象的所有者的身份是不是與他們宣告的一致。

要啟用docker content trust,您需要使用linux export命令設定以下變數。

$ export docker_content_trust=1

這只會在您當前的shell中設定。如果要全面啟用docker content trust,則需要在所有使用者共享的預設環境變數中進行設定。

儘管docker content trust無法驗證映像的質量,但可以通過防止在傳輸過程中受到破壞或通過對儲存庫的未授權訪問,以此來幫助保持映象的清潔。

你的單例模式安全嗎?

單例模式,一般的單例模式可分為以下兩種 1 餓漢式 public class singleton public singleton getinstance 2 懶漢式 public class singleton return singleton 安全分析 1 從執行緒角度 從執行緒角度看,我們會發...

你的單例模式安全嗎

今天在寫乙個東西需要用的單例模式,一般的單列模式可分為以下兩種 1 餓漢式 public class singleton public singleton getinstance 2 懶漢式 public class singleton return singleton 安全分析 1 從執行緒角度 ...

你的登入介面真的安全嗎?

大家學寫程式時,第一行 都是hello world。但是當你開始學習web後台技術時,很多人的第乙個功能就是寫的登入 小聲 別人我不知道,反正我是 但是我在和很多任務作經驗較短的同學面試或溝通的時候,發現很多同學雖然都有在簡歷上寫 負責專案的登入 註冊功能模組的開發和設計工作,但是都只是簡單的實現了...