−25%

Windows 按年付费,截至 10 月 31 日。 查看套餐

EQVPS

如何在 VPS 上创建 sudo 用户并停用 root

在 Ubuntu 或 Debian 上创建非 root 的 sudo 用户,给它你的 SSH 密钥,测试通过后再关闭 root 登录——按这个顺序就不会把自己锁在门外。

几乎每台新 VPS 的开局都一样:用 root 登录,装几样东西,一个月后还在用 root。这样一直没事,直到某天粘贴的脚本删错了目录。配置一个带 sudo 的普通用户只要五分钟,而顺序比命令更重要——顺序错了,你就把自己锁在门外了。

下面是适用于 Ubuntu 22.04/24.04 和 Debian 12 的安全步骤。

1. 创建用户

以 root 身份:

adduser deploy
usermod -aG sudo deploy

adduser 会要你设密码,并询问一些可选信息(直接按回车跳过即可)。请设一个像样的密码:用 sudo 时要输入它。在精简版 Debian 镜像上,如果没有这个命令,先运行 apt install -y sudo。

2. 给它你的 SSH 密钥

最简单的办法是复制 root 的授权密钥,并保持正确的属主:

rsync --archive --chown=deploy:deploy /root/.ssh /home/deploy

如果你更想手动操作:

mkdir -p /home/deploy/.ssh
cp /root/.ssh/authorized_keys /home/deploy/.ssh/
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys

权限不对是密钥登录悄无声息失败的经典原因。SSH 会忽略其他用户可写的 authorized_keys。

3. 改任何东西之前先测试

保持 root 会话开着。在一个新终端里:

ssh -p 22 deploy@203.0.113.10
sudo whoami

用你自己的 IP 和端口——NAT 套餐的话就是控制面板里的专属 SSH 端口。如果 sudo whoami 输出 root,就一切正常。如果登录失败,你还有 root 窗口可以修。

4. 关闭 root 登录

现在把门关上。不要编辑主配置文件,而是创建一个小的 drop-in 文件:

cat > /etc/ssh/sshd_config.d/10-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
EOF
sshd -t && systemctl reload ssh

sshd -t 会先检查语法。配置写坏了再 reload,就是很多人最后只能靠控制台的原因。PasswordAuthentication no 只有在新用户的密钥登录能用时才有意义——而你刚刚已经测过了。

再开一个终端,确认 root 被拒绝、deploy 仍能登录。然后再关掉旧的 root 会话。

5. 可选:给自动化用的免密码 sudo

如果部署脚本需要不经询问就使用 sudo,只给它恰好需要的权限,不要多给:

visudo -f /etc/sudoers.d/deploy
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp

说实话,NOPASSWD: ALL 很诱人,但这意味着密钥一旦被盗就等于 root。把它限制在自动化实际执行的命令上。

出问题了怎么办

控制面板里的网页控制台既不依赖 SSH,也不依赖防火墙。从那里登录,修好 /etc/ssh/sshd_config.d/ 里的文件,reload,搞定。完整的恢复流程我们写在了如何重新进入被锁的 VPS里。

接下来做什么

各套餐的访问方式见访问文档。哪怕是 $3 的 Nano,也值得配一个非 root 用户——这是最便宜的安全升级。

常见问题

为什么不能一直用 root?

以 root 身份执行的任何操作都可能搞垮整个系统,一个打字错误也不例外。机器人也总是先试用户名 'root',所以关闭 root 登录就去掉了最常被猜的目标。有名字的用户加 sudo,能让你在每条特权命令前停一下,还会留下执行记录。

万一把自己锁在外面怎么办?

使用控制面板里的网页控制台。即使 SSH 坏了或者防火墙挡住了你,它也能用,你可以登录进去修复 sshd_config。这也是为什么要在关闭 root 会话前先测试新用户。

要不要允许免密码 sudo?

给人用的账户请保留密码提示——SSH 密钥泄露时,这是最后一道防线。免密码 sudo 适合给自动化专用的部署用户,并且只限于它真正需要的命令。

我的 Debian 服务器上没有 sudo 命令,为什么?

精简版 Debian 镜像不一定自带它。用 root 执行 'apt install -y sudo' 安装,然后把你的用户加入 sudo 组。

应该用哪个 SSH 端口?

控制面板里显示的那个。独立 IP 套餐使用你自己 IP 上的 22 端口;NAT 套餐使用你的专属 SSH 端口。

评论

暂无评论。来做第一个吧。

发表评论

评论在显示前会经过审核。