事实是,我一直认为这些权限会相互崩溃,从最一般的权限开始(其他->组->用户)。
如果是这种情况,那么“其他”权限将适用于所有人。
换句话说,如果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进程时,它们可以更改。这与手头的问题无关。