开放转变文档读作:
为了进一步保护 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 一样存在问题。