背景故事:客户端具有 POSIX 和 NFSv4 的混合环境。每次接触底层 NFSv4 ACL 或对其执行任何操作时,POSIX 都会破坏它。他们表示,即使 NFSv4 ACL 关闭了删除参数,用户也可以将一个文件夹移动到另一个文件夹中。就像移动就是删除一样。
然后,客户端尝试 chmod 1755 到该文件夹,但文件仍然可以移动。
该文件的父 ACL 如下所示:
#NFSv4 ACL
#owner:root
#group:root
special:owner@:rwxc:allow
(X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (X)DELETE_CHILD (X)CHOWN (X)EXEC/SEARCH (X)WRITE_ACL (X)WRITE_ATTR (X)WRITE_NAMED
special:group@:rwx-:allow
(X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (X)DELETE_CHILD (-)CHOWN (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
special:everyone@:rwx-:allow
(X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (X)DELETE_CHILD (-)CHOWN (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
当我在此父文件夹中创建测试目录时,我得到以下 NFSv4 ACL:
#NFSv4 ACL
#owner:root
#group:root
special:owner@:rwxc:allow
(X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (X)DELETE_CHILD (X)CHOWN (X)EXEC/SEARCH (X)WRITE_ACL (X)WRITE_ATTR (X)WRITE_NAMED
special:group@:r-x-:allow
(X)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (-)DELETE_CHILD (-)CHOWN (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
special:everyone@:r-x-:allow
(X)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (-)DELETE_CHILD (-)CHOWN (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
当我在这个新目录中创建测试文件时,我得到以下 NFSv4 ACL:
#NFSv4 ACL
#owner:root
#group:root
special:owner@:rw-c:allow
(X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (-)DELETE_CHILD (X)CHOWN (-)EXEC/SEARCH (X)WRITE_ACL (X)WRITE_ATTR (X)WRITE_NAMED
special:group@:r---:allow
(X)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (-)DELETE_CHILD (-)CHOWN (-)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
special:everyone@:r---:allow
(X)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (-)DELETE_CHILD (-)CHOWN (-)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
我发现了以下内容,我相信通过将粘性位应用于 NFSv4 ACL = MODE4_SVTX 可能会有所帮助如何将其直观地集成到我现有的 NFSv4 ACL 中?弄清楚这一点后,我可以继续将其推下树。
是否是 ACL 中的删除子元素允许将这些文件夹移至其他文件夹?
目标:找到一种方法,允许 NFSv4 ACL 上的粘性位阻止除该文件所有者以外的其他人移动/删除该文件。
额外信息:
两个访问掩码位控制删除目录条目的能力:对象本身(“目标”)上的 ACE4_DELETE,以及包含目录(“父”)上的 ACE4_DELETE_CHILD。许多系统还在目录上采用“粘性位”(MODE4_SVTX),以仅允许取消链接到拥有目标或父级的用户;在某些此类系统上,该决定还取决于目标是否可写。
如果目标上允许 ACE4_DELETE,或者父级上允许 ACE4_DELETE_CHILD,服务器应该允许取消链接。 (请注意,即使父级或目标明确拒绝这些权限之一,情况也是如此。)
如果所讨论的 ACL 既没有显式地允许也没有明确地拒绝上述任何一种,并且如果父级上没有设置 MODE4_SVTX,那么当且仅当允许 ACE4_ADD_FILE 时,服务器才应该允许删除。在设置 MODE4_SVTX 的情况下,服务器还可能要求删除者拥有父级或目标,或者可能要求目标可写。
这允许服务器支持类似于传统 UNIX 语义的东西,用 ACE4_ADD_FILE 代替写入位。