注意:为了澄清问题,我假设从一个空目录开始;我意识到如果它非空我可以使用该-R
选项setfacl
。
这是我尝试过的(想要在用户创建并由用户拥有时授予/tmp/badDir
用户访问权限):me
otheruser
$ sudo -u otheruser mkdir /tmp/badDir
$ sudo setfacl -dm "user:me:rwX" /tmp/badDir
$ sudo -u otheruser touch /tmp/badDir/baz
$ touch /tmp/badDir/baz
所以乍一看这看起来不错。
但是,如果我尝试我需要的某些其他操作,这不是我所期望的:
$ touch /tmp/badDir
touch: setting times of '/tmp/badDir': Permission denied
$ touch /tmp/badDir/foo
touch: cannot touch '/tmp/badDir/foo': Permission denied
所以看起来我无法修改目录元数据或在目录中创建文件,尽管我可以修改用户创建的目录中的文件otheruser
。
ls
和的输出getfacl
为:
$ ls -last /tmp/badDir
total 0
0 drwxrwxrwt 1 root root 1794 Jun 22 09:22 ..
0 -rw-rw-r--+ 1 otheruser otheruser 0 Jun 22 09:22 baz
0 drwxr-xr-x+ 1 otheruser otheruser 6 Jun 22 09:22 .
$ getfacl /tmp/badDir
getfacl: Removing leading '/' from absolute path names
# file: tmp/badDir
# owner: otheruser
# group: otheruser
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:me:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
$ getfacl /tmp/badDir/baz
getfacl: Removing leading '/' from absolute path names
# file: tmp/badDir/baz
# owner: otheruser
# group: otheruser
user::rw-
user:me:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-
other::r--
更新1
只是为了确认,我确实启用了 acls:
$ sudo tune2fs -l /dev/disk/by-uuid/8d6bba7d-63c1-4406-855a-f56987dea98e | grep acl
Default mount options: user_xattr acl
答案1
一位同事向我指出,我需要将目录的权限单独设置为在该目录中创建的文件的默认权限。所以你需要两者:
sudo setfacl -d -m "user:me:rwX" /tmp/badDir
sudo setfacl -m "user:me:rwX" /tmp/badDir # Notice the missing -d