不使用 root 身份运行 Apache 以实现 HTTPS

不使用 root 身份运行 Apache 以实现 HTTPS

我正在尝试使用处理 TLS 相互身份验证的 Apache 服务器制作 Docker 容器映像。由于这是一个容器,因此可以让 Apache 监听一些高编号端口而不是 443,因此这应该消除了 root 执行的需要。

然而,当我尝试启用 TLS 时,我得到了以下信息:

[Thu Oct 11 09:50:50.357758 2018] [auth_digest:notice] [pid 22] AH01757: generating secret for digest authentication ...
[Thu Oct 11 09:50:50.357818 2018] [auth_digest:error] [pid 22] (13)Permission denied: AH01762: Failed to create shared memory segment on file /run/httpd/authdigest_shm.22
[Thu Oct 11 09:50:50.357825 2018] [auth_digest:error] [pid 22] (13)Permission denied: AH01760: failed to initialize shm - all nonce-count checking, one-time nonces, and MD5-sess algorithm disabled

创建共享内存是否需要 root 权限,或者是否可以修改访问权限以允许非 root 使用?

答案1

容器中的应用程序通常以 root 身份运行。但这并不意味着它们拥有完全的 root 权限。

来自docker 安全文档

[...] 容器可以以减少的功能集运行;这意味着容器内的“root”拥有的权限比真正的“root”少得多。

只需让它以 root 身份在容器内运行。

答案2

最终弄清楚了。列出/run/httpd节目上的访问标志:

drwx--x--- 3 root apache 4096 Sep 24 15:57 /run/httpd/

因此只有 root 可以写入。因此在 Dockerfile 中我添加了:

RUN chmod 770 /run/httpd

并且它确实有效。虽然不确定它是否是最好的解决方案,但我欢迎任何指出该解决方案存在问题的评论。

答案3

我找到了另一种解决方案。在您的配置中,您可以定义一个可以写入的目录,而不是 /run/httpd/。像这样:

DefaultRuntimeDir runtime/

这可能是相对于您的 ServerRoot 的目录

您可以找到有关httpd 核心修改内存使用情况

相关内容