有时候最危险的不是黑客,是你自己

还记得前三期我们做了什么吗?SSH密钥、fail2ban、UFW防火墙——三道防线已经挡住了99%的攻击者。

小王按照教程配置完后,觉得自己的服务器已经固若金汤。直到有一天,他的技术朋友登录服务器看了一眼,惊讶地问:"你一直在用root账户操作?"

"有什么问题吗?root权限最大,用起来方便啊!"

朋友说:"你知道吗,root账户被攻破 = 服务器完全沦陷。而且你自己误操作一个命令,可能整个系统就没了。"

小王这才意识到,前面做的防护再好,如果一直用root操作,就像把家里装了最好的防盗门,却把万能钥匙挂在门口。

今天我们要做的,就是把这把"万能钥匙"锁进保险柜。

为什么root账户这么危险?

一个形象的比喻

  • root就像万能钥匙:能开家里所有的门、保险柜、抽屉、甚至能拆房子
  • 普通用户像普通钥匙:只能开自己的房间门
  • sudo像临时借钥匙:需要的时候借用一下万能钥匙,用完马上还回去

三大危险

危险1:操作失误无法挽回

root执行 rm -rf /* 能删除整个系统,没有任何"你确定吗"的提示。一个手抖,几个月的工作成果可能瞬间化为乌有。

危险2:黑客的首要目标

攻击者最想要的就是root权限。一旦获得root:

  • 可以安装后门程序
  • 可以窃取所有数据
  • 可以删除所有日志痕迹
  • 可以完全控制服务器

危险3:缺乏操作审计

如果多个人都用同一个root账户,出了问题根本不知道是谁操作的。没有责任追溯,也无法审计操作历史。

正确的做法:普通用户+sudo

第一步:创建普通用户

用当前的root账户登录服务器,创建新用户:

# 创建新用户(以deploy为例,你可以用任何名字)
sudo adduser deploy

会提示你输入:

  • 新用户的密码(输入两次)
  • 用户信息(姓名、电话等,直接回车跳过即可)

看到 Adding user 'deploy' ...Done. 就说明创建成功了。

验证用户创建成功:

id deploy

应该看到类似输出:

uid=1001(deploy) gid=1001(deploy) groups=1001(deploy)

第二步:配置sudo权限

让新用户可以使用sudo命令获得临时管理员权限:

sudo usermod -aG sudo deploy

命令解释:

  • usermod:修改用户
  • -aG:添加到组(不影响用户已有的其他组)
  • sudo:sudo组的成员可以执行sudo命令
  • deploy:你的用户名

这一步很简单,但很重要。现在deploy用户可以通过 sudo 命令临时获得root权限。

第三步:给新用户配置SSH密钥

假设您已经按照之前的教程设置了SSH密钥认证并禁用密码登录。如果还没有,需要先在电脑上运行ssh-keygen -t ed25519生成密钥对“id_ed25519”(私钥)和“id_ed25519.pub”(公钥)。然后继续下面的配置。

方法1:使用ssh-copy-id(推荐)

在你的电脑上执行:

ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@服务器IP -p 端口号

方法2:手动配置

如果上面的命令不行,可以手动操作:

先用新用户登录服务器:

ssh deploy@服务器IP -p 端口号

输入刚才设置的密码登录,然后执行:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys

把你电脑上的公钥内容(~/.ssh/id_ed25519.pub文件的内容)粘贴进去,按 Ctrl+O 回车保存,Ctrl+X 退出。

然后设置正确的权限:

chmod 600 ~/.ssh/authorized_keys

测试密钥登录:

退出当前连接,重新用密钥登录:

ssh deploy@服务器IP -p 端口号

如果不需要输入密码就登录成功了,说明密钥配置正确。

第四步:测试sudo权限

用新用户登录后,测试sudo是否能正常使用:

# 测试sudo权限
sudo whoami

第一次使用sudo会提示输入密码(输入deploy用户的密码,不是root密码),然后应该看到输出:

root

这说明sudo配置成功了!

你也可以查看当前用户的sudo权限:

sudo -l

第五步:禁用root SSH登录

⚠️ 重要警告:必须确保新用户能正常登录并使用sudo后,再执行这一步!

保持当前deploy用户的SSH连接不要断开(这是你的救命稻草),然后编辑SSH配置:

sudo nano /etc/ssh/sshd_config

找到这一行(可能有 # 注释符):

#PermitRootLogin yes

改成:

PermitRootLogin no

按 Ctrl+O 回车保存,Ctrl+X 退出,重启SSH服务:

sudo systemctl restart sshd

验证配置:

保持当前连接不断开,新开一个终端窗口,尝试用root登录:

ssh root@服务器IP -p 端口号

应该看到:

Permission denied (publickey).

这说明root登录已被禁用,配置成功!

从此以后,只能用普通用户登录,需要管理员权限时使用sudo命令。

常见问题

Q:如果忘记了普通用户的密码怎么办?
A:用云服务商的VNC控制台,以root身份登录(VNC不受SSH配置限制),然后用 passwd 用户名 重置密码。

Q:可以完全删除root账户吗?
A:不能,也不应该。root账户是Linux系统的基础,我们只是禁用了SSH远程登录,root账户本身还在。

Q:多人管理服务器怎么办?
A:给每个人创建独立的账户,都配置sudo权限。这样可以追溯谁做了什么操作,也更安全。

Q:sudo和直接用root有什么区别?
A:sudo是"临时借用"root权限执行单个命令,执行完权限就收回了。而直接用root是"一直持有"最高权限,风险大得多。

Q:我已经用root配置了很多东西,现在改来得及吗?
A:完全来得及!安全永远不嫌晚。从现在开始用普通用户操作,以前的配置不受影响。

配置检查清单

确保你完成了以下所有步骤:

  • [ ] 创建了普通用户
  • [ ] 配置了sudo权限
  • [ ] 普通用户能用密钥登录
  • [ ] 测试了sudo命令能正常使用
  • [ ] 禁用了root SSH登录
  • [ ] 验证了root无法远程登录
  • [ ] 知道VNC控制台的位置(救急用)

五道防线:你的服务器已经很安全了

回顾整个系列,现在你的服务器有了完整的安全体系:

  1. 第一道防线:SSH密钥认证 - 黑客猜不出你的"指纹"
  2. 第二道防线:修改默认端口 - 机器人找不到你的门
  3. 第三道防线:fail2ban自动封禁 - 智能保安24小时值守
  4. 第四道防线:UFW防火墙 - 只开必要的窗户
  5. 第五道防线:禁用root登录 - 万能钥匙锁进保险柜

就像给家里装了指纹锁、藏了门牌号、雇了保安、封了多余窗户、还把最重要的钥匙锁进保险柜。即使小偷真的进来了,也拿不到最关键的东西!

今天就行动

配置普通用户+sudo只需要10分钟:

  1. 创建新用户(1分钟)
  2. 配置sudo权限(30秒)
  3. 配置SSH密钥(3分钟)
  4. 测试登录和sudo(2分钟)
  5. 禁用root登录(2分钟)

从今天开始,告别root,用普通用户+sudo操作。这是保护服务器的最后一块拼图。


下期预告:系统更新与补丁管理——很多人配置完就不管了,但定期更新系统是防止漏洞被利用的关键。我们将讲解如何正确更新系统、配置自动更新、以及更新前的注意事项。

你的服务器还在用root吗?配置过程中遇到问题?欢迎在评论区留言讨论!