如何防止在 docker 容器中附加或執行

如何防止在 docker 容器中附加或執行

如何阻止我的預先建置 docker 容器的使用者存取該容器正在執行的實例中的 shell?我已經用谷歌搜尋並閱讀了與此場景相關的所有帖子,但沒有找到可行的解決方案。為了進行查詢,我試圖阻止存取容器中的給定資源,假設它是設定檔中的序號。我正在建立在爪哇:7圖像是基於烏班圖圖像。

若要測試您的解決方案,請執行以下操作:

  1. 建立並運行您的 docker 容器

  2. 匯出您的容器

    docker export [容器名稱] | gzip -c > mycontainer.tar.gz

  3. 將容器導入外部系統

    gzip -dc mycontainer.tar.gz | gzip -dc mycontainer.tar.gz | docker import - [容器名稱]

  4. 運行容器

  5. 使用以下任意/所有方法進入正在運行的容器中:

    docker exec -it [容器名稱] bash

    docker Attach [容器名稱]

    docker run -ti --entrypoint=/bin/bash [容器名稱]

[容器名稱] 是您的容器的名稱

bash、dash 和 sh 都是有效的 shell

答案1

為了補充何塞的答案,另一個解決方案是...

docker exec :id -it /bin/rm -R /bin/*

這消除了 Linux 中的 sh 和任何 bin 有用命令。我不確定此時你會做什麼才能進入容器。雖然我知道你也許可以使用內存調試器來獲取正在運行的容器的環境變量,但這使它變得更加煩人......我想知道是否有一種方法可以鎖定環0 中的內存並拿走ssh 完全存取主機。

如果有人知道如何破解它,我很有興趣知道如何破解。

編輯

如果您要保護敏感資訊,則需要使用 docker 機密。查看:

https://docs.docker.com/engine/swarm/secrets/

答案2

具體來說,對於bash命令,我在.bashrc檔案中將命令添加到exit檔案末尾,這樣用戶登入並最終被踢出,但用戶仍然可以使用sh命令。

答案3

如果您要保護的資訊是序號,那麼加密該資訊是保護它的唯一可靠方法。您可以選擇多種方式來加密秘密數據,請確保您使用的是強密鑰。您還可以讓應用程式將秘密資料發送到伺服器以識別其有效性,並根據伺服器的回复,應用程式可以繼續工作或停止並顯示訊息。

簡而言之,始終假設您的應用程式可以被完整徹底地剖析。始終使用強密鑰加密所有秘密和重要數據,因此破解密鑰將需要很長時間(假設加密演算法是公開可用的或眾所周知的)。

即使您找到了方法,單獨阻止訪問也只會給人一種錯誤的安全感。

相關內容