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

unix – 为什么组上的chmod(1)会影响ACL掩码?

发布时间:2020-12-15 18:39:36 所属栏目:安全 来源:网络整理
导读:我试图理解这种Unix行为(我碰巧在Ubuntu 11.10上测试): $touch foo$setfacl -m u:nobody:rwx foo$getfacl foo# file: foo# owner: michael# group: michaeluser::rw-user:nobody:rwxgroup::rw-mask::rwxother::r--$chmod g-rw foo$getfacl foo# file: foo#
我试图理解这种Unix行为(我碰巧在Ubuntu 11.10上测试):
$touch foo
$setfacl -m u:nobody:rwx foo
$getfacl foo
# file: foo
# owner: michael
# group: michael
user::rw-
user:nobody:rwx
group::rw-
mask::rwx
other::r--

$chmod g-rw foo
$getfacl foo
# file: foo
# owner: michael
# group: michael
user::rw-
user:nobody:rwx         #effective:--x
group::rw-          #effective:---
mask::--x
other::r--

请注意,chmod(1)命令已更新ACL掩码.为什么会这样?

SunOS manpage有如下说法:

If you use the chmod(1) command to change the file group owner
permissions on a file with ACL entries,both the file group owner
permissions and the ACL mask are changed to the new permissions. Be
aware that the new ACL mask permissions may change the effective
permissions for additional users and groups who have ACL entries on
the file.

我问,因为如果chmod(1)没有这种行为,对我来说会很方便.我希望通过了解它为什么会这样做,我可以更好地设计我如何设置文件系统权限.

如果chmod()没有这种行为,那对你来说不方便.

这将是非常不方便的,因为人们传统上期望在Unix上工作的东西会破坏.这种行为很好,你知道吗.

令人遗憾的是,IEEE 1003.1e从未成为标准,并于1998年被撤销.实际上,十四年后,它是一个标准,从Linux到FreeBSD到Solaris的各种操作系统实际上都在实施.

IEEE 1003.1e工作草案#17有趣阅读,我推荐它.在附录B§23.3中,工作组提供了详细的八页原理,说明了POSIX ACL与旧的S_IRWXG组权限标志相关的复杂方式. (值得注意的是,十年前TRUSIX人提供了相同的分析.)我不会在这里复制所有内容.请阅读标准草案中的基本原理以获取详细信息.这是一个非常简短的précis:

> SunOS手册错了.它应该读

If you use the chmod(1) command to change the file group owner permissions on a file with ACL entries,either the file group owner permissions or the ACL mask are changed to the new permissions.

这是您可以看到的行为,尽管当前的手册页在您的问题中说明了这一点.它也是POSIX标准草案规定的行为.如果存在CLASS_OBJ(Sun和TRUSIX的ACL_MASK术语)访问控制条目,则chmod()的组位设置它,否则它们设置GROUP_OBJ访问控制条目.
>如果不是这种情况,使用`chmod()`执行各种标准事务的应用程序,希望它作为`chmod()`工作,传统上用于旧的非ACL Unix,会留下大量安全漏洞或看到他们认为是安全漏洞:

>传统的Unix应用程序希望能够使用chmod(…,000)拒绝对文件,命名管道,设备或目录的所有访问.在存在ACL的情况下,如果旧的S_IRWXG映射到CLASS_OBJ,则仅关闭所有用户和组权限.如果没有这个,将旧文件权限设置为000将不会影响任何USER或GROUP条目,并且令人惊讶的是,其他用户仍然可以访问该对象.暂时将文件的权限位更改为不能使用chmod 000访问,然后将其更改回来再次是一个旧的文件锁定机制,在Unix获得咨询锁定机制之前使用,即— as you can see — people still use today.
>传统的Unix脚本希望能够运行chmod go-rwx并最终只有对象的所有者能够访问该对象.十二年后再次— as you can see — this is still the received wisdom.而且,除非旧的S_IRWXG映射到CLASS_OBJ(如果存在),否则这不起作用,否则chmod命令不会关闭任何USER或GROUP访问控制条目,导致除了所有者和非拥有组之外的用户访问预期只能由所有者访问的内容.
>在大多数情况下,权限位与ACL分开并且与ACL分开的系统将需要文件权限标志为rwxrwxrwx,这会使许多Unix应用程序混淆,当他们看到他们认为是世界时会抱怨可写入的东西.权限位以其他方式与ACL分开和存储的系统将具有前面提到的chmod(…,000)问题.

进一步阅读

>WinfriedTrümper(1999-02-28). Summary about Posix.1e
> IEEE计算机学会便携式应用标准委员会(1997年10月).
Draft Standard for Information Technology—Portable Operating System Interface (POSIX)—Part 1: System Application Program Interface (API)— Amendment #: Protection,Audit and Control Interfaces [C Language] IEEE 1003.1e.草案17.>克雷格鲁宾(1989-08-18).为Unix系统选择访问控制列表功能的基本原理. NCSC-TG-020-A. DIANE出版社. ISBN 9780788105548.

(编辑:李大同)

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

    推荐文章
      热点阅读