跳到主要内容
注册无需实名认证
安云主机 AnYun VPS

教程 · 快速上手

创建非 root 用户并授予 sudo 权限

难度

入门

预计时长

10 分钟

步骤

5

最近修订

基准系统

Debian 12

要点

创建非 root 用户并授予 sudo 权限

日常操作应当使用普通用户,需要提权时再通过 sudo 临时获得 root 能力。在 Debian 与 Ubuntu 上用 adduser 建号、usermod -aG sudo 加组,再把 root 的 authorized_keys 复制给新用户并改好属主即可;Rocky 与 AlmaLinux 上对应的组名是 wheel。

前置条件

开始之前,先确认这些都具备

  • 能以 root 身份 SSH 登录服务器
  • (推荐)已经配置好 SSH 密钥登录

操作步骤

5

  1. 步骤 01 / 05

    创建用户 #

    adduser 是 Debian 系的交互式脚本,会建好家目录、设置 shell 并提示设定密码。这个密码不用于 SSH 登录(我们马上会关掉密码登录),但 sudo 会用它做二次确认,所以要设一个真正的强密码。用户名建议用职能名而不是人名,例如 deploy、web、ops。

    Shell
    # Debian / Ubuntu
    adduser deploy
    
    # Rocky / AlmaLinux
    useradd -m -s /bin/bash deploy && passwd deploy
  2. 步骤 02 / 05

    加入 sudo 组 #

    组名因发行版而异:Debian 与 Ubuntu 是 sudo,Rocky、AlmaLinux 与 Fedora 是 wheel。加错组不会报错,只会在你第一次用 sudo 时提示「不在 sudoers 文件中」。

    Shell
    # Debian / Ubuntu
    usermod -aG sudo deploy
    
    # Rocky / AlmaLinux
    usermod -aG wheel deploy
    
    id deploy
  3. 步骤 03 / 05

    把 SSH 公钥复制给新用户 #

    新用户默认没有 authorized_keys,直接切过去会发现密钥登录不了。rsync 的 --chown 在复制的同时把属主改对,比先 cp 再 chown 少一个出错环节。

    Shell
    rsync --archive --chown=deploy:deploy ~/.ssh /home/deploy/
    
    ls -la /home/deploy/.ssh
    # 期望:目录 700,authorized_keys 600,属主 deploy
  4. 步骤 04 / 05

    开新窗口验证,再去限制 root #

    保持当前 root 会话不动,另开一个终端用 deploy 登录并测试 sudo。只有这两件事都成功之后,才能进入下一篇去关闭 root 的密码登录。

    Shell
    ssh -p 22022 [email protected]
    
    sudo whoami       # 期望输出 root
    sudo apt update   # 真跑一条需要权限的命令
  5. 步骤 05 / 05

    (可选)给部署账号配置有限的免密 sudo #

    自动化部署脚本无法交互式输密码。可以给特定命令开免密,但务必限定到具体命令,不要写 ALL=(ALL) NOPASSWD:ALL —— 那等于把这个账号变成了另一个 root。必须用 visudo 编辑,它会在保存前做语法检查;直接用编辑器改坏 sudoers,会让所有人都无法提权。

    Shell
    visudo -f /etc/sudoers.d/deploy-restart
    
    # 文件内容:只允许重启这一个服务,不给别的
    deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart myapp.service
    
    # 保存后校验整套 sudoers 语法
    visudo -c

常见错误

这一步最容易踩的坑

下面每一条都对应一个真实会发生的故障。先读完再动手,比出问题之后再回来查要省时间。

  • 忘了复制 authorized_keys,导致关闭密码登录后新用户进不去 —— 这是把自己锁在门外的经典剧本。切换前一定要在新窗口里真正登录成功一次。
  • Rocky/Alma 用 sudo 组、Debian 用 wheel 组,是常见的张冠李戴。用 id 命令确认一下只要五秒。
  • 直接用编辑器改 /etc/sudoers。语法一旦写错,sudo 会拒绝一切操作,只能靠控制台 VNC 进救援模式修回来。永远用 visudo。
  • 给部署账号 NOPASSWD:ALL。这样做等于同时拥有 root 的权力和普通账号的松散管理,是攻破一台机器后最省事的提权路径。
  • 把家目录权限设成 777。SSH 会因为家目录可被他人写入而拒绝使用密钥登录,报错还相当隐晦。

这篇教程的边界

  • 命令以 Debian 12 为准。Ubuntu 与 Rocky Linux 的差异只在正文明确标注之处,未标注的部分请以你所用发行版的官方文档为准。
  • 示例中的 IP 来自文档保留段 203.0.113.0/24,域名为 example.com,端口为示意值。复制后必须替换成自己的值, 原样执行不会有任何效果。
  • 教程不能替代备份。任何会改动数据或线上流量的步骤,执行前先确认有一份验证过能恢复的备份。
  • 本站不提供任何用于绕过网络审查的配置或说明,这篇也不例外。

发现命令过时或有误,请发邮件到 [email protected]。 指出错误的邮件比沉默的旧文档有价值得多。

联系 工单
扫码
手机访问

扫码在手机上打开