两个用户,Foo 和 Bar。 Foo 希望 Bar 在 Foo 的主目录中从事一个项目。
[foo]$ mkdir project
[foo]$ # Set defaults
[foo]$ setfacl -m d:u::rwx,d:g::rwx,d:o::--- project
[foo]$ # Set defaults overrides for bar
[foo]$ setfacl -m d:u:bar:rwx project
[foo]$ # Set actual acls for project dir
[foo]$ set facl -m u::rwx,g::rwx,o::--- project
然后 foo 开始在新项目目录中创建文件和目录。
现在,在确保bar
具有访问项目目录的权限(即对所有父目录具有适当的权限)之后,bar
可以访问所有这些文件和目录,并且可以创建自己的文件和目录,它们从项目目录继承 ACL。
但是,这意味着foo
该项目文件夹包含内容拥有者bar
,这可能意味着 foo 无权访问。例如
[bar]$ # feeling annoying...
[bar]$ cd /path/to/project
[bar]$ mkdir -p -m 700 ha/ha
[bar]$ dd if=/dev/zero of=ha/ha/evil bs=1G count=10
现在 foo 可以撤回 bar 对项目文件夹的访问权限,但被 foo 无法访问或删除的 10GB 文件卡住了!
有没有办法确保 foo 始终对特定目录中创建的任何文件/目录拥有完全权限?
答案1
由于 1993 年过时的 ACL 提案于 1997 年被撤回,因此无法做到这一点,因为 bar 总是可以以阻止 foo 控制事物的方式更改权限。请注意,此 ACL 提案从未成为标准,因为用户从一开始就对其不满意。
我建议使用更现代的文件系统,例如 ZFS,它支持源自 NTFS 的现代 ACL 标准,现在已在 NFSv4 定义中标准化。使用 NFSv4 ACL,您可以设置专用 ACL,让 foo 成为唯一可以控制 ACL 定义的人,并且使用自动传播的目录上的默认 ACL,可以以授予对 bar 的访问权限的方式设置所需的权限但没有更改 ACL 的权限。请参阅 chmod 手册页:http://schillix.sourceforge.net/man/man1/chmod.1.html有关 NFSv4 ACL 的信息。