我注意到,在许多 Linux 发行版上,每当创建新用户时,它就会被分配到一个具有自己名称的主要组。
例如。如果我创建一个名为“testuser”的用户,默认情况下它将分配给“testuser”主要组。
这导致所有用户都有自己独特的主要组。所有这些组也只会有 1 个用户,因为将其他用户添加到这些组中实际上没有意义。这有点违反直觉,因为“组”通常意味着“超过 1”。
当尝试向文件/文件夹分配权限时,这些用户主要组通常也是无用的。
有什么原因这是发行版上的默认行为吗?这种行为实际上有用的任何用例吗?为什么不将所有新用户分配到“用户”主要组?
答案1
将用户置于自己的组中的原因(据我所知,这是唯一的原因)是为了进行umask 002
合理umask 007
的默认设置。
这掩码是新创建文件的默认权限的掩码。数字的含义与中相同chmod
;第一个数字代表用户,第二个数字代表组,第三个数字代表其他人。如果 umask 中的某个位为 1,则会从新创建的文件的权限中删除(屏蔽)该位。例如,如果应用程序创建一个没有特定隐私要求的非可执行文件,它将传递 666 作为文件权限,并且 umask 002 的应用将产生一个具有权限 664 的文件(0666 & ~002
类似 C 的表示法),即每个人都可读并且只能由用户和组( )写入的文件rw-rw-r--
。
使用 umask 022,默认情况下文件是所有人可读的,但只能由其作者写入。使用 umask 002,文件的所有者还可以对其进行写入。如果用户的主要组是唯一用户,并且 umask 为 002,则:
- 默认情况下,文件只能由其作者写入,因为尽管权限为
rw-rw-r--
,但组中没有其他用户具有写入权限。 - 要允许某个组的成员修改文件,作者只需使用
chgrp
.如果文件是在以下位置创建的,这甚至可以自动发生带有 setgid 位的目录或同等的前交叉韧带。
相对于 022 umask 的优点是,在该设置中,为了使文件可供用户编辑,作者必须做两件事:设置组和扩展权限 ( chmod g+w
)。人们往往会忘记第二步(或唯一的一步,在 setgid 目录中)。
具有特定隐私要求的文件示例:加密密钥;电子邮件;公共目录中的任何文件,例如/tmp
.
答案2
习惯上将所有用户添加到组中users
,但这使得以受控方式共享文件变得很尴尬(开放组权限,每个人都可以访问)。如今,一个进程当时可以属于多个组,只需为每个用户提供自己的组来关闭访问权限,并通过为此添加显式组来共享文件即可。或者(如果可用)使用ACL。