我正在编写一个 Fuse 文件系统。
到目前为止一切正常,没有遇到无法解决的问题(性能除外)。
然而,我读了以下文章:
http://linuxcommand.org/lts0070.php
http://www.perlfect.com/articles/chmod.shtml
http://mason.gmu.edu/~montecin/UNIXpermiss.htm
http://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions
http://www.tutorialspoint.com/unix/unix-file-permission.htm
https://kb.iu.edu/d/abdb
我有以下问题:
给定一个通用的 unix 权限字符串 -
我理解该字符串(在第一个字符之后)被分成 3 个组(rwx)
owner
owner_group
all/world/anyone
但是,其中一篇文章明确指出,1 个用户可以加入 N 个群组。
那么为什么这里的所有者是单数呢团体(不是群组)?如果我(文件创建者,因此是所有者)属于一些团体?
假设我是 A 组、B 组和 C 组的成员。
现在我在某处创建一个文件。
由于表达式owner_group是单数,并且非复数,所有者组权限应用于哪个组
?异或乙异或C,还是全部,还是全部都不适用?
如果只适用于一个(单数表示),如何确定将权利分配给哪个组?
我强烈地感觉到我不太理解这里的某些东西,或者我误解了“所有者群体”一词的含义。
答案1
- 一个用户可能是多个组的成员。
- 一个文件只能由一个组和一个用户拥有。
- 如果用户是文件所有者组的成员(即,组
foo
拥有该文件并且该用户的组之一是foo
),则相应的组权限适用于该用户(除非被所有者权限覆盖)。
所有者组是文件所有权的一部分。考虑:
$ stat /usr/bin/crontab
File: ‘/usr/bin/crontab’
Size: 35984 Blocks: 72 IO Block: 4096 regular file
Device: 803h/2051d Inode: 131439 Links: 1
Access: (2755/-rwxr-sr-x) Uid: ( 0/ root) Gid: ( 103/ crontab)
Access: 2015-02-05 20:20:43.438507538 +0530
Modify: 2013-02-09 12:32:23.000000000 +0530
Change: 2014-09-30 19:22:09.508515013 +0530
Birth: -
这表明该文件的所有权属于用户root
和组crontab
。
假设我是 A 组、B 组和 C 组的成员。现在我在某处创建一个文件。... [对]哪个组应用了 Owner_Group 权限?
这取决于您创建该文件时您的主要组。主要组是运行该groups
命令时列出的第一个组。通常,这由您的 GID 决定。但是,您可以使用该命令暂时将您的其他组之一设置为主要组newgrp
。例如:
$ groups
muru adm cdrom sudo dip plugdev lpadmin sambashare
$ rm foo; touch foo
$ stat -c %G foo # this prints the owner group of the file
muru
$ newgrp sudo
$ rm foo; touch foo
$ stat -c %G foo
sudo
我强烈地感觉到我不太理解这里的某些东西,或者我误解了“所有者群体”一词的含义。
所有者组是文件的属性,而不是用户的属性。
我理解字符串(第一个字符之后)被分成 3 个组(rwx)
owner owner_group all/world/anyone
稍微偏离:第三个字段是其他的, 不是全部。其他的涵盖除文件所有者和文件所有者组成员之外的所有人。使用符号模式时,区别就显现出来了chmod
:
chmod a-x
取消所有人的执行权限chmod o-x
剥夺其他所有人的执行权限,但保持所有者和所有者组的执行权限不变。
最后,关于用户私人组的说明。UPG 在桌面系统上相当常见,但在其他地方不要将其视为理所当然。如果启用了 UPG,则用户的主要组和用户名很可能具有相同的数字 ID 和名称,并且每个用户都有一个唯一的组。就是这样。