Tag: pax

Docker和PaX主机

我花了几天的时间试图让Docker容器在Gentoo Hardened上正常运行。 我花了数天才发现的第一个问题是由我自己的偏执狂所驱动的:我放置Docker根的分区挂载了nosuid和noexec。 因此,devicemapper驱动程序对它进行了处理,因为它创build了许多循环设备来完成它的工作,但覆盖驱动程序没有,因为它inheritance了顶部的noexec标志,所以容器中的可执行文件将不会运行。 我只是留下这个知识让别人来发现这里… 然而,那样的话,我绊倒了另外一个问题:PaX标志。 PaX强制要求创build包含代码的新内存页面的可执行文件需要使用特殊的ELF头文件或扩展的文件系统属性(最好是两者)来标记,因为推荐的Gentoo设置是使用扩展属性并忽略ELF头文件。 那些不合规的可执行文件在他们尝试的时候就会被杀死。 不幸的是,只需要尝试的程序列表包括nodejs,python,以及几乎所有其他现代的解释器,更不用说mongodb了。 可能还有其他问题的可执行文件,但这些是主要的元凶,也是你经常想要在容器中看到的东西。 更不幸的是,尽pipedocker图像应该能够包含由扩展属性标记的文件,但是对于需要这种标记的通用软件(特别是mongodb和nodejs)来说,没有一个官方图像似乎具有这些标记。 目前,我一直在解决这个问题,将实际的文件放在磁盘上,并从容器外面设置它的xattr。 这显然是一个非常糟糕的主意。 解决这个问题的正确方法是什么?就这一点而言,似乎没有其他人似乎有一个特别的理由,正如大量的Googlesearch似乎表明的那样? 是否有,也许,我错过了另一个内核选项,(我倾向于这么做)或一个特定的推荐方式来设置它们,使其保持安全,实际上工作? 除了closuresPaX,就是。