教程 · 快速上手
创建非 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 步
步骤 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步骤 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步骤 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步骤 04 / 05
开新窗口验证,再去限制 root #
保持当前 root 会话不动,另开一个终端用 deploy 登录并测试 sudo。只有这两件事都成功之后,才能进入下一篇去关闭 root 的密码登录。
Shell ssh -p 22022 [email protected] sudo whoami # 期望输出 root sudo apt update # 真跑一条需要权限的命令步骤 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]。 指出错误的邮件比沉默的旧文档有价值得多。