用户组管理关键在精准设置主组与附加组:useradd -g指定主组,-g添加附加组;usermod -ag追加组,-g覆盖组;需配合chown、chmod 2775及setgid确保权限生效,id验证组成员身份,锁定用usermod -l。

用 useradd 和 usermod 管理用户组与权限,关键不在“加多少”,而在“加得准、改得稳、不覆盖”。主组决定文件归属,附加组控制资源访问,而权限生效依赖组成员身份是否真实写入系统配置。
创建用户时就配好组关系
新用户默认自带同名主组,但生产环境常需指定已有组。注意 -g(主组)和 -G(附加组)不能混用逻辑:
-
useradd -g developers -G docker,deploy alice:alice 主组是developers,同时属于docker和deploy两个附加组 -
useradd -G sudo,www-data bob:不指定-g,系统自动创建bob组作主组,再把 bob 加入sudo和www-data - 附加组名必须已存在,否则命令失败;可用
groupadd nginx提前创建
修改用户组要区分覆盖与追加
usermod -G 默认会清空原有附加组,只保留参数中列出的组——这是最易出错的操作点:
- 想追加一个组(保留原附加组):必须加
-a参数,例如usermod -aG wheel charlie - 想彻底重置附加组:直接用
usermod -G ftp,backup,charlie,原属的dev或git组会被移除 - 修改主组用
-g,如usermod -g ops dave,执行后 dave 创建的新文件将自动属ops组
配合权限机制让组真正起作用
加进组只是第一步,文件或目录还需设置对应组权限,且建议启用 setgid 位保证新建文件继承父目录组:
- 给共享目录设组所有权:
chown :developers /srv/project - 开放组读写:
chmod 2775 /srv/project(2 是 setgid,确保新文件属developers组) - 验证用户实际所属组:
id alice,输出中groups=...行必须包含目标组名 - 若用户已登录,组变更需重新登录或运行
newgrp developers才即时生效
锁定/解锁与密码状态管理
账号安全控制不依赖删用户,而是快速启停登录能力:
- 锁定账号(禁用密码登录):
usermod -L eve,会在/etc/shadow密码字段前加! - 解锁账号:
usermod -U eve,去掉!恢复原密码有效性 - 禁止 shell 登录(适合服务账户):
usermod -s /usr/sbin/nologin jenkins - 查看账号状态:
chage -l eve可看到密码过期、账户锁定等完整信息











