Linux 用户与用户组管理:useradd、groupadd、passwd 与权限隔离


多个人共用一台 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)

八、常见坑

  1. 建了用户却登不上:没设密码(passwd)、Shell 是 nologin(用 -s /bin/bash)、家目录权限不对(700 属主本人);
  2. sudo 报 command not found:用户不在 wheel/sudo 组,usermod -aG wheel 用户名;
  3. userdel 删不掉:有进程占用,先 pkill -u 用户名 再删;
  4. 误用 -G 清空附加组:用户突然失去 docker 等组权限,就是 -G 没加 -a;
  5. 安全基线:建议 root 只保留 1-2 个管理员,日常操作走普通用户 + sudo,配合密钥登录更稳。

总结:用户管理一句话——useradd 建人、passwd 设密码、groupadd/gpasswd 分组、usermod 改属性、userdel 删人。核心思想是最小权限:程序用独立低权限账号跑、人用普通账号 + sudo、组做权限分组。把这几条命令记住,多人协作和程序隔离都不再是难题。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

Linux 进程管理实战:ps、top、kill 与 nohup 后台运行

wget 命令详解与实战:文件下载、断点续传与整站镜像

评 论
更换验证码