文件权限中用户和组所有者的优先级

Modified on: Sat, 30 Jun 2018 05:55:30 +0800

我遇到了一些关于Linux(Arch Linux)上的文件权限的意外(对我而言)。基本上我有:

    userX 中的
  • groupX
  • fileX userX:groupX ---rwx----

让我感到困惑的是:我无法对rwx执行任何操作(fileX)。这是正确的吗?有人可以确认这确实是预期的行为吗?

我可以执行的唯一操作是mvrm,因为我对父目录有写权限。

问题是,我一直认为这些权限相互崩溃,从最常见的一个(其他 - > group - > user)开始。换句话说,如果o=rwx谁关心组和用户的持久性是什么?
显然事实并非如此,但对我来说没有多大意义;这似乎违反直觉。这种方法似乎唯一有用的,就是轻松排除一个非常特定的人/团体,这似乎不是一个聪明的方法(imho)。此外,所有者(和组?)应该能够chmod了吗?对此事有何想法?

作者:Gilles,alex

最佳答案

  

问题是,我一直认为这些权限会相互崩溃,从最常见的权限开始(其他 - > group - > user)。

如果是这种情况,那么“其他”权限将适用于所有人。

  

换句话说,如果o = rwx谁关心群组和用户的持久性?

这与你之前的句子不同。在这里,您暗示权限是或者在一起,例如,如果userX拥有该文件并且该文件是用户可读的,或者如果userX所属的组拥有该文件且该文件是组可读的,或者该文件是其他可读的,则userX具有读取权限。但这不是它的工作原理。实际上,o=rwx意味着rwx权限适用于其他人,但它没有说明任何与其他实体不同的实体。

首先,用户属于哪个组并不重要。内核没有属于组的用户的概念。对于每个进程,内核维护的是用户ID(有效的UID)和组ID(有效GID和补充GID)列表。这些组是在登录时通过登录过程确定的 - 它是读取组数据库的登录过程(例如/etc/group)。用户和组ID由子进程¹。

继承

当进程尝试使用传统的Unix权限打开文件时:

  • 如果文件的拥有者是进程的有效UID,则使用用户权限位。
  • 否则,如果文件的拥有组是进程的有效GID或进程的补充组ID之一,则使用组权限位。
  • 否则,使用其他权限位。

只使用了一组rwx位。用户优先于优先于其他的组。如果有访问控制列表,则会推广上述算法:

  • 如果文件中有进程的有效UID的ACL,则用于确定是否授予访问权限。
  • 否则,如果文件中有进程的有效GID或进程的补充组ID之一,则使用组权限位。
  • 否则,使用其他权限位。

另见优先顺序当用户属于多个组时的ACLS,以获取有关如何使用ACL条目的更多详细信息,包括掩码的效果。

因此-rw----r-- alice interns表示一个可由Alice读取和写入的文件,除了实习生之外,所有其他用户都可以读取该文件。具有权限和所有权----rwx--- alice interns的文件只能由Alice以外的实习生访问(无论她是否是实习生)。由于Alice可以调用chmod来更改权限,因此不提供任何安全性;这是一个边缘案例。在具有ACL的系统上,通用机制允许从特定用户或特定组中删除权限,这有时很有用。

使用单个位集,而不是每个操作(读,写,执行)的所有位,或者包含所有位,有几个优点:

  • 它具有允许在具有ACL的系统上从一组用户或组中删除权限的有用效果。在没有ACL的系统上,可以从一个组中删除权限。
  • 实现起来比较简单:检查一组位,而不是将几组位组合在一起。
  • 分析文件的权限更简单,因为涉及的操作更少。

¹执行setuid或setgid进程时,它们可能会发生变化。这与手头的问题无关。

作者:Community,Gilles

相关问答

添加新评论