为什么setfacl在docker容器中不起作用?

时间:2015-10-23 16:37:45

标签: file permissions docker acl

我在docker容器中遇到ACL问题。

如下所示,我在“/ opt / transfer_station / webapp / logs”上为用户“ts”设置了读/写权限。这适用于文件夹“/ opt / transfer_station / webapp / logs”,但不适用于文件/opt/transfer_station/webapp/logs/debug.log。为什么不起作用?

[root@lx-ts logs]# setfacl -Rdm u:ts:rw,g:ts:rw /opt/transfer_station/webapp/logs
[root@lx-ts logs]# echo $?
0
[root@lx-ts logs]# getfacl /opt/transfer_station/webapp/logs
getfacl: Removing leading '/' from absolute path names
# file: opt/transfer_station/webapp/logs
# owner: apache
# group: apache
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:apache:rw-
default:user:ts:rw-
default:group::r-x
default:group:apache:rw-
default:group:ts:rw-
default:mask::rwx
default:other::r-x

[root@lx-ts logs]# getfacl /opt/transfer_station/webapp/logs/debug.log
getfacl: Removing leading '/' from absolute path names
# file: opt/transfer_station/webapp/logs/debug.log
# owner: root
# group: root
user::rw-
group::r--
other::r--

[root@lx-ts logs]# whoami
root

顺便说一下。我尝试使用docker选项OPTIONS =' - storage-driver = devicemapper'而没有它。 SELinux处于许可模式,因此不会阻止任何事情。

如果我附加到容器,在文件夹中创建一个测试文件,ACL将按照我的预期继承:

[root@lx-ts transfer_station]# touch webapp/logs/test
[root@lx-ts transfer_station]# getfacl webapp/logs/test
# file: webapp/logs/test
# owner: root
# group: root
user::rw-
user:apache:rw-
user:ts:rw-
group::r-x                      #effective:r--
group:apache:rw-
group:ts:rw-
mask::rw-
other::r--

我正在运行Centos 7.1和Docker 1.7.1版,构建446ad9b / 1.7.1。

我还将CAP_FOWNER添加到容器中(使用--cap-add = FOWNER),但这也没有解决问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

知道了:

setfacl -Rm u:ts:rw,g:ts:rw /opt/transfer_station/webapp/logs

setfacl -d仅用于目录。我不得不删除它以使其工作:/