为什么我不是所有者时可以删除 755 文件?

use*_*386 24 filesystem permissions

我有这个文件:

$ ls -l  store.sh 
-rwxr-xr-x   1 root apache    117 Feb  5  2016 store.sh

$ id
uid=48(apache) gid=48(apache) groups=48(apache)
Run Code Online (Sandbox Code Playgroud)

我认为我没有编辑此文件的权限,但可以删除和替换该文件。怎么会这样?有人可以解释这种行为吗?

Olo*_*rin 51

您不需要对文件的写权限来删除或移动(重命名)它。您需要对包含该文件的目录具有写权限,因为删除或重命名不是对文件的操作,而是对目录的文件列表的操作。所以在这种情况下,这个文件的目录可能对apache用户或apache组有写访问权限。

  • @ErelSegal-Halevi:文件没有名字:*目录条目*有名字。您可以更改目录条目指向的文件,但这根本不会更改文件,并且不会影响指向该文件的任何其他指针(例如,指向该文件的其他链接或打开该文件的程序)。 (6认同)
  • @Ron 它没有*坏*,它是有限的。POSIX 权限方案可以很好地为某些用例提供服务,有些用例需要在这些用例之上使用 ACL,而有些用例两者都无法完成,因此您需要重新修改目录结构和围绕这些限制的所有权。这是实现简单性和使用简单性之间的合理折衷。 (6认同)
  • @ErelSegal-Halevi 但你实际上没有。特别是如果同一个文件也以不同的名称链接,可能在不同的目录中,它仍然保持不变。或者,如果某个进程打开了它,该进程仍会访问该文件,而不是您创建的新文件。 (5认同)
  • @RonJohn 那是你最终需要阅读 SELinux 安全上下文/政策的时候。 (5认同)
  • @RonJohn:绝对不是。您应该拥有所需目录的权限,不多也不少。管理员将需要监视和更改目录的权限,以真正满足他们想要的需求和安全性。OP 可以删除他无法编辑的文件并没有被破坏,但它可能指出他的服务器(在那个特定的树枝上)上的权限可能没有真正设置好。 (4认同)
  • @RonJohn 对于这些场景,为这些文件和用户提供特定组,并为该组提供目录上的 w 权限。甚至有可能为进一步的特定需求添加 acl。还有粘滞位帮助(请参阅 /tmp,每个用户都可以创建和编辑文件,但不能删除其他人的文件) (3认同)
  • @RonJohn 不是。文件的实际内容在磁盘上,您无法对其进行编辑。您正在编辑的名称仅指向该文件。它本质上只是您正在编辑的硬链接。 (2认同)