多个人共用一台 VPS,或者网站程序要单独一个账号运行,就离不开用户管理。Linux 的所有权限都挂在"用户"和"用户组"上:给每个人建独立账号、把同类账号放进同一个组、再配合权限隔离,是服务器安全的基础功。这篇文章把 useradd、groupadd、passwd 等命令讲清楚。
一、用户与用户组的关系
- 用户(user):每个登录身份一个账号,有独立的 UID;
- 用户组(group):一组用户的集合,有独立的 GID;
- 一个用户属于一个主组(primary group),可以加入多个附加组(supplementary group);
- 查看当前用户:
whoami、id。
$ id
uid=0(root) gid=0(root) groups=0(root)
权限判断时:文件属主按 uid 匹配,属组按用户的主组和附加组匹配。
二、创建用户:useradd
useradd zhangsan # 创建用户(默认不设密码,不能登录)
useradd -m -s /bin/bash zhangsan # -m 创建家目录,-s 指定登录 Shell
useradd -d /data/www -s /bin/false webuser # 指定家目录,禁用 Shell 登录
常用参数:
| 参数 | 作用 |
|---|---|
-m |
创建家目录(默认 /home/用户名) |
-s |
指定登录 Shell,/sbin/nologin 或 /bin/false 禁止登录 |
-d |
指定家目录位置 |
-g |
指定主组 |
-G |
加入附加组(可多个,逗号分隔) |
-u |
指定 UID |
-e |
账号过期日期 |
建"只能跑程序不能登录"的用户:useradd -M -s /sbin/nologin appuser(-M 不建家目录)。
三、设置密码:passwd
passwd zhangsan # 交互式设置密码
echo "Abc@123456" | passwd --stdin zhangsan # 非交互设置(脚本用)
passwd -l zhangsan # 锁定账号
passwd -u zhangsan # 解锁账号
安全要求:Linux 密码没有最小长度强制,但建议 12 位以上、混合大小写数字符号。密码存放在 /etc/shadow(root 才能读)。
四、用户组管理:groupadd / gpasswd
groupadd dev # 创建用户组
useradd -m -s /bin/bash -G dev zhangsan # 创建用户并加入 dev 组
gpasswd -a zhangsan dev # 把已有用户加入组
gpasswd -d zhangsan dev # 从组中移除用户
groupdel dev # 删除用户组
查看用户组:groups zhangsan 或 cat /etc/group。
五、修改用户:usermod
usermod -G dev,sudo zhangsan # 重设附加组(覆盖原附加组)
usermod -aG docker zhangsan # -a 追加到组(不覆盖)
usermod -s /sbin/nologin zhangsan # 改为禁止登录
usermod -L zhangsan # 锁定
usermod -U zhangsan # 解锁
注意:-G 不带 -a 会清空原有附加组,追加务必用 -aG。
六、删除用户:userdel
userdel zhangsan # 删除用户(保留家目录)
userdel -r zhangsan # 删除用户连同家目录
删除前确认没有该用户运行的进程(ps aux | grep zhangsan),否则数据或进程残留。
七、实战场景
1. 给网站程序建独立运行用户
useradd -M -s /sbin/nologin www # 网站运行用户,不能登录
chown -R www:www /www/wwwroot/example.com
程序(Nginx/PHP-FPM)以 www 身份运行,即使被入侵也拿不到 root 权限。
2. 多人共用服务器,权限互不可见
useradd -m -s /bin/bash alice
useradd -m -s /bin/bash bob
chmod 700 /home/alice /home/bob # 家目录只允许本人访问
3. 给运维同事临时 root 权限(sudo)
usermod -aG wheel zhangsan # CentOS 加入 wheel 组即获得 sudo 权限
visudo # 编辑 /etc/sudoers 可精细授权
4. 查密码文件认识系统账号
cat /etc/passwd # 用户列表:用户名:x:UID:GID:描述:家目录:Shell
cat /etc/group # 组列表
cat /etc/shadow # 加密密码与密码策略(仅 root)
八、常见坑
- 建了用户却登不上:没设密码(
passwd)、Shell 是 nologin(用-s /bin/bash)、家目录权限不对(700 属主本人); - sudo 报 command not found:用户不在 wheel/sudo 组,
usermod -aG wheel 用户名; userdel删不掉:有进程占用,先pkill -u 用户名再删;- 误用
-G清空附加组:用户突然失去 docker 等组权限,就是-G没加-a; - 安全基线:建议 root 只保留 1-2 个管理员,日常操作走普通用户 + sudo,配合密钥登录更稳。
总结:用户管理一句话——useradd 建人、passwd 设密码、groupadd/gpasswd 分组、usermod 改属性、userdel 删人。核心思想是最小权限:程序用独立低权限账号跑、人用普通账号 + sudo、组做权限分组。把这几条命令记住,多人协作和程序隔离都不再是难题。




