谁说文件不能属于多个组的?支持 ACL 扩展就可以,现在大多数发行版都支持,只是默认它不给你显示出来罢了。
为避免无休止的争论,特意补充说明一些观点,不强求接受,若有异议还请引用权威文档让我补补课,争论就免了吧。
首先我上面的回答其实也不严谨,文件的确不能“属于”多个组,因为“属于”这个概念根本就是错的。只不过国内的开发者们嘴上说习惯了,算是一种约定俗成吧,加上楼主的原题就是这么问的,我就将错就错了,因为要解释清楚的话我犯懒。但是有朋友与我争论良久,评论里面打字不方便而且总显得对人不对事,那我就多说两句好了。
首先我要声明我不是在瞎说,几年前我是苹果 AATC 的认证讲师,负责的就是操作系统课程的培训和考试,也就是 ACSP 认证(如果我没记错名字的话)。当时去考讲师的时候是苹果的专家给我们上的课。ACSP 的教程里专门有一章是讲文件系统与权限管理的,而且特别有一节就是讲 ACL,当时一起上课的朋友也有问过和楼主一样的问题的,讲师就把我们训了一通,说你们以后去培训的时候千万不要说什么文件属于用户组这样误人子弟的话,这个概念捋不清楚就不要做讲师了。
虽然 Mac OS 不是 Linux,但是这个血缘关系就不用多讲了,至少文件系统、权限管理以及 ACL 这些东西是没多大区别的。
回到正题,为什么说“文件属于用户组”是伪命题?
因为文件从来就只有一个 owner,也就是创建该文件的用户,并且 ownership 也是可以改的。从这个意义上来讲,也许文件只能真正属于文件系统或者说操作系统,只要你有足够的权限,你就“拥有”这个文件。
文件创建的时候,owner 所属的主组会成为该文件的 owner group。那有人就问了,这还不能叫做“归属组”?是的,虽然我们经常看到 owner group 这个词出现,但是它的真实含义是 owner's group,它强调的是 owner 所在的那个组(默认是主组,可以改),而不是这个组 own 这个文件,要不然的话应该是该组下所有的用户都是这个文件的 owner 才对!可能吗?
文件只能有一个 owner,而一个组可能有多个用户,所以如果一个组也是文件的 owner,那就意味着这个文件可以有多个 owner,但是一个文件只能有一个 owner……还能绕回来不?
用一句话描述这种关系就是:所有者创建了文件,则默认所有者的主组具有和所有者对于访问该文件相同的权限。这是一种权限的默认分配机制,并不是宣称文件归该组所有。所以“文件属于用户组”这个说法看似成立,实则是一种误解。
ACL 在原始的权限分配机制上进行了扩展,使得对于文件的默认分配机制除了可以被覆盖(也就是改变 owner group)之外,还可以被扩展,这当然是有意义的!因为我可以让多个组针对目标文件具有不同的访问权限,于是就可以延伸到多个用户(因为你没有办法指定多个 owner)。
然而,并不能因此就觉得 owner group 要比 ACL 扩展的 groups 高出一筹了。就好像强调“归属组”就能比其他组多出什么权限来一样,这是一种莫名的认知。你完全可以设定其他组具有比 owner group 还要高的访问权限,甚至用其他组替代 owner group,你能说文件到底“属于”谁呢?
之所以 owner group 这个概念还存在完全是一个历史遗留,也是因为 owner 一次只能有一个,所以 owner group 默认的就是 owner 的主组了。这种经典权限分配机制诞生的时候没过多考虑后来扩展的问题,这才导致如今你不用其他工具就根本看不到 ACL 分配的扩展权限。
用对象关系来做一个形象的比喻,文件对象归属于一个拥有者(file belongs to a owner),而一个拥有者可以拥有多个文件对象(owner has many files)。文件对象可以拥有多个组的访问权限(file has many groups),用户可以拥有多个组的访问权限(user has many groups),因此文件对象可以被多个用户以多种不同的权限访问(file can be accessed by many users w/ different permissions)
这才是它们之间的正确关系,但是很显然跑题太远了。
就说这些吧,我个人觉得 Linux 世界里的很多观点是永远都不可能统一的,大家求同存异就好。以上是我的理解(或者说我被洗的脑),是否接受请随意。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。