将 g=rx 的目录 cp 到 default:mask::rwx 和 default:group::rwx 的目录时,ACL 掩码未更新

将 g=rx 的目录 cp 到 default:mask::rwx 和 default:group::rwx 的目录时,ACL 掩码未更新

我想创建一个目录,其中的所有文件都可由一组特定用户读取/写入。这应该适用于此目录中的新文件/目录,以及复制到此目录中的文件/目录。

现在我对 ACL 掩码感到困惑。我尝试了以下方法:

创建具有以下 ACL 的目录:

$ getfacl dirWithAcl 
# file: dirWithAcl
# owner: rainer
# group: users
user::rwx
user:nobody:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:nobody:rwx
default:group::rwx
default:mask::rwx
default:other::r-x

这样,在里面创建文件和目录就dirWithAcl可以正常工作。

但是现在我创建了一个测试文件夹外部此文件夹。根据我的 umask,它具有以下权限:

drwxr-xr-x  2 rainer users 4.0K Sep 11 08:21 testdir/

dirWithAcl当我现在使用将此文件夹复制到 时cp -r testdir dirWithAcl,副本具有以下 ACL:

getfacl testdir 
# file: testdir
# owner: rainer
# group: users
user::rwx
user:nobody:rwx         #effective:r-x
group::rwx          #effective:r-x
mask::r-x
other::r-x
default:user::rwx
default:user:nobody:rwx
default:group::rwx
default:mask::rwx
default:other::r-x

mask 已经设置为 rx,好像是先将原 testdir 目录的组权限转换为 mask,然后才应用默认组。

如果我现在再次将副本的组权限设置为 rwx (实际上已经是),则掩码会突然更新为正确值:

$ setfacl -m "group::rwx" testdir 
$ getfacl testdir 
# file: testdir
# owner: rainer
# group: users
user::rwx
user:nobody:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:nobody:rwx
default:group::rwx
default:mask::rwx
default:other::r-x

有人能解释一下这种行为吗?我也很高兴能被重定向到一些比手册页更详细的关于 ACL 的解释。

此外,我想知道是否可以将文件夹中所有文件的组权限设置为 --- 并且仅使用 ACL 控制权限。新文件和复制文件都获得 mask:rwx

感谢您的帮助:)

答案1

要将 ACL 从一个目录复制到另一个目录,您必须cp使用开关指示执行此操作-a。换句话说,使用cp -a src dst

编辑 继承的 ACL 不会授予文件原本不具备的权限。换句话说,如果源文件没有组写入权限,则不会通过简单地将其移动到启用 ACL 的目录中来继承权限。

答案2

cp -r --no-preserve=mode src dst作品。

相关内容