我有一个具有以下 ACL 规则设置的目录:
cd /nobackupp13/jrwrigh7
getfacl .
我明白了
# file: .
# owner: jrwrigh7
# group: a1983
user::rwx
group::r-x
group:a1983:r-x
mask::r-x
other::---
default:user::rwx
default:group::r-x
default:group:a1983:r-x
default:mask::r-x
default:other::---
但是,当我在此目录中创建 testfile 时,不会mask
采用默认值并将文件的权限限制为仅r--
而不是r-x
:
cd /nobackupp13/jrwrigh7
touch testfile
getfacl testfile
我明白了
# file: testfile
# owner: jrwrigh7
# group: a1983
user::rw-
group::r-x #effective:r--
group:a1983:r-x #effective:r--
mask::r--
other::---
据说umask
应该被 ACL 覆盖(参见https://serverfault.com/q/349145/530204
),但无论如何,这里是结果umask
:
cd /nobackupp13/jrwrigh7
umask
我明白了
077
是否有其他权限系统阻止此操作?
最终目标是让该目录中创建的每个文件都由r-x
该组创建a1983
。我经历这个的全部原因是我的研究小组总是遇到在我们没有管理控制权的计算机上访问/运行彼此的文件的问题。我们希望确保每个脚本文件都是可执行的,无论所有者是否如此设置。
答案1
一般信息
当系统调用创建文件时,open()
会有一个mode
设置。文件获得的每个权限都必须在此mode
参数中请求。
如果父目录没有默认 ACL,则文件的权限将mode
与umask
.
如果父目录确实有默认 ACL,则这些并mode
确定所有者权限和其他人的权限。
所有其他 ACL 条目均采用默认 ACL 不变。为了达到相同的效果,ACL 掩码不是根据ACL_USER
, ACL_GROUP
, 条目计算的ACL_GROUP
(与显式设置 ACL 时的情况相同),而是将其设置为 的组部分mode
。
mode
掩码值由默认 ACL和默认掩码决定。它仅包含所有三个元素中包含的权限。因此,通常会减少默认掩码,但它也可以用于减少其他值。
如果程序行为“奇怪”,结果可能会令人困惑。例如,gcc
使用 mode 创建输出文件666
,然后chmod()
使用777
.但这只会影响所有者和其他人的权限,因为 ACL 条目具有优先权。
你的情况
touch
使用 mode 创建文件666
。- 默认 ACL 设置为
750
- 结果(两者都包含权限)是
640
。
答案2
如果该文件不是目录或可执行文件(由编译器输出),则它将不具有执行权限。
请记住 umask 是一个掩码。它不会添加权限,只会阻止它们。创建文件的程序将使用 模式rw
,掩码将在拥有用户上允许此操作,并w
在组上阻止 ,并在其他用户上阻止所有。