有时候最危险的不是黑客,是你自己
还记得前三期我们做了什么吗?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控制台的位置(救急用)
五道防线:你的服务器已经很安全了
回顾整个系列,现在你的服务器有了完整的安全体系:
- 第一道防线:SSH密钥认证 - 黑客猜不出你的"指纹"
- 第二道防线:修改默认端口 - 机器人找不到你的门
- 第三道防线:fail2ban自动封禁 - 智能保安24小时值守
- 第四道防线:UFW防火墙 - 只开必要的窗户
- 第五道防线:禁用root登录 - 万能钥匙锁进保险柜
就像给家里装了指纹锁、藏了门牌号、雇了保安、封了多余窗户、还把最重要的钥匙锁进保险柜。即使小偷真的进来了,也拿不到最关键的东西!
今天就行动
配置普通用户+sudo只需要10分钟:
- 创建新用户(1分钟)
- 配置sudo权限(30秒)
- 配置SSH密钥(3分钟)
- 测试登录和sudo(2分钟)
- 禁用root登录(2分钟)
从今天开始,告别root,用普通用户+sudo操作。这是保护服务器的最后一块拼图。
下期预告:系统更新与补丁管理——很多人配置完就不管了,但定期更新系统是防止漏洞被利用的关键。我们将讲解如何正确更新系统、配置自动更新、以及更新前的注意事项。
你的服务器还在用root吗?配置过程中遇到问题?欢迎在评论区留言讨论!