首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker和PaX主机

Docker和PaX主机
EN

Stack Overflow用户
提问于 2016-02-24 09:37:47
回答 1查看 481关注 0票数 4

在过去的几天里,我一直在尝试让docker容器在Gentoo Hardened上正确运行。

我花了几天时间才发现的第一个问题是我自己的偏执:我放置Docker root的分区是用nosuid和noexec挂载的。因此,devicemapper驱动程序在它上面工作,因为它创建了许多循环设备来做它的事情,但覆盖驱动程序没有,因为它从顶部继承了noexec标志,所以容器内的可执行文件将不会运行。我就把这段知识留给别人去发现吧…

然而,在解决了这个问题后,我被另一个问题绊倒了: PaX标志。

PaX要求需要创建包含代码的新内存页的可执行文件标记有特殊的ELF头或扩展的文件系统属性,最好是两者都有,因为Gentoo的推荐设置是使用扩展属性并忽略ELF头。不符合的可执行文件在尝试的那一刻就会被杀死。

不幸的是,必须尝试的程序列表包括nodejs、python和几乎所有其他现代解释器,更不用说mongodb了。可能还有其他有问题的可执行文件,但这些是主要的罪魁祸首,也是您经常希望在容器中看到的东西。

更不幸的是,尽管docker镜像应该能够包含由扩展属性标记的文件,但需要这些标志的通用软件的官方镜像--特别是mongodb和nodejs --似乎都没有这些标志。

目前,我一直在通过在磁盘上定位实际文件并从容器外部设置它的xattr来解决这个问题。这显然是一个非常糟糕的主意。

解决这个问题的正确方法是什么,就这一点而言,是否有其他人似乎没有这个问题的特殊原因,正如大量的谷歌搜索所表明的那样?也许,有没有我错过的另一个内核选项(我倾向于经常这样做),或者是一个特定的推荐方法来设置它们,使其保持安全并实际工作?除了关闭PaX,也就是说。

EN

回答 1

Stack Overflow用户

发布于 2016-08-17 02:13:53

我也一直在为此而苦苦挣扎。有了您出色的解释作为灵感,我能够在有问题的docker容器中设置扩展属性。

在容器中运行的基本命令是:

代码语言:javascript
复制
setfattr -n user.pax.flags -v "emr" /container's/path/to/binary

请注意,停靠容器本身需要安装attr包。如果您自己构建容器,则可以将上述命令作为RUN命令安装和运行。下面是一个扩展python官方镜像的示例:

代码语言:javascript
复制
FROM python:3-slim

RUN apt-get update && apt-get install -y attr
RUN setfattr -n user.pax.flags -v "emr" /usr/local/bin/python3.5
RUN setfattr -n user.pax.flags -v "emr" /usr/local/bin/pip

如果没有,您可以使用docker exec container_name /bin/bash进入运行容器,并手动执行上述命令。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35591704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档