是否可以创建 ACL 来否定访问特定用户(例如jdoe
)特定文件?
我对 ACL 的简单解决方案不感兴趣,该解决方案向除 之外的所有用户提供对文件的访问权限jdoe
。此解决方案的缺点是系统中连续创建的任何用户都无法访问该文件。
创建除此之外的所有用户的组jdoe
并授予组对文件的访问权限也有同样的缺点。
该命令setfacl -x u:jdoe /path/file
不起作用,因为它仅删除创建的 ACL。
答案1
当然,为了证明,以 root 身份......
touch /tmp/test
setfacl -m u:jdoe:--- /tmp/test
getfacl /tmp/test
su - jdoe
cat /tmp/test
exit
rm /tmp/test
默认情况下也可以对目录中的每个文件执行此操作:
mkdir /var/data/not-for-jdoe
setfacl -m u:jdoe:--- /var/data/not-for-jdoe
setfacl -d -m u:jdoe:--- /var/data/not-for-jdoe
上面的-m
开关是掩码,并且-d
开关使其成为目录中所有新文件系统对象的默认掩码。可以---
有其他权限值,例如:
rwx
r--
rw-
r-x
7
4
6
5
该组和其他蒙版的工作方式相同:g:groupname:---
或组合使用:u:username:---,g:groupname:---,o::---
。不指定用户名或组名会将掩码应用于当前用户/组所有权。
答案2
setfacl
是来自已弃用的命令,因为在 1997 年 POSIX ACL 草案提案中被撤回,该提案从未标准化。
setfacl
不能这样做。
如果您有支持 NFSv4/NTFS ACL 的现代操作系统,则可以执行此操作。参见例如http://schillix.sourceforge.net/man/man1/chmod.1.html
检查从第 19 页开始的示例。
这适用于 Solaris,但 AIX 和 OSX 也支持 NFSv4 ACL。