linux用户与组管理核心是理解“谁属何组、文件归谁、权限如何生效”三层关系,通过useradd、groupadd等命令及/etc/passwd等文件协同实现;生产中多用业务组统一授权,权限控制强调属主/属组/其他人三级划分与sudo精细化授权。

Linux 的用户与用户组管理,核心是通过 useradd、groupadd、usermod、chown、chmod 和 chgrp 这几个命令协同完成,配合 /etc/passwd、/etc/group 等配置文件实现权限控制。实际操作中,重点不在记命令,而在理解“谁属于哪个组”“文件归谁所有”“权限位如何生效”这三层关系。
创建与删除用户和用户组
新建用户默认会同时创建同名私有组,适合独立环境;生产中更常用的是把多个用户加入同一个业务组,便于统一授权。
- 添加用户并指定主组:useradd -g developers alice(alice 主组为 developers)
- 添加用户并附加额外组:useradd -G docker,adm bob(bob 同时属于 docker 和 adm 组)
- 新建用户组:groupadd qa
- 删除用户但保留家目录:userdel charlie;加 -r 参数才彻底删除家目录和邮件池
- 删除空组:groupdel testers(组内不能有用户,否则报错)
修改用户归属与组成员关系
用户创建后,主组无法直接改,但可调整所属附加组;组名也不能直接改,需先新建再迁移用户。
- 把用户加入新组(不踢出原有附加组):usermod -aG www-data nginxadmin
- 强制重设用户主组(慎用):usermod -g ops nginxadmin
- 查看用户完整组成员信息:id nginxadmin 或 groups nginxadmin
- 从某组中移除用户:gpasswd -d nginxadmin www-data
文件权限分配:属主、属组、其他人的三级控制
权限分三段(如 rwxr-xr–),分别对应文件所有者(user)、所属组(group)、其他用户(others)。执行 chmod 时,数字法(754)或符号法(u+x,g-w)都可,但符号法更直观且不易误操作。
- 把文件属主改为 alice,属组改为 developers:chown alice:developers script.sh
- 仅改属组(不改属主):chgrp www-data /var/www/html
- 递归修改目录及全部子项的属组:chgrp -R www-data /var/www/html
- 给属组增加执行权限(让组内成员能进入目录):chmod g+x /var/www/html
- 设置 setgid 位,确保新创建文件自动继承父目录属组:chmod g+s /var/www/html
sudo 权限精细化控制(避免直接给 root)
不要轻易让用户 ALL=(ALL) NOPASSWD:ALL,应按需授权具体命令,并限制运行身份。
- 编辑 sudo 配置:visudo(强制语法检查,防锁死)
- 允许运维组执行 systemctl 和 journalctl:%ops ALL=(root) /bin/systemctl status *, /usr/bin/journalctl -u *
- 允许 deploy 用户无需密码重启 nginx:deploy ALL=(root) NOPASSWD: /bin/systemctl restart nginx
- 禁止执行危险命令(如 rm -rf /):Cmnd_Alias DANGEROUS = /bin/rm, /bin/sh, /usr/bin/apt,再用 !DANGEROUS 排除