首页/系统/Linux 运维命令速查/groupadd 创建用户组

groupadd 创建用户组

groupadd 新建组并分配 GID:-r 建系统组、-g 指定 GID;组是权限分配的基本单位,比逐用户授权好维护得多。

Linux 运维命令速查系统更新于 2026-10-13

groupadd 是什么

groupadd 用来新建用户组,把组信息写入 /etc/group(使用 shadow 机制时还会写 /etc/gshadow)。组是 Linux 权限模型的基本单位:文件权限的属组位与用户的附加组共同决定谁能访问哪些资源。把需要同一权限的人放进一个组,比逐个文件改属主好维护得多。

基本信息

适用平台Linux(shadow-utils,Debian 系为 passwd 包)
命令语法groupadd [选项] 组名
常用选项-g 指定 GID -r 创建系统组 -f 组已存在时也返回成功 -o 允许 GID 不唯一 -p 设置组密码(很少用)
相关文件/etc/group 组定义、/etc/gshadow 组密码、/etc/passwd 第 4 字段为用户主组 GID
权限说明需要 root

典型使用场景

  • 按业务划分权限:为同一应用的运维与部署账号建立统一组,共享目录设组权限
  • 服务账号分组:让服务账号通过附加组读取配置或日志目录
  • 配合共享目录:目录设 2770 并加组属主,新建文件自动继承组权限
  • 迁移与对齐:从旧机器同步账号时统一 GID,避免共享存储上权限错乱
  • 最小权限替代方案:用组授权代替给单个用户放宽权限或加 sudo

常用示例

常用示例
groupadd -g 2001 developers            # 指定 GID 创建业务组
groupadd -r appsvc                     # 创建系统组,GID 取自系统段
groupadd -f developers                 # 组已存在时不报错,脚本里做幂等
usermod -aG developers alice           # 把用户加入附加组,-a 不能漏
gpasswd -a bob developers              # 另一种加入附加组的方式
getent group developers                # 校验结果
grep developers /etc/group             # 直接看组定义行

组相关字段读法

位置字段含义注意
/etc/group组名:密码占位:GID:成员列表成员列是附加组成员,不含以该组为主组的用户
/etc/gshadow组名:加密口令:管理员:成员口令位为 ! 或 * 表示不可用口令登录
/etc/passwd 第 4 字段用户的主组 GID主组只有一个,附加组可以有很多
id 用户名uid、gid 与全部所属组判断权限前先看这里的真实结果
GID 规划建议写进文档并固定:系统组占用 1000 以下(多数发行版如此),业务组从 2000 起,避免与后来安装的软件包抢占同一段 GID。
给用户追加附加组必须写 -a:usermod -G 新组 用户 会直接覆盖该用户原有的全部附加组,是权限事故的高发点。改完让用户重新登录,当前会话里的 id 结果仍是旧的。
团队共享目录常配合两个细节:目录设 SGID(chmod 2770)后,新建文件会继承目录的属组而不是创建者的主组;目录的组执行位决定成员能否进入,只给了读写却漏掉 x,会出现「权限明明配了却进不去」。

易错点

  • 与 AD、LDAP 等集中认证共存时本地 GID 冲突会引发权限混乱,建组前先确认编号规划并查重
  • 用 groupdel 删除组前要确认没有文件以它为主组,否则会留下挂空 GID 的文件
  • usermod -G 漏写 -a 会覆盖用户的全部附加组,正确写法是 usermod -aG
  • 新建组或新增附加组后,已登录会话不会立即生效,需要用户重新登录
  • GID 允许不唯一(-o)但强烈不建议:不同组共用 GID 会让权限判断变得难以理解

数据来源与参考

  • man 8 groupadd(shadow-utils)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌