跳转至

07 - 用户与权限管理(sudoers、adduser) 👤

前提条件 ✅

  • 已完成 Debian 12 Bookworm 基础部署、网络配置、时间同步
  • 以 root 或具有 sudo 权限的用户(ops)登录
  • 虚拟机环境:VMware Workstation Pro
  • 全局约定:主机名 LinuxDC,静态 IP 192.168.1.100/24

详细步骤 🛠️

  1. 创建标准运维用户(如果安装时未创建)
    推荐用户名:ops(或 admin、devops,根据团队习惯)
sudo adduser ops
# 依次输入:
# 全名:Ops User
# 房间号/电话等:可回车跳过
# 密码:设置高强度密码(与 root 不同)
  1. 将 ops 用户加入 sudo 组(获得提权能力)
    Debian 默认使用 sudo 组控制提权:
sudo usermod -aG sudo ops
# 或者更清晰的写法
sudo adduser ops sudo

验证:

groups ops
# 应看到 sudo 在列表中

  1. 测试 ops 用户的 sudo 能力
    切换到 ops 用户:
    su - ops
    

执行需要 root 权限的命令:

sudo -i                # 进入 root shell
sudo apt update        # 测试普通提权
exit                   # 退出 root shell

  1. 优化 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 会检查)。

  1. 禁用 root 直接 SSH 登录(后续章节会结合 SSH 配置)
    先临时确认:
    sudo nano /etc/ssh/sshd_config
    # 查找并修改:
    PermitRootLogin prohibit-password   # 或 no(完全禁止 root 登录)
    

(完整 SSH 安全优化在第 8 章)

  1. 用户与组管理常用命令速查
    id ops                  # 查看 uid/gid/组
    getent passwd ops       # 查看用户条目
    getent group sudo       # 查看组成员
    sudo deluser --remove-home olduser   # 安全删除用户
    sudo addgroup devops    # 创建新组
    sudo usermod -aG devops ops
    

实践任务 🎯

  1. 创建或确认 ops 用户存在,并加入 sudo 组
  2. 用 ops 用户执行 sudo apt updatesudo -i 测试提权
  3. 创建 /etc/sudoers.d/ops-privileges 文件,添加 ops 用户对 systemctl restart ssh 的无密码执行权限(测试后可删除)
  4. idgroups 命令验证 ops 用户的组成员身份

自测问题 ❓

  1. Debian 中 sudo 权限默认由哪个用户组控制?
  2. 为什么强烈建议不要直接用 root 日常操作,而是创建普通用户并加入 sudo?
  3. visudo 命令相比直接 vi /etc/sudoers 的最大优势是什么?
  4. 如何让某个用户只能执行特定命令而不能完全提权为 root?

总结 📌

建立了安全、可审计的运维用户模型(ops + sudo)。
后续章节将结合 SSH 禁用 root 登录,形成“普通用户 + 最小权限提权”的生产标准。
sudoers.d 目录方式便于版本控制与多人管理,强烈推荐在生产环境中使用。