Tag: 安全

OpenShift是否通过在主机级别分离容器来支持真正的多租户?

我花了一段时间才明白OpenShift是什么以及它做了什么(除了Kubernetes本身)。 我的问题是指当前版本的OpenShift Origin 1.1(OpenShift 3.1)。 OpenShift是否通过在专用主机上运行来自不同租户的容器来支持真正的多租户? 没有太多的细节,应该是常识(如果你熟悉Docker / Container的安全问题),你可以通过在主机级别进行容器隔离来保护租户免受容器突破或其他攻击。 (我强烈推荐这本电子书在Docker安全 )。 OpenShift的文档只描述了项目和用户的概念,而Kubernetes文档只是陈述命名空间的概念来确定某些资源的范围。 感谢您对此的任何见解或对此的看法,如果您有OpenShift作为开发人员或客户的多租户Container / PaaS平台运行的经验。

禁用某些Docker运行选项

我目前正在进行一项设置,使Docker在高性能集群(HPC)上可用。 这个想法是,我们组中的每个用户都应该能够预留一台机器一段时间,并且能够以“正常的方式”使用Docker。 通过Docker CLI访问Docker守护进程的含义。 为此,用户将被添加到Docker组。 但是这给我们带来了一个很大的安全问题,因为这基本上意味着用户在那台机器上拥有root权限。 新的想法是使用用户命名空间映射选项(如https://docs.docker.com/engine/reference/commandline/dockerd/#/daemon-user-namespace-options中所述 )。 正如我所看到的,这将解决我们最大的安全问题,即容器中的根与主机上的根相同。 但是只要用户能够通过–userns = host来绕过这一点,这不会以任何方式增加安全性。 有没有办法来禁用这个和其他Docker运行选项?

运行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的回放截图: