相关疑难解决方法(0)

Docker - 在 ENTRYPOINT 中切换到非 root 用户是否安全?

以 root 权限运行ENTRYPOINT ["/bin/sh", entrypoint.sh"],然后在运行应用程序之前切换到非 root 用户,这是否被认为是一种安全的做法?


更多背景:

有许多文章(1、2、3 建议以非 root 用户身份运行容器是安全性方面的最佳实践。这可以使用命令来实现,但是在某些情况下(4、5 ),当以 root 身份运行容器时只有在脚本中切换到非 root是唯一的解决方法,例如:USER appuserentrypoint.sh

#!/bin/sh

chown -R appuser:appgroup /path/to/volume
exec runuser -u appuser "$@"
Run Code Online (Sandbox Code Playgroud)

在 Dockerfile 中:

COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/bin/sh", "entrypoint.sh"]
CMD ["/usr/bin/myapp"]
Run Code Online (Sandbox Code Playgroud)

调用时docker top container我可以看到两个进程,一个是根进程,一个是非根进程

PID                 USER                TIME                COMMAND
5004                root                0:00                runuser -u appuser /usr/bin/myapp
5043                1000                0:02                /usr/bin/myapp
Run Code Online (Sandbox Code Playgroud)

这是否意味着我的容器运行时存在根进程的漏洞,或者它被认为是安全的?

我发现关于这个主题的讨论很少(6、7 而且似乎没有一个是明确的。我在 StackOverflow 上查找了类似的问题,但找不到任何可以解决安全问题的相关问题8、9、10) …

linux security containers docker docker-volume

8
推荐指数
1
解决办法
4454
查看次数

Docker 卷选项以“root”用户身份创建文件夹

我以rperez. 我已经设置了 Docker 以便能够通过这个用户运行,所以我正在运行一个容器,如下所示:

$ docker run -d \
             -it \
             -e HOST_IP=192.168.1.66 \
             -e PHP_ERROR_REPORTING='E_ALL & ~E_STRICT' \
             -p 80:80 \
             -v ~/var/www:/var/www \
             --name php55-dev reypm/php55-dev
Run Code Online (Sandbox Code Playgroud)

请注意该$符号表示我以非 root 用户身份运行命令(使用#)。上面的命令创建以下目录:/home/rperez/var/www但所有者设置为root我相信这是因为dockerroot后台以用户身份运行。

有了这个设置,我无法在下面创建文件~/var/wwwrperez因为所有者是root如此......

处理这个问题的正确方法是什么?我已经阅读了这个这个,但不是很有帮助。

有什么帮助吗?

linux docker docker-volume docker-container

5
推荐指数
1
解决办法
5598
查看次数