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


9

如何阻止我的预构建Docker容器的用户访问该容器正在运行的实例中的Shell?我已经在Google上搜索并阅读了与该场景相关的所有帖子,但都没有有效的解决方案。为了进行查询,我试图阻止访问容器中的给定资源,比方说它在配置文件中的序列号。我建立在基于ubuntu图像的java:7图像上。

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

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

  2. 导出容器

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

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

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

  4. 运行容器

  5. 使用以下任何/所有方法将其装入运行中的容器:

    docker exec -it [容器名称] bash

    泊坞窗附加[容器名称]

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

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

bash,dash和sh都是有效的shell


1
如果您要保护容器内的信息,则docker不是您想要的技术。即使您能够限制Shell访问,也可以通过许多其他简单的方法来访问容器内的文件系统。
EEAA 2015年

不幸的是,在这种情况下,我必须使用docker。我很清楚在这种情况下不理想。
Paul Gregoire

嘿@EEAA,您能指出我这些“琐碎的手段”吗?那么您会建议什么而不是docker?
nils petersohn

Answers:



3

要补充Jose的答案,另一种解决方案是...

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

这摆脱了sh和linux中任何bin有用的命令。我不确定此时您将如何进入容器。尽管我知道您可能可以使用内存调试器来获取正在运行的容器的环境变量,但是这使它变得更加烦人...我想知道是否有办法在环0中锁定该内存并带走它ssh完全访问主机。

如果有人知道如何破解,那么我会对如何知道感兴趣。

编辑

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

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


非常适合我的目的,谢谢!尽管我相信正确的命令是:docker exec -it 'container-id' /bin/rm -R /bin/*
ty01

这对我不起作用Docker version 18.09.6, build 481bc77156 。在通过方法@ty01给出了这样的错误信息/bin/rm: cannot remove '/bin/<filename>': No such file or directory所有filename以s /bin。在通过答案@Dr. Knowitall的回报Error: No such container: :id。即使我替换idCONTAINER_IDfrom docker ps,它仍然会给出相同的错误消息。
埃德斯(edesz)

0

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

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

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


...然后,要保护的秘密就变成了加密密钥,您需要使用加密密钥对其进行保护。并用钥匙保护钥匙,并用钥匙保护钥匙...
马克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.