Linux 用户和用户组管理:useradd、passwd、sudo 实战
1. 前言
Linux 是多用户系统。
用户、用户组和 sudo 权限,是 Linux 权限管理的基础。
常见场景:
- 创建普通用户;
- 设置用户密码;
- 给用户 sudo 权限;
- 创建服务运行用户;
- 多人共享项目目录;
- 禁止 root 远程登录;
- 修改文件所属用户和用户组。
本文重点讲解:
bash
useradd
passwd
usermod
groupadd
sudo
visudo
2. 查看当前用户信息
查看当前用户名:
bash
whoami
查看 UID、GID 和所属组:
bash
id
示例:
bash
uid=1000(user) gid=1000(user) groups=1000(user),27(sudo)
含义:
| 字段 | 说明 |
|---|---|
| UID | 用户 ID |
| GID | 主用户组 ID |
| groups | 附加用户组 |
3. /etc/passwd
用户基础信息存放在:
bash
/etc/passwd
查看:
bash
cat /etc/passwd
一行示例:
text
user:x:1000:1000:User:/home/user:/bin/bash
字段含义:
| 字段 | 含义 |
|---|---|
| user | 用户名 |
| x | 密码占位符 |
| 1000 | UID |
| 1000 | GID |
| User | 用户描述 |
| /home/user | 家目录 |
| /bin/bash | 默认 shell |
现在密码不放在 /etc/passwd,而是放在 /etc/shadow。
4. /etc/shadow
密码哈希存放在:
bash
/etc/shadow
普通用户通常没有权限查看:
bash
sudo cat /etc/shadow
不要手动编辑密码字段。
修改密码使用:
bash
passwd
root 修改其他用户密码:
bash
sudo passwd username
5. /etc/group
用户组信息存放在:
bash
/etc/group
查看:
bash
cat /etc/group
一行示例:
text
sudo:x:27:user
含义:
| 字段 | 说明 |
|---|---|
| sudo | 组名 |
| x | 组密码占位 |
| 27 | GID |
| user | 组内用户 |
用户组适合多人协作权限管理。
6. useradd:创建用户
创建用户:
bash
sudo useradd username
更常用写法:
bash
sudo useradd -m -s /bin/bash devuser
参数:
| 参数 | 作用 |
|---|---|
-m |
创建家目录 |
-s |
指定默认 shell |
设置密码:
bash
sudo passwd devuser
Ubuntu/Debian 中也常用:
bash
sudo adduser devuser
adduser 更偏交互式,useradd 更偏底层命令和脚本化。
7. passwd:修改密码
修改当前用户密码:
bash
passwd
root 修改其他用户密码:
bash
sudo passwd devuser
锁定用户密码:
bash
sudo passwd -l devuser
解锁:
bash
sudo passwd -u devuser
查看密码状态:
bash
sudo passwd -S devuser
8. usermod:修改用户
添加用户到附加组:
bash
sudo usermod -aG groupname username
例如 Ubuntu 给 sudo 权限:
bash
sudo usermod -aG sudo devuser
CentOS/RHEL 常用 wheel 组:
bash
sudo usermod -aG wheel devuser
注意一定要用 -aG。
如果只用 -G,可能会覆盖原来的附加组。
修改默认 shell:
bash
sudo usermod -s /bin/bash devuser
禁止登录:
bash
sudo usermod -s /usr/sbin/nologin devuser
修改家目录并迁移:
bash
sudo usermod -d /new/home -m devuser
9. groupadd:创建用户组
创建组:
bash
sudo groupadd developers
添加用户到组:
bash
sudo usermod -aG developers alice
sudo usermod -aG developers bob
查看用户所属组:
bash
groups alice
id alice
删除组:
bash
sudo groupdel developers
10. 删除用户
删除用户:
bash
sudo userdel devuser
删除用户并删除家目录:
bash
sudo userdel -r devuser
删除前建议检查是否还有进程:
bash
ps -u devuser
11. sudo 是什么
sudo 允许普通用户以 root 身份执行命令。
例如:
bash
sudo apt update
sudo systemctl restart nginx
查看当前用户 sudo 权限:
bash
sudo -l
如果没有权限,可能提示:
text
user is not in the sudoers file
12. 配置 sudo 权限
Ubuntu/Debian:
bash
sudo usermod -aG sudo devuser
CentOS/RHEL:
bash
sudo usermod -aG wheel devuser
修改后需要重新登录。
也可以用:
bash
sudo visudo
添加:
text
devuser ALL=(ALL) ALL
允许免密 sudo:
text
devuser ALL=(ALL) NOPASSWD: ALL
只允许重启 nginx:
text
devuser ALL=(ALL) /usr/bin/systemctl restart nginx
推荐用 visudo,因为它会检查 sudoers 语法,避免写错后 sudo 全部失效。
13. 服务用户
正式服务不要直接用 root 运行。
可以创建专门的服务用户:
bash
sudo useradd -r -s /usr/sbin/nologin myapp
设置目录归属:
bash
sudo chown -R myapp:myapp /opt/myapp
systemd 中指定:
ini
[Service]
User=myapp
Group=myapp
ExecStart=/opt/myapp/app
这样可以减少服务被攻击后的权限范围。
14. 多人协作目录
创建组:
bash
sudo groupadd project
添加用户:
bash
sudo usermod -aG project alice
sudo usermod -aG project bob
创建目录:
bash
sudo mkdir /srv/project
sudo chown root:project /srv/project
sudo chmod 2775 /srv/project
2775 中的 2 是 SGID 位。
作用是:目录中新建文件继承目录所属组。
15. 常见问题
15.1 用户加入 sudo 组后不生效
重新登录。
用户组变化通常不会立刻影响已有会话。
15.2 普通用户无法访问目录
检查:
bash
ls -ld /path/to/dir
id username
要看:
- 用户是否属于对应组;
- 目录是否有
x权限; - 是否有上级目录权限;
- 文件本身权限是否正确。
15.3 删除用户后文件显示数字 UID
说明系统找不到对应用户名。
可以重新修改归属:
bash
sudo chown newuser:newgroup file.txt
16. 小结
用户管理可以总结为:
text
useradd:创建用户
passwd:设置密码
usermod:修改用户
groupadd:创建用户组
sudo:授权管理权限
常用命令:
bash
whoami
id
cat /etc/passwd
cat /etc/group
sudo useradd -m -s /bin/bash devuser
sudo passwd devuser
sudo usermod -aG sudo devuser
sudo groupadd developers
sudo visudo
sudo userdel -r devuser
理解用户、用户组、sudo、文件归属后,Linux 权限和服务器安全会清晰很多。