我在一个目录中定义了一些ACL,如下所示:
# owner: root # group: root user::rwx group::r-- mask::rx other::r-- default:user::r-- default:group::r-- default:mask::rx default:other::r--
我希望在该文件夹中创build的任何新文件都是u:apache:r–以及任何新的目录是u:apache:rx。 如何使用ACL指定该意图?
我已经尝试了-dm u:apache:rX ,与rx相比,它似乎没有任何不同之处
overt htdocs # getfacl . # file: . # owner: root # group: root user::rwx user:apache:r-- group::r-- mask::rx other::r-- default:user::r-- default:user:apache:r-- default:group::r-- default:mask::r-- default:other::r-- overt htdocs # setfacl -dm u:apache:rx . overt htdocs # touch blah.txt overt htdocs # getfacl blah.txt # file: blah.txt # owner: root # group: root user::r-- user:apache:rx #effective:r-- group::r-- mask::r-- other::r-- overt htdocs # rm blah.txt overt htdocs # setfacl -dm u:apache:rX . overt htdocs # touch blah.txt overt htdocs # getfacl blah.txt # file: blah.txt # owner: root # group: root user::r-- user:apache:rx #effective:r-- group::r-- mask::r-- other::r--
大写的X权限似乎只能用于设置当前的权限,而不用于设置默认权限:
overt htdocs # setfacl -xu:apache blah.txt overt htdocs # getfacl blah.txt # file: blah.txt # owner: root # group: root user::r-- group::r-- mask::r-- other::r-- overt htdocs # setfacl -mu:apache:rX blah.txt overt htdocs # getfacl blah.txt # file: blah.txt # owner: root # group: root user::r-- user:apache:r-- group::r-- mask::r-- other::r--
那么,但你的榜样确实是你想要的;)
看看第二个:
明显的htdocs#setfacl -dm u:apache:rx。 明显的htdocs#touch blah.txt 明显的htdocs#getfacl blah.txt #文件:blah.txt #所有者:根 #组:根 用户:: R-- 用户:apache:rx #effective:r-- 组:: R-- 面具:: R-- 其他:: R--
重要的路线是:
user:apache:rx #effective:r--
即使acl设置为rx,对于文件也是如此。 这是因为面具。
如果用户使用用户的rw权限创build了掩码,掩码将始终为rw-。 (我不是100%确定,但掩码不能限制那么基本的权限)。
所以有效的你得到r – 文件和rx目录。
因为创build的目录将具有用户:rx – >掩码将是rx – >有效的权限将是rx。
对于文件:他们将有r–所以掩码将被r–并且ACL的有效权限也将是r–。 (如果你创build一个文件并给它一个user :: rx的权限,那么mask就会被修改,而用户形成acl的也会得到x)
这篇关于ACL和口罩的文章确实帮助我理解了如何去做我想做的事情,以及为什么。
我理解的缺失部分是,在创build文件时,内核使用默认权限集0666和新目录0777.因此,默认情况下,目录将设置执行(遍历)位。
ACL掩码基本上是在目录/文件/用户级别设置umask一种方法。
-d(或–default)用于设置目录的默认值,以便在其中创build的东西inheritance(如你所看到的)。
这是一个快速的概述。 http://www.vanemery.com/Linux/ACL/linux-acl.html#default
文件不可能有一个默认值,dirs有不同的默认值。
你可以运行一个cron脚本,每分钟对所有dir进行一次setfacl – 尽pipe这不是一个理想的解决scheme。
find / path / to / top / dir -type d -exec setfacl -dm u:apache:rx {} \;
要么
find / path / to / top / dir -type d | xargs setfacl -dm u:apache:rx
不幸的是,在Linux ACL中没有办法做到这一点。 确实,只要有效的权限,掩码看起来就是你想要的。 但是下一次你做一个重新计算权限掩码的操作, bam ,你的所有文件都将变成可执行的。
你可能只是希望自己能够期望ACL中的所有文件都是可执行的。 这实际上只是一种便利而不是安全function,只要不将这些文件夹放在$ PATH中,就不成问题。 如果仍然困扰您,唯一的select是将您的ACL控制的文件夹放在没有执行选项的文件系统上。