加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 为什么cp不尊重ACL?

发布时间:2020-12-13 18:05:33 所属栏目:Linux 来源:网络整理
导读:在组内设置文件共享目录的常用方法是: $mkdir foo$chgrp felles foo$chmod g+ws foo$setfacl -m group:felles:rwx foo$setfacl -dm group:felles:rwx foo 这可以确保在foo中创建的任何文件都是组felles可读写的: $umask0022$echo hi foo/bar$ls -l footota
在组内设置文件共享目录的常用方法是:
$mkdir foo
$chgrp felles foo
$chmod g+ws foo
$setfacl -m group:felles:rwx foo
$setfacl -dm group:felles:rwx foo

这可以确保在foo中创建的任何文件都是组felles可读写的:

$umask
0022
$echo hi > foo/bar
$ls -l foo
total 4
-rw-rw-r--+ 1 bhm felles 3 2010-09-23 00:18 bar

但是,如果将文件复制到foo,则不应用默认ACL:

$echo you > baz
$cp baz foo/
$ls -l foo
total 8
-rw-rw-r--+ 1 bhm felles 3 2010-09-23 00:18 bar
-rw-r--r--+ 1 bhm felles 4 2010-09-23 00:19 baz
$getfacl foo/baz
# file: foo/baz
# owner: bhm
# group: felles
user::rw-
group::rwx          #effective:r--
group:felles:rwx        #effective:r--
mask::r--
other::r--

为什么会发生这种情况,有没有解决方法呢?

(将文件移动到目录中不会考虑ACL或组所有权,但我可以理解为什么:您可能不希望仅仅因为更改其名称而更改文件的权限.)

解决方法

如果cp创建目标文件,它将复制源文件的权限,但umask中设置的位除外.这是标准行为(参见例如 Single Unix v3 (POSIX 2001) specification中的步骤3.b.

为什么cp这样设计?因为在许多情况下需要这种行为,例如在原始权限是限制性时保留文件的隐私,并且保持可执行性几乎总是正确的.然而,遗憾的是,即使GNU cp也没有选择关闭此行为.

大多数复制工具(例如pax,rsync)的行为方式相同.您可以通过将源与目标分离来确保使用默认权限创建文件,例如使用cat< baz> foo / baz.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读