几乎每台新 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里。
接下来做什么
- 彻底改成仅密钥登录:SSH 密钥认证。
- 减少暴力破解的噪音:fail2ban。
- 用新 VPS 安全清单把剩下的基础工作做完。
评论
暂无评论。来做第一个吧。