我的默认 umask 是077
.当我创建目录时,它具有权限700
:
mkdir AA
$ stat -c'%A %n' AA/
drwx------ AA/
现在我想将默认权限递归设置为 750:
setfacl -R --default --modify g::rx,o::--- AA
并确认其按预期工作:
$ touch AA/zz
$ stat -c'%A %n' AA/zz
-rw-r----- AA/zz
现在我想ZZ
在我的新目录中复制另一个现有目录AA
:
$ stat -c'%A %n' ZZ ZZ/zz
drwx------ ZZ
-rw------- ZZ/zz
现有目录具有权限700
并且内部文件具有600
.
$ cp -r --no-preserve=all ZZ/ AA/
$ stat -c'%A %n' AA/ZZ AA/ZZ/zz
drwx------ AA/ZZ
-rw------- AA/ZZ/zz
但我的 umask 不被尊重,即使我曾经--no-preserve=all
专门不从现有的ZZ
.
如何使行为与我用来创建新文件cp
时的行为相同?touch
无论原始权限是什么,我都想复制现有的目录结构,同时遵循我的默认 umask/setfacl 设置。
答案1
解决方案: 使用 Debian 11.5 / cp (GNU coreutils) 8.32
1) 这将使用您的用户 umask:
$ cp -r --no-preserve=all ZZ/ AA/
2) 这将使用目标目录中的有效 umask:
$ cp -r ZZ/ AA/
3)这不会使用任何umask:
$ cp -r --preserve=all ZZ/ AA/
你作为(可以在AA目录中创建文件的用户)没有限制覆盖您创建的文件的默认模式。这包括使用实用程序时CP。只要您有写权限,Acl 就不会限制您创建任何文件权限。
结论:一切按预期进行。实用性CP还需要一个选项来使用用户 umask 和 acl(如果存在)。
#=================================================== ========
这是“acl”手册的一部分:
文件实用程序的更改
在支持 ACL 的系统上,文件实用程序 ls(1)、cp(1) 和 mv(1) 按以下方式更改其行为:
• 对于具有默认ACL 或包含三个以上所需ACL 条目的访问ACL 的文件,由ls -l 生成的长格式的ls(1) 实用程序会在权限字符串后显示一个加号(+)。
• 如果指定了 -p 标志,cp(1) 实用程序还会保留 ACL。如果不可能,则会发出警告。 ......
#------------------------------------------------- ----------------
标准
IEEE 1003.1e 草案 17(“POSIX.1e”)文档描述了 IEEE 1003.1 标准的多个安全扩展。虽然 1003.1e 的工作已被放弃,但许多 UNIX 风格的系统实现了 POSIX.1e 草案 17 或早期草案的部分内容。
Linux 访问控制列表实现了 POSIX.1e 中为访问控制列表定义的全套函数和实用程序以及一些扩展。该实现完全符合 POSIX.1e 草案 17;扩展名如此标记。访问控制列表操作函数在 ACL 库(libacl、-lacl)中定义。 POSIX 兼容接口在 <sys/acl.h> 标头中声明。这些函数的 Linux 特定扩展在 <acl/libacl.h> 标头中声明。