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


20

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

  • userXgroupX
  • fileX userX:groupX ---rwx----

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

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

事实是,我一直认为这些权限会相互崩溃,从最一般的权限开始(其他->组->用户)。换句话说,如果o=rwx谁在乎组和用户的权限是什么?显然不是这种情况,但是对我来说没有太大意义。似乎违反直觉。这种方法似乎唯一有用的是,轻松地排除非常特定的人员/组,这似乎并不是明智的选择(恕我直言)。此外,所有者(和组?)应该仍然可以chmod吗?关于这个问题有什么想法吗?


您肯定在groupX中吗?
exussum 2014年

是的,肯定;检查有效GID与id
亚历

Answers:


24

事实是,我一直认为这些权限会相互崩溃,从最一般的权限开始(其他->组->用户)。

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

换句话说,如果o = rwx谁在乎组和用户的权限是什么?

这与您之前的句子不同。在这里,您的意思是权限是或在一起的,例如,如果userX拥有该文件并且该文件是用户可读的,则userX拥有读取权限,或者如果userX所属的组拥有该文件并且该文件为group -可读,或者文件是否其他可读。但这不是它的工作方式。实际上,这o=rwx意味着该rwx权限适用于其他人,但对于没有其他人的实体并没有说什么。

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

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

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

曾经只使用过一组rwx位。用户优先于组,用户优先于其他组。当存在访问控制列表时,上述算法被概括为:

  • 如果文件上存在用于该过程的有效UID的ACL,那么它将用于确定是否授予访问权限。
  • 否则,如果文件上存在用于该过程的有效GID或该过程的补充组ID之一的ACL,则将使用组许可位。
  • 否则,将使用其他权限位。

有关用户如何使用ACL条目(包括掩码的效果)的更多详细信息,另请参阅当用户属于多个组时ACLS的优先级

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

使用单个位集,而不是对每个操作(读,写,执行)的所有位进行“或”运算,具有以下优点:

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

¹ 当执行setuid或setgid进程时,它们可以更改。这与手头的问题无关。


好吧……通过“崩溃”,我的意思是同一件事,一个OR操作:)
Alex

谢谢你的时间; +1获得非常详细,非常技术性的答案
Alex

好答案。但是我对您的最终要点有一个疑问:实施和分析真的更简单吗?是否不会像OP认为的那样将权限检查归结为对权限进行“或”运算?
gardenhead

这种边缘情况对我来说仍然很愚蠢:(groupX中的userX)+(groupX中的userZ)。您有一个fileX userX:groupX --- rwx ----。现在,原始文件夹创建者userX无法访问fileX ..,而userZ可以。他们都属于同一组。真的很不直观。
alexfvolk

4

权限越具体,优先级越低。

groupX中的userX

fileX userX:groupX --- rwx ----

由于您是文件的所有者,因此将仅被授予所有者权限。所有者没有权限。因此,您无能为力。如果您不是文件所有者和组成员,则将应用组权限。

请阅读维基页面的这一部分

https://zh.wikipedia.org/wiki/File_system_permissions#Classes


2

-rwxrw---- 表示所有者拥有读取,写入和执行权限,组拥有读取和写入权限,而其他人则没有权限。

您提供的权限为组“ groupX”授予读取,写入和执行文件的权限。如果您是“ groupX”组的成员,但不是文件所有者,则这些权限将适用于您。

在这种情况下,我假设您确实是文件的所有者。这样,只有为所有者设置的权限才适用于您。当然,所有者可以覆盖或更改文件的权限。但是,该小组无法做到这一点。例如,vim会提示您确认是否正在写入您没有写许可权但是其所有者的文件。

我通常从左到右阅读权限。我是主人吗?如果是,则应用所有者权限。如果不; 我是该小组的成员吗?如果是,则应用组权限。如果不是,则“其他”的权限适用于我。

在某些情况下,成为文件的所有者但没有写权限很有用。它可以防止您意外删除或修改文件。我个人已将所有模板文件的权限设置为400,以确保我不会意外修改它们。执行权限也是如此。


1
我相信您误解了这个问题。当OP将权限“其他”->“组”->“用户”称为“崩溃”时,我认为这意味着在确定是否允许您的操作时,首先要检查“其他”权限,然后是“组”权限,最后是(如果还有其他所有权限)失败)的“用户”。
2014年

@JosephR。是的,那就是我的意思:)
Alex

哦,很抱歉 我将删除该部分。答案中有什么有用的吗?
arnefm 2014年

注意:您应该稍微修改一下答案,然后删除(或重新措辞)第二段,因为该段“模糊”(不够清晰,与我描述的行为相矛盾)
Alex

再次考虑,我可能会很快接受答案。对于那个很抱歉。因此,您说的是,有时具有写权限非常有用,这样您就可以避免意外更改一些重要文件。但是当其他人拥有完全权限时,这有什么用呢?(所以... 将避免犯错,而不会犯其他错误)
Alex

0

我能够将用户添加到组中,为该组授予目录权限(070),然后在重新启动后便可以访问该文件夹。

创建组:sudo groupadd组名

将用户添加到组:sudo gpasswd -a用户名groupname

确保整个目录都在正确的组所有权下(必须是组名的当前成员才能执行):sudo chgrp -R组名directory_path /

只给该文件夹的组rwx(可以只是rw,根据需要进行调整):sudo chmod -R 070 directory_path

完成上述操作后,请确保注销并重新登录。如果这样不起作用,请重新启动计算机。这样做对我有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.