07 - 用户与权限管理(sudoers、adduser) 👤
前提条件 ✅
- 已完成 Debian 12 Bookworm 基础部署、网络配置、时间同步
- 以 root 或具有 sudo 权限的用户(ops)登录
- 虚拟机环境:VMware Workstation Pro
- 全局约定:主机名 LinuxDC,静态 IP 192.168.1.100/24
详细步骤 🛠️
- 创建标准运维用户(如果安装时未创建)
推荐用户名:ops(或 admin、devops,根据团队习惯)
sudo adduser ops
# 依次输入:
# 全名:Ops User
# 房间号/电话等:可回车跳过
# 密码:设置高强度密码(与 root 不同)
- 将 ops 用户加入 sudo 组(获得提权能力)
Debian 默认使用 sudo 组控制提权:
sudo usermod -aG sudo ops
# 或者更清晰的写法
sudo adduser ops sudo
验证:
groups ops
# 应看到 sudo 在列表中
- 测试 ops 用户的 sudo 能力
切换到 ops 用户:su - ops
执行需要 root 权限的命令:
sudo -i # 进入 root shell
sudo apt update # 测试普通提权
exit # 退出 root shell
- 优化 sudoers 配置(生产安全最佳实践)
不要直接编辑 /etc/sudoers,使用 visudo 安全编辑:
sudo visudo
推荐添加/修改以下内容(在文件末尾):
# 让 ops 用户无需输入密码执行常用命令(可选,视安全需求)
# ops ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/systemctl restart ssh
# 更安全的做法:要求密码,但允许无 tty(脚本友好)
Defaults:ops !requiretty
# 限制 ops 只能以 root 身份运行特定命令(示例)
ops ALL=(root) /usr/sbin/service, /bin/systemctl restart sshd, /usr/bin/journalctl
更推荐的方式:创建独立文件(推荐生产做法)
sudo nano /etc/sudoers.d/ops-privileges
内容示例:
ops ALL=(ALL:ALL) ALL
# 或更精细控制
ops ALL=(ALL) NOPASSWD: /usr/bin/apt update, /usr/bin/apt upgrade
ops ALL=(ALL) /usr/bin/systemctl restart ssh
保存后自动校验语法(visudo 会检查)。
- 禁用 root 直接 SSH 登录(后续章节会结合 SSH 配置)
先临时确认:sudo nano /etc/ssh/sshd_config # 查找并修改: PermitRootLogin prohibit-password # 或 no(完全禁止 root 登录)
(完整 SSH 安全优化在第 8 章)
- 用户与组管理常用命令速查
id ops # 查看 uid/gid/组 getent passwd ops # 查看用户条目 getent group sudo # 查看组成员 sudo deluser --remove-home olduser # 安全删除用户 sudo addgroup devops # 创建新组 sudo usermod -aG devops ops
实践任务 🎯
- 创建或确认 ops 用户存在,并加入 sudo 组
- 用 ops 用户执行
sudo apt update和sudo -i测试提权 - 创建 /etc/sudoers.d/ops-privileges 文件,添加 ops 用户对 systemctl restart ssh 的无密码执行权限(测试后可删除)
- 用
id和groups命令验证 ops 用户的组成员身份
自测问题 ❓
- Debian 中 sudo 权限默认由哪个用户组控制?
- 为什么强烈建议不要直接用 root 日常操作,而是创建普通用户并加入 sudo?
visudo命令相比直接 vi /etc/sudoers 的最大优势是什么?- 如何让某个用户只能执行特定命令而不能完全提权为 root?
总结 📌
建立了安全、可审计的运维用户模型(ops + sudo)。
后续章节将结合 SSH 禁用 root 登录,形成“普通用户 + 最小权限提权”的生产标准。
sudoers.d 目录方式便于版本控制与多人管理,强烈推荐在生产环境中使用。