Tag: 安全

运行Docker时存在哪些安全问题?

我找不到有关Docker安全问题的任何文档。 我了解如何通过locking防火墙,ssh访问,用户帐户和密码以及closures不必要的服务来创build相对安全的主机。 这些问题是否适用于Docker环境? 或者,Docker环境是孤立的,并且最初被locking,除非明确地打开/允许,否则没有“漏洞”,从而使唯一的安全问题成为主机上的安全问题。

作为非root用户在Docker容器中运行不可信代码的潜在安全问题是什么?

到目前为止,我已经看到大量的墨水泄漏了,关于Docker如何没有被隔离到允许任意容器在多租户环境中运行,这是有道理的。 “如果它在Docker的根目录下,请考虑它在主机中的根目录。” 那么非root的呢? 如果我想取一些不可信的代码并在一个容器中运行它,只要容器以非root用户的非sudo用户身份运行,是否可以安全地执行它? 做这样的事情有什么潜在的安全隐患? 我相当确定今天有这样的生产应用程序(CI系统,可运行的pastebins),但他们只是幸运的没有一个确定的攻击者,或者这是一个生产系统的合理的事情?

如何在Docker容器之间共享dynamic生成的秘密

我已经将两个使用其他API端点的Docker容器链接在一起。 这些API端点受秘密保护,并在容器启动时生成 。 我正在寻找一种安全的方式来分享这些服务之间的秘密而不做任何事情(如硬编码)。 这些服务是使用docker-compose创build和链接在一起的,并且可以使用环境variables覆盖该秘密。 但是,这种行为不鼓励生产。 在我的情况下,分发这些秘密的最安全的方法是什么? 我考虑过的事情: 使用将这些秘密存储为文件的中央数据容器。 客户端然后可以链接到这个容器并查找文件中的秘密。 这种方法的巨大缺点是它限制了容器在同一个节点上运行。 在部署容器之前,用这些随机秘密生成一个docker-compose文件。 这种方法的缺点是,不可能简单地使用docker-compose文件,而是将自己限制在一个bash脚本中,以产生一些关键任务,如这些秘密。 这也不会坚持我的观点,即解决scheme应该dynamic适应秘密的变化。 边注 最终,如果解决scheme也可以dynamic适应秘密变化,我更喜欢它。 例如,当一个容器失败时,它将自动重启,从而也产生一个新的秘密。

我可以在不使用–privileged标志的情况下运行Docker-in-Docker

我想使用Docker-in-Docker,但是 – 特权提供了一揽子访问设备。 有没有办法使用卷和cap-add等组合来运行这个?

如何防止docker容器内的代码访问networking?

我需要阻止我的docker集装箱访问外部世界。 这意味着容器不应该像wget http://www.google.com那样做 以前,我使用JérômePetazzoni的指令 ,joiniptables规则,例如: -A FORWARD -s 10.0.3.0/24 -j DROP 这似乎不再工作。 也许我不知道如何find用于docker / lxc的正确IP。 我使用lxc驱动程序运行docker 1.1.2 。 一种可能适用于某些方法的方法是使用–net="none" 。 但是,这不适合我,因为我仍然需要在我的容器中的eth0适配器和关联的HWaddr。 我目前的iptables是: *mangle :PREROUTING ACCEPT [12966683:10182972515] :INPUT ACCEPT [12966640:10182952166] :FORWARD ACCEPT [42:20285] :OUTPUT ACCEPT [12323852:11636850769] :POSTROUTING ACCEPT [12323894:11636871054] -A POSTROUTING -o lxcbr0 -p udp -m udp –dport 68 -j CHECKSUM –checksum-fill COMMIT # Completed on […]

Docker环境variables安全性

我有一个docker应用程序,我需要传递一个安全的信息,因为它使用密码来encryption/解密存储的数据。 我想弄清楚使用一个环境variables传递这个信息有多安全。 我知道,如果我使用 docker run -e passphrase="secretkey123" –name containername imagename 那么值可以通过以下方式find: docker inspect containername 因此它必须存储在磁盘上的某个地方(在/ var / lib / docker中我假设)。 有没有更安全的方式来传递一个环境variables到docker? 我应该使用链接到主机文件系统的卷中的临时文件吗? 有没有更好的办法?

如何为微服务创build公用密钥存储?

我在Docker环境中实现了一套微服务。 而且这些服务中的每一个都使用JWT令牌相互通信。 当服务A呼叫服务B时 服务A,使用他的私钥签署令牌,并传递给服务B. 服务B,从公钥存储获取ServiceA的公钥并validation令牌 公钥/私钥生成过程由微服务本身完成,然后将公钥传递给公钥存储。 所以公钥存储唯一要做的事情是, 存储由服务发送的公钥 根据请求发送正确的公钥给服务 我所要做的与图中所显示的相似。 我从以下图片获得: https : //www.youtube.com/watch?v=dBdZrw2pPvc&t=462s 所以我的问题是,这种公共密钥存储的标准实现吗? 如果是的话,他们是什么?

为什么有这么多的docker图像有漏洞?

我已经花了一些时间在hub.docker.com上探索docker hub,我对我想在我的项目中使用的官方图像中的一些漏洞感到震惊。 至于现在(2/27/2017) Nginx: https : //hub.docker.com/r/library/nginx/tags/ – 没有图像没有漏洞 Ubuntu: https : //hub.docker.com/r/library/ubuntu/tags/ – 没有图像没有漏洞 MySql: https : //hub.docker.com/r/library/mysql/tags/ – 没有图像没有漏洞 Redis: https : //hub.docker.com/r/library/redis/tags/ – 相同 Postgres: https : //hub.docker.com/r/library/postgres/tags/ – 相同 Java: https : //hub.docker.com/r/library/java/tags/ – 相同 Node.js: https : //hub.docker.com/r/library/node/tags/ – 只有6个图像没有已知的漏洞(我觉得幸运find他们) 所以,我的问题是: 1)如此巨大的脆弱图像的原因是什么? 2)如何决定何时可以安全地使用这种易受攻击的(根据Docker Security Scanning)映像还是等待官方修复更好? 重要更新:似乎您需要在Docker Hub上login才能看到“此映像有漏洞”消息。 下面是Nginx的回放截图:

运行docker安全

我知道docker守护程序需要以root身份运行,所以我被告知这可能会导致一些安全隐患,如容器被入侵,攻击者可以修改主机的系统文件。 我可以采取什么预防措施来减轻攻击时的损害? 在运行docker守护进程时,我应该注意哪些做法? 我曾经想过要有一个stream浪汉来升级虚拟机,让docker运行在vm上。

我如何处理我的docker集装箱中的安全更新?

我们希望避免在dockerfiile中包含“yum update”,因为它可能会根据Docker镜像的构build时间生成不同的容器,但显然如果需要更新基础系统,这可能会造成一些安全问题。 最好的select是真的有一个组织基础系统的形象和更新? 问题就在于,每次应用安全更新时,都需要在整个组织中重build和部署所有应用程序。 对我来说这似乎有点不同,只是简单地忽略容器中的安全更新,而只是担心主机上的安全更新。 这里的思考过程是,攻击者进入一个容器,需要在主机上有一个漏洞,docker-engine中的另外一个漏洞进入容器,然后有一个额外的漏洞来利用容器,这似乎是一个令人难以置信的系列事件。 通过引入用户命名空间和seccompconfiguration文件,这似乎进一步降低了风险。 无论如何,我如何处理容器内的安全更新,对CI / CDpipe道的影响最小,或者最好不必每隔一段时间重新部署整个基础架构?