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,会出现「权限明明配了却进不去」。