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

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

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

考虑以下示例:

$ echo "Hello World" > strange

$ chmod 604 strange

$ ls -l strange
-rw----r-- 1 mrllama foo 12 Apr 13 15:59 strange

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

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

奖励问题:

  • 如果改为权限怎么办642?约翰只能读,只能写,还是两者都可以?
  • 是否有任何理由拥有像这样的奇怪权限604

答案1

使用 Unix 样式权限确定访问权限时,首先将当前用户与文件所有者进行比较,然后与组进行比较,所应用的权限是第一个匹配的组件的权限。因此,文件的所有者拥有所有者的权限(并且仅具有这些权限),文件组的成员具有该组的权限(并且仅具有这些权限),其他人都具有“其他用户”的权限。

因此:

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

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

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

答案2

假设john不带有 uid 0john则没有权限,因为它john是组的成员,并且由于组匹配,权限检查不会考虑世界位(来源:“Unix环境中的高级编程”,第4章,部分第一版第 5 页,第 80 页。)642将导致4出于同样的原因应用这些位。604非常罕见,但可能适合某些人不希望其小组中的其他成员看到的内容。

相关内容