据我了解,一个文件有三组权限:所有者权限、组权限和其他人权限。此外,该文件已分配给所有者和组。
linux 如何结合所有这些信息来实际确定给定用户对该文件的权限?
例如,假设一个文件是:
--- 读写---x
也就是说,所有者没有权限,组可以读/写,其他人只能执行。
现在用户“Joe”来到这个文件。根据 Joe 属于哪个组,以及 Joe 是否是该文件的所有者,他可以用它做什么?他可以执行该文件,因为x
它是为每个人设置的。但如果“Joe”是所有者,x
则为所有者所禁止。什么优先?
答案1
Linux 权限是互斥的。因此,所有者权限仅适用于所有者,组权限适用于除所有者之外的组中的每个人,而其他权限适用于其他人,即不适用于组和所有者。根据尝试访问该文件的进程的 UID 和 GID,将仅使用这些权限之一。
在您的情况下,如果 Joe 是文件的所有者,则无论他属于哪个组,他都无法执行任何操作。
如果 Joe 不是所有者,但属于该组,则他可以读取和写入,但不能执行。
如果乔既不是所有者也不是团体的一部分,他只能执行。
答案2
德米特里·格里戈里耶夫(Dmitry Grigoryev)上面的回答是正确的。作为助记符,这就是为什么我们通常会看到“左侧更宽”的权限:你≥G≥哦。常见的模式有 755、644 和 600。例如,拒绝所有者但允许组的情况是不常见的。我确信我从未见过你的 061 实际使用过。
答案3
算法是这样的:
- 如果您是文件的所有者,则应用所有者权限
- 否则,如果您是文件所属组的一部分,则应用组权限
- 否则,如果文件系统启用了 ACL 并且有提及您的 ACL 条目,则应用这些条目
- 否则,“其他”权限适用
在您的示例中,如果 Joe 是文件的所有者,他将无法执行任何操作。如果文件属于 Joe 所在的组,他将能够读取或写入,但不能执行。如果两者都不成立,Joe 将能够执行,但不能读取或写入。