对于 Docker 守护程序创建的新文件/容器,Docker 不会保留 Linux 文件 ACL

对于 Docker 守护程序创建的新文件/容器,Docker 不会保留 Linux 文件 ACL

我正在尝试授予组grafana-cloud对以下文件的读取权限/var/lib/docker/containers

#> ls  /var/lib/docker/containers/ | head -n1
0515ccad974eb0e4577c7b35a0c517ab889db95d996e6188e9d0377cfa2265d4

#> setfacl -Rdm g:grafana-agent:rx /var/lib/docker/containers
#> setfacl -Rm g:grafana-agent:rx /var/lib/docker/containers

执行此代码片段,它将授予所有已存在的文件和文件夹的权限。

#> getfacl /var/lib/docker/containers/0515ccad974eb0e4577c7b35a0c517ab889db95d996e6188e9d0377cfa2265d4
getfacl: Removing leading '/' from absolute path names
# file: var/lib/docker/containers/0515ccad974eb0e4577c7b35a0c517ab889db95d996e6188e9d0377cfa2265d4
# owner: root
# group: root
user::rwx
group::---
group:grafana-agent:r-x
mask::r-x
other::---
default:user::rwx
default:group::---
default:group:grafana-agent:r-x
default:mask::r-x
default:other::---

如果我在里面创建一个新文件或文件夹/var/lib/docker/containers,则 acl 会被正确保存:

#> mkdir /var/lib/docker/containers/foo
#> getfacl /var/lib/docker/containers/foo
getfacl: Removing leading '/' from absolute path names
# file: var/lib/docker/containers/foo
# owner: root
# group: root
user::rwx
group::---
group:grafana-agent:r-x
mask::r-x
other::---
default:user::rwx
default:group::---
default:group:grafana-agent:r-x
default:mask::r-x
default:other::---

问题出现在创建新容器时,其中 acl 似乎没有像我期望的那样应用:

#> docker run -d busybox
70216a6debce117563d2273da01a1219edc9e1357864cde5026076548b7169e8
#> getfacl /var/lib/docker/containers/70216a6debce117563d2273da01a1219edc9e1357864cde5026076548b7169e8/
getfacl: Removing leading '/' from absolute path names
# file: var/lib/docker/containers/70216a6debce117563d2273da01a1219edc9e1357864cde5026076548b7169e8/
# owner: root
# group: root
user::rwx
group::---
group:grafana-agent:r-x     #effective:---
mask::---
other::---
default:user::rwx
default:group::---
default:group:grafana-agent:r-x
default:mask::r-x
default:other::---

#> su - grafana-agent -c "ls /var/lib/docker/containers/70216a6debce117563d2273da01a1219edc9e1357864cde5026076548b7169e8/"
ls: cannot open directory '/var/lib/docker/containers/70216a6debce117563d2273da01a1219edc9e1357864cde5026076548b7169e8/': Permission denied

如果现在我再次运行 setfacl 命令,则 acl 将应用于新的容器文件树,并且用户可以读取文件:

#> setfacl -Rm g:grafana-agent:rx /var/lib/docker/containers/70216a6debce117563d2273da01a1219edc9e1357864cde5026076548b7169e8/
#> su - grafana-agent -c "ls /var/lib/docker/containers/70216a6debce117563d2273da01a1219edc9e1357864cde5026076548b7169e8/"
70216a6debce117563d2273da01a1219edc9e1357864cde5026076548b7169e8-json.log  checkpoints  config.v2.json  hostconfig.json  hostname  hosts  mounts  resolv.conf  resolv.conf.hash
#> getfacl /var/lib/docker/containers/70216a6debce117563d2273da01a1219edc9e1357864cde5026076548b7169e8
getfacl: Removing leading '/' from absolute path names
# file: var/lib/docker/containers/70216a6debce117563d2273da01a1219edc9e1357864cde5026076548b7169e8
# owner: root
# group: root
user::rwx
user:grafana-agent:r-x
group::---
group:grafana-agent:r-x
mask::r-x
other::---
default:user::rwx
default:user:grafana-agent:r-x
default:group::---
default:group:grafana-agent:r-x
default:mask::r-x
default:other::---

我的流程出了什么问题吗?似乎 acl 一开始就没有应用,因为我们可以在用户#effective:---旁边读取grafana-agent,但我找不到任何我尝试将 acl 授予用户而不是组,结果相同。

谢谢。

答案1

ACL 仅扩展了标准 POSIX 权限。effective此处的权限为---因为组的 POSIX 权限为---并且(默认)ACL 掩码也是---

您可以执行以下操作:

  1. 更改目录的所有权:例如chown root:grafana-agent /var/lib/docker/containers
  2. 使用位设置其权限s,使得在其中创建的所有新文件(和目录)都属于目录所有者的同一组:例如chmod g+rs /var/lib/docker/containers

您可能也需要更改组权限/var/lib/docker:(chmod o+x /var/lib/docker这将允许每个“其他”用户列出目录中的文件,从而访问containers子文件夹)

相关内容