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

Pau*_*ire 9 docker

如何防止我的预构建 docker 容器的用户能够访问该容器正在运行的实例中的 shell?我已经用谷歌搜索并阅读了与此场景相关的所有帖子,但没有找到可行的解决方案。我试图阻止访问容器中的给定资源,为了这个查询,假设它是配置文件中的序列号。我正在构建基于ubuntujava:7图像图像图像。

要测试您的解决方案,请执行以下操作:

  1. 创建并运行您的 docker 容器

  2. 导出您的容器

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

  3. 在外部系统上导入您的容器

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

  4. 运行容器

  5. 使用以下任何/所有方法将 shell 放入正在运行的容器中:

    docker exec -it [容器名称] bash

    docker attach [容器名称]

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

[container name] 是您的容器的名称

bash、dash 和 sh 都是有效的 shell

Dr.*_*all 5

为了补充何塞的答案,另一个解决方案是......

docker exec :id -it /bin/rm -R /bin/*
Run Code Online (Sandbox Code Playgroud)

这消除了 Linux 中的 sh 和任何 bin 有用命令。我不确定此时你会做什么才能进入容器。虽然我知道你也许可以使用内存调试器来获取正在运行的容器的环境变量,但这让它变得更烦人......我想知道是否有一种方法可以锁定环 0 中的内存并拿走ssh 完全访问主机。

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

编辑

如果您要保护敏感信息,则需要使用 docker 机密。查看:

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


小智 0

如果您要保护的信息是序列号,那么加密该信息是保护它的唯一可靠方法。您可以选择多种方式来加密秘密数据,请确保您使用的是强密钥。您还可以让应用程序将秘密数据发送到服务器以识别其有效性,并根据服务器的回复,应用程序可以继续工作或停止并显示消息。

简而言之,始终假设您的应用程序可以被完整彻底地剖析。始终使用强密钥加密所有秘密和重要数据,因此破解密钥将需要很长时间(假设加密算法是公开可用的或众所周知的)。

即使您找到了方法,单独阻止访问也只会给人一种错误的安全感。

  • ...那么要保护的秘密就成为加密密钥,并且您需要使用加密密钥来保护它。用钥匙保护那个钥匙,用钥匙保护那个钥匙,然后…… (3认同)