用户主组决定文件默认所属组且唯一,附加组用于扩展权限可多个;新建用户用useradd -g(主组)和-g(附加组),修改用usermod -g(换主组)和-ag(追加附加组),验证用id、groups或getent命令。

设置用户主组(初始组)和附加组,关键在于理解两者的区别和对应命令的用法:主组决定用户创建文件时的默认所属组,一个用户只能有一个;附加组用于扩展权限,可有多个。操作主要靠 useradd(新建用户时)和 usermod(修改已有用户时),配合 -g 和 -G 选项。
新建用户时直接指定主组和附加组
使用 useradd 命令可在创建用户的同时设定主组与附加组:
-
-g 组名或GID:指定主组(必须已存在) -
-G 组1,组2,组3:指定一个或多个附加组(多个用英文逗号隔开,无空格)
例如:sudo useradd -g developers -G sudo,deploy alice
这会创建用户 alice,主组为 developers,同时加入 sudo 和 deploy 两个附加组。
修改已有用户的主组
用 usermod -g 更换主组,注意该操作不会影响附加组:
- 主组变更后,用户新创建的文件将自动归属新主组
- 原主组若为空且非系统保留组,系统不会自动删除,需手动清理(如需)
- 执行后建议用
id 用户名验证,确认gid=已更新
例如:sudo usermod -g admins bob
给已有用户添加或替换附加组
附加组管理要特别注意“覆盖”与“追加”的区别:
-
usermod -G group1,group2:**完全替换**当前所有附加组,只保留列出的这些 -
usermod -aG group1,group2:**追加**到现有附加组,不删旧的(-a是关键) - 若未加
-a却用了-G,容易误删用户原本拥有的其他附加组权限
例如:
追加 docker 和 plugdev:sudo usermod -aG docker,plugdev charlie
验证用户所属的全部组
确认设置是否生效,推荐三种方式:
-
id 用户名:显示 UID、GID(主组)、groups(所有附加组) -
groups 用户名:简洁列出该用户所属的所有组名(含主组) -
getent group | grep 用户名:查看哪些组的成员字段包含该用户名
注意:/etc/passwd 中第 4 字段是主组 GID,/etc/group 中各组行末的用户名列表才是附加组成员依据。











