如何让新创建的文件和目录继承父目录的权限?
例如,
Parent
drwxrwx--- parentdir
那么孩子们应该 -
-rwxrwx--- childFile
drwxrwx--- childDir
我知道 setgid,但是它只会将组 ID 更改为所有者的组 ID,而不会复制父级的确切权限。
答案1
您需要使用 定义“默认 ACL” setfacl
。这不仅适用于命名用户/组 ACL,还适用于基本的未命名权限位:
setfacl -d -m "u::rwx,g::rwx,o::-" parentdir
请注意,您不能强制新文件为可执行文件;即使 ACL 授予 +rwx,新创建的文件仍将有一个mask::
条目将其限制为仅 +rw,因为这是通常大多数人想要的,因为子文件和子文件夹不可能有不同的默认 ACL。
(另请注意,一旦文件或文件夹具有 ACL,尝试通过 chmod 更改其“组”rwx 权限实际上会更改面具一次影响所有 ACL 的条目 – 而不仅仅是未命名组条目。这通常很好,因为它可以让您清楚地看到ls -l
文件是否已授予任何人写入权限,但这也意味着,如果要仅更改未命名组的访问权限,您现在需要setfacl -m g::???
。)
这不会影响 setgid 位,可以chmod g±s
照常使用来更改它。
(另请注意,与 Windows 或 NFS4“可继承”ACL 不同,POSIX“默认”ACL 仅在创建项目时生效,但子项目权限不是当父级的“默认”ACL 发生改变时重新计算。
了解更多信息:
- Linux 上的 POSIX 访问控制列表
- “ACL 条目”setfacl(1)