假设我在 Debian GNU/Linux 系统上有两个用户:me
和otheruser
。两者都是组 的成员shared-media
。我可以创建一个两者都可写的目录:
$ sudo mkdir /srv/media/test-parent
$ sudo chown root:shared-media /srv/media/test-parent
$ sudo chmod g+w /srv/media/test-parent
$ sudo chmod g+s /srv/media/test-parent
$ ls -dlh /srv/media/test-parent
drwxrwsr-x 2 root shared-media 4.0K Apr 28 19:35 /srv/media/test-parent
现在,otheruser
我创建一个目录并在其中创建一个文件:
$ sudo -u otheruser mkdir /srv/media/test-parent/zztest
$ sudo -u otheruser touch /srv/media/test-parent/zztest/one
不幸的是,这个新文件不能被组内的其他成员删除(假设当前用户是me
):
$ ll /srv/media/test-parent/zztest/one
-rw-r--r-- 1 otheruser shared-media 0 Apr 28 19:36 /srv/media/test-parent/zztest/one
$ rm /srv/media/test-parent/zztest/one
rm: remove write-protected regular empty file ‘/srv/media/test-parent/zztest/one’? y
rm: cannot remove ‘/srv/media/test-parent/zztest/one’: Permission denied
我如何设置权限以便otheruser
只创建可由其他组成员写入和删除的文件?
答案1
文件本身并不重要;您只需要对父目录具有写入权限。为了确保始终添加它,请在基目录上设置“默认”ACL:
setfacl -m default:group::rwx /srv/media/test-parent
这将设置一个“默认”(仅继承)ACL group::rwx
(简写g::rwx
),它适用于拥有组(即通过 chown/chgrp 设置的组)。
但您通常希望同时设置相同的“常规” ACL:
setfacl -m g::rwx,d:g::rwx /srv/media/test-parent
您可以通过直接授予特定组访问权限来简化这一过程:
setfacl -m g:users:rwx,d:g:users:rwx /srv/blah
这使得 'setgid' 位变得不再chgrp
必要。