在 openshift 上以非 root 身份运行容器的任何要点

在 openshift 上以非 root 身份运行容器的任何要点

开放转变文档读作:

为了进一步保护 OpenShift Container Platform 集群中的 RHCOS 系统,大多数容器(管理或监控主机系统本身的容器除外)都应以非 root 用户身份运行。建议降低权限级别或创建具有尽可能少权限的容器,这是保护您自己的 OpenShift Container Platform 集群的最佳实践。

所讨论的容器将在 cri-o 运行时以只读、非特权形式运行,并具有 UID 重新映射、selinux 和 secomp 配置文件。

在这个阶段,我想知道以非 root 用户身份运行容器是否是 docker 守护进程以 root 身份运行时代的一种货物崇拜的回归。

如果容器已经在所有这些限制下运行,那么以非 root 用户身份运行是否有任何意义?

答案1

在容器内以 root 身份运行无根容器

默认以 root 用户身份运行:

podman run --user 0:0 ...

--user 0:0无需添加,因为这是默认的)

如果你还没有使用命令行选项--uidmap,root用户将会被映射到主机上的用户的UID。

root 用户还具有运行更改其有效 UID 的权限setuid(),因此它可以访问所有用户的 UID(即用户的正常 UID 和文件中的所有子 UID/etc/subuid)。

以非 root 用户身份在容器内运行无 rootless 容器

以非 root 用户身份运行(例如,UID=1000、GID=1000 的用户):

podman run --user 1000:1000 ...

如果你还没有使用命令行选项--uidmap或者--userns=keep-id,非 root 用户将不是映射到主机上的用户 UID,而不是映射到文件中用户 UID 的子 UID 之一/etc/subuid

比较两种替代方案(即 root 和非 root)

如果 Podman 存在安全漏洞,那么如果容器进程以未映射到主机上用户 UID 的非 root 用户身份运行会更安全。

如果这样的容器进程逃离容器,它将只能以用户子 UID 之一的身份访问文件。该进程将无法访问目录〜/.ssh(通常具有权限chmod 700 ~/.ssh)。

其他阅读材料

Red Hat 博客文章以非 root 用户身份运行 rootless PodmanDan Walsh 解释了为什么以非 root 用户身份运行无 root 容器比以 root 用户身份运行更安全。

答案2

正确的安全方法应该是使用所需的最低权限。

如果没有真的需要根访问权限,它不应该有它。

答案3

永远不能说已经有足够的安全保障,迟早总会有其他人找到方法来破解它,无论是利用技术诀窍、社会工程学还是其他我不知道会发生的方法。

这完全取决于它对你有多重要,以及你预计会遇到什么类型或级别的攻击者。你是否愿意承担风险,这是你的决定(或你的公司的决定),但由于你使用的是 Openshift,一个以安全为中心的 Kubernetes“版本\发行版”,我认为你会更倾向于采用安全性强的方法。

另外,想想这会给你带来多大的不便?如果不太麻烦,我认为值得一试,如果不麻烦,那么请参考您对第 2 段的回答。

克里奥吊舱从安全角度来说有更好的设计,但它们也和 docker 一样存在问题。

相关内容