我正在使用 Kubernetes,并且想以非 root 用户身份运行容器。
如果我正在编写自己的 Dockerfile,我可以使用 docker useradd
、chmod 777
和 运行--user <username>
。
但在某些情况下,需要编辑的文件列表chmod
可能很长且未知,从而成为一个繁琐的过程,并且它会随着时间的推移而改变,并导致只能在运行时发现的错误。
有没有最佳实践?你会如何处理像/var/log
和 这样的文件夹/var/run
?一个选项是 touch/mkdir 并使用setfacl
。
最简单的就是chmod 777 -R /var/log
。
但是这是否也赋予了容器777
对主机的访问权限?当容器具有一组权限而主机具有另一组权限时,如何映射?
答案1
使用chmod 777
从来都不是正确的解决方案。弄清楚如何正确设置您的权限。权限应该尽可能少,以达到您的目标。
如何执行此操作在很大程度上取决于特定图像的上下文以及您正在运行的软件。
但是这是否也会赋予容器在主机上 777 访问权限?
取决于您正在更改权限的路径是否是或将是绑定挂载。
答案2
我发现这与我自己的问题相关:
覆盖文件系统会挂载下层目录,然后将上层目录附加到合并的挂载点。当进程将新文件写入合并的目录时,新文件会写入上层目录。当进程修改下层目录中的现有文件时,内核会将文件从下层目录复制到上层目录,并允许进程修改上层目录中的文件。
因此,chown
覆盖(上层)目录应该对主机(下层)目录没有影响。
但我猜想chmod 777
可以允许其他用户访问主机上的覆盖文件系统。