我最近在新安装的 Kubuntu 20.04 PC 上创建用户帐户时遇到了奇怪的问题。
在安装操作系统期间创建的用户帐户按预期工作。它是各种组的成员:
myself@pc10:~$ groups myself
myself : myself adm cdrom sudo dip plugdev lpadmin lxd sambashare
但是每个额外的用户(稍后使用 KDE 系统设置创建的)不是同一组的成员(管理帐户的 sudo 除外):
myself@pc10:~$ groups test
test : test
myself@pc10:~$ groups administrator
administrator : administrator sudo
其中一个明显的副作用是,其他用户如果不提供 root 密码(不存在),则无法更改任何打印机设置。我想还会有更多我尚未注意到的副作用。
我的问题:
- 我的假设是否正确,即所有用户在创建后都应该共享相同的组成员身份?
- 如果是,那么缺失群组的可能原因是什么?
- 有没有彻底的解决办法?或者至少有个解决办法?(如果可能的话,不用手动单独修复每个用户帐户)
答案1
但是每个额外的用户(稍后使用 KDE 系统设置创建)并不是同一组的成员
这是正常的,也是所有 Ubuntu 版本的默认设置。默认情况下,普通用户无权更改硬件/配置文件,并且只能对自己的主目录拥有写访问权限。这是设计使然。
我的假设是否正确,即所有用户在创建后都应该共享相同的组成员身份?
不符合最小特权原则。
有没有彻底的解决办法?或者至少有个解决办法?(如果可能的话,不用手动单独修复每个用户帐户)
如果您希望用户有权限更改打印机配置,您可以使用将其添加到 lpadmin 组sudo usermod -aG lpadmin USERNAME
。
要使用单个命令将多个用户添加到组中(来自对这个问题):
for user in USERNAME1 USERNAME2 USERNAME3; do sudo usermod -aG lpadmin "$user"; done
或者将多个用户添加到多个组:
for user in USERNAME1 USERNAME2 USERNAME3; do sudo usermod -aG GROUP1,GROUP2,GROUP3,GROUP4 "$user"; done
如果您希望将附加组成员身份作为新用户的默认设置,请编辑/etc/adduser.conf
并取消注释该行#ADD_EXTRA_GROUPS=1
,同时取消注释并将以 开头的行更改为#EXTRA_GROUPS=
。EXTRA_GROUPS="lpadmin"
您可以列出多个组,并用引号之间的空格分隔。
答案2
如今,每个新用户都会创建一个新组。该组的名称与用户相同,并且只有一个用户作为成员。第一个用户帐户比较特殊;它被添加到更多组中,因为该用户被视为机器的主要用户,因此该用户有权使用各种硬件或虚拟机等;但对于在第一个用户之后创建的其他用户,默认情况下不会这样做。
很多年前只有一组叫用户包含所有普通用户帐户,因此组权限实际上是有意义的。
我猜测(我不确定)将这些用户帐户彼此分开被认为更安全,因此创建了这些单用户组。
但是没有什么可以阻止您将所有其他用户(对应于真实人类的用户,而不是伪用户帐户)添加到公共用户组;只需创建一个并将用户添加到该用户组即可。
由于组 ID 1000 可能已被第一个用户占用,因此您需要决定是否要重命名该组,或者是否创建一个具有数字 ID 的新组,以便在多台机器上保持不变。
手动编辑是完全安全的/etc/group
。
请注意,每个条目的组 ID/etc/password
是该用户的基本的组;用户可以是任意数量组的成员,但用户创建的任何文件或目录都将具有该主要组的组成员身份,因此如果您希望这些用户能够简单地基于组权限共享文件,您可能希望为他们提供相同的主要组(使用该newgrp
命令非常罕见,因此不要依赖它)。
最后,如果这些人使用多台机器,您可能需要考虑使用像 NIS 这样的集中式用户管理,但这是一个更高级的主题。