限制“组”权限但打开“世界”权限?

Mr.*_*ama 5 permissions chmod files

我知道对于 Unix 文件权限,有“用户”、“组”和“世界”八位字节。为便于讨论,我们假设 setuid/sticky 位不存在。

考虑以下示例:

$ echo "Hello World" > strange

$ chmod 604 strange

$ ls -l strange
-rw----r-- 1 mrllama foo 12 Apr 13 15:59 strange
Run Code Online (Sandbox Code Playgroud)

假设有另一个用户john,他是我组的成员foo

  • John 对这个文件有什么权限?
  • 系统是否采用最具体的权限匹配(即约翰不是所有者,但他在foo组中,因此使用“组”八位字节的权限)?
  • ...或者它是否适用于适用于他的八位字节中最宽容的(即约翰符合“组”和“世界”的标准,因此它与两者中更宽容的一起使用)?

奖金问题:

  • 如果权限是642?约翰只能读,只能写,还是两者兼而有之?
  • 是否有任何理由拥有奇怪的权限,例如604

Ste*_*itt 6

在使用 Unix 风格的权限确定访问权限时,将当前用户与文件的所有者、组进行比较,应用的权限是第一个匹配的组件的权限。因此文件的所有者拥有所有者的权限(并且只有这些),文件组的成员拥有组的权限(并且只有那些),其他所有人都拥有“其他用户”的权限。

因此:

  • John 没有此文件的权限。
  • 最具体的权限匹配获胜,而不是最宽松的(访问权限不累积)。
  • 有了权限642,约翰就可以读取文件。
  • 有理由授予权限,例如604:这允许排除该组,这在某些情况下可能很方便 - 我在带有students组的学术系统中看到过它,在那里工作人员可以创建除学生以外的任何人都可以访问的文件。

root 无论文件上定义的权限如何,都可以访问所有内容。

对于更复杂的访问控制,您应该查看SELinuxPOSIX ACL。(特别是 SELinux 甚至可以限制可以root访问的内容。)