gpt4 book ai didi

Docker 和 PaX 主机

转载 作者:行者123 更新时间:2023-12-01 04:57:54 24 4
gpt4 key购买 nike

过去几天我一直在努力让 docker 容器在 Gentoo Hardened 上正确运行。

我花了几天才发现的第一个问题是由我自己的偏执引起的:我将 Docker 根目录放入的分区挂载了 nosuid 和 noexec。因此,devicemapper 驱动程序对其进行了处理,因为它创建了许多循环设备来完成它的工作,但覆盖驱动程序没有这样做,因为它从顶部继承了 noexec 标志,因此容器内的任何可执行文件都不会运行。我将把这段知识留给别人在这里发现......

然而,在解决这个问题后,我又遇到了另一个问题:PaX 标志。

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

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

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

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

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

最佳答案

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

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

setfattr -n user.pax.flags -v "emr" /container's/path/to/binary

请注意,docker 容器本身需要 attr安装包。如果您自己构建容器,则可以将上述命令作为 RUN 安装并运行。命令。下面是一个扩展python官方镜像的例子:
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 进入正在运行的容器并手动执行上述命令。

关于Docker 和 PaX 主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35591704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com