我正在使用以下步骤来设置权限和默认 acl 权限。
chown as required
find . -type d -exec chmod 770 {} \;
find . -type f -exec chmod 660 {} \;
find . -type d -exec chmod g+s {} \;
setfacl -Rdm g::rw .
setfacl -Rdm u::rw .
setfacl -Rdm o::- .
这会产生所需的结果,只是无法输入新创建的子目录(按所有者或组),因为它们具有 660 权限而不是 770。如何在不更改新文件的默认权限的情况下纠正这一问题?
目前我们必须在创建新的子目录后执行此操作:
chmod ug+x <sub-directory>
我想消除该手动步骤,因为我的用户通常不知道如何执行此操作。我希望他们能够在文件管理器中创建一个目录并可以立即访问它。
更新:所有用户的 umask 设置如下:
cat /etc/profile
# /etc/profile
umask 006
答案1
您正在设置根本没有执行权限的默认 ACL,因此没有人具有执行权限。相反,正如 Patrick 在评论中提到的,使用权限设置默认 ACL X
。小写x
表示该ACL条目授予执行权限。仅当某个用户(通常是所有者)具有执行权限时,大写X
才会授予执行权限。
除非你做了一些不寻常的事情,否则总是在有 ACL 的地方放入X
默认 ACLr
。没有什么理由让文件或目录可读但不可执行,反之亦然。 Unix 将执行和读取实现为单独的权限,对于目录,它实现了遍历和列出为单独的权限,但很少有情况需要这样做:通常允许一组用户修改文件,也允许更大的用户组访问它而不修改它,对于常规文件,该文件可能是可执行的,也可能不是可执行的,但该属性不取决于谁试图访问它。
setfacl -Rdm g::rwX .
setfacl -Rdm u::rwX .
setfacl -Rdm o::- .