云服务器必须禁用root用户直接登录,改用普通用户配合sudo提权,这是降低暴力破解风险最有效、最基础的安全操作。
为什么不能放任root裸奔登录
很多新手拿到云服务器第一件事,就是直接用root密码连上去装环境,这相当于把家门钥匙挂在门口,路过的任何人都能顺手试一下。
root是Linux系统的最高权限账户,它不受文件权限和目录访问限制的约束,一旦被攻破,攻击者就拿到了服务器的完全控制权,可以安装后门、窃取数据、发起DDoS攻击,业内专家指出,互联网上针对云服务器的暴力破解攻击几乎每秒钟都在发生,而root账户正是扫描和尝试登录的首要目标。
更关键的是,root密码一旦泄露,整改成本极高,你无法确定攻击者是否已经植入隐藏进程或篡改系统文件,最稳妥的办法只能是重装系统,相比之下,禁用root登录后,即使密码泄露,攻击者拿到的也只是普通用户权限,伤害范围被大幅限制。
禁用root直接登录不是为了增加麻烦,而是为了把安全风险从”致命伤”降级为”皮外伤”。
普通用户+sudo提权的成本收益分析
有人担心禁用root后操作不便,其实这个顾虑是多余的,Linux系统成熟的sudo机制,让普通用户可以在需要时临时获得root权限,日常操作完全不受影响。
- 普通用户无法直接删除系统关键文件,这对新手来说是保护而不是限制
- sudo操作会记录在日志中,出了问题可以追溯是谁在什么时间执行了什么命令
- 环境变量和默认Shell可控,降低了误操作导致系统崩溃的概率
安全性和便利性从来不是零和博弈,合理的权限设计,让这两者可以兼顾。
被暴力破解的现实威胁
看一下公网IP的SSH登录日志,你会发现密密麻麻的Failed password记录,这些来自全球各地的扫描行为,正在试探每一个开放22端口的服务器。
攻击者使用的字典包含常见的用户名和密码组合,root、admin、test这类用户名排在字典最前面,如果你的服务器允许root密码登录,理论上只需要一个弱密码,被攻破就只是时间问题。
禁用root登录后,即使攻击者猜中了密码,因为没有root这个用户名可用,攻击也会直接失败,这是从机制上切断一条最危险的攻击路径。
如何安全禁用root登录
下面从创建用户、配置SSH、验证效果三个维度,给出完整的操作步骤,整个过程大约需要十分钟。
第一步:创建普通用户并授予sudo权限
登录服务器后,执行以下命令创建一个新的普通用户(以admin为例):
useradd -m -s /bin/bash admin passwd admin
-m参数自动创建用户主目录,/bin/bash指定登录Shell
passwd admin用于设置该用户的登录密码,请设置一个强密码,至少12位以上,包含大小写字母和数字
然后给admin添加sudo权限:
usermod -aG wheel admin
如果系统提示wheel组不存在,可以换成:
usermod -aG sudo admin
CentOS/Rocky/AlmaLinux使用wheel组,Debian/Ubuntu使用sudo组,这是不同发行版的默认约定。
验证sudo权限是否生效:
su - admin sudo whoami
输出root就说明提权正常工作。
第二步:测试普通用户能否正常登录
在修改任何配置之前,先开一个SSH窗口,用admin用户登录服务器:
ssh admin@你的服务器IP
这一步的目的是确认密钥认证或密码认证对普通用户有效,如果这一步都过不去,后续操作有被锁在门外的风险。
登录成功后,切换到root验证sudo工作正常,确认alright之后,再进行下一步。
第三步:修改SSH配置禁用root登录
编辑SSH配置文件:
sudo vim /etc/ssh/sshd_config
找到以下三个配置项,做对应修改:
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
如果配置文件中找不到某项,说明它使用的是默认值,需要手动添加。
注意:这里建议同时关闭密码认证(
PasswordAuthentication no),改用SSH密钥登录,如果暂时不熟悉密钥管理,可以先将PasswordAuthentication保留为yes,只修改PermitRootLogin no,后续逐步迁移到密钥认证。
修改保存后,重启SSH服务使配置生效:
sudo systemctl restart sshd
CentOS系和Debian系的服务名都是sshd,部分Ubuntu版本可能显示为ssh,可以使用:
sudo systemctl restart ssh
重启SSH服务不会断开当前连接,但为了保险起见,建议先不要关闭当前窗口,新开一个窗口验证后再处理。
第四步:验证禁用的效果
在另一台电脑上尝试用root直接登录:
ssh root@你的服务器IP
正常情况下,连接会被拒绝,提示Permission denied,此时用admin用户登录,确认一切正常,然后关闭之前的SSH窗口,避免留下隐患。
测试顺序很关键:先确认新用户能登录,再确认root登录被拒绝,最后才关闭原有连接。
配置SSH密钥认证的实操细节
前面提到建议关闭密码认证,改用密钥认证,这里展开说明具体步骤,密钥对由私钥和公钥组成,私钥留在本地,公钥上传至服务器,登录时通过签名验证身份,安全性远高于密码。
生成密钥对
在本地电脑上执行:
ssh-keygen -t ed25519 -C "your_email@example.com"
按提示一路回车,默认会在~/.ssh/目录生成id_ed25519(私钥)和id_ed25519.pub(公钥)。ed25519是目前推荐的算法,安全性和性能都优于传统RSA。
复制到服务器的authorized_keys文件中:
ssh-copy-id admin@你的服务器IP
ssh-copy-id会自动将本地公钥追加到服务器的~/.ssh/authorized_keys,免去手动创建的麻烦。
锁定权限
登录服务器后,检查以下权限设置:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
权限过宽会导致SSH拒绝使用密钥认证,很多用户配置密钥后仍然验证失败,多半是authorized_keys权限写成了644或777。
确认密钥登录成功后关闭密码登录
在密钥登录确认无问题后,将SSH配置文件的PasswordAuthentication改为no:
PasswordAuthentication no
重启SSH服务,从此刻起,服务器只接受密钥登录,密码暴力破解彻底失效。
云服务器禁用root登录的常见误区
改了文件就能立刻保护服务器
sshd_config文件的修改需要重启SSH服务才能生效,很多用户改完文件就以为完事了,实际上配置并未加载,建议修改后始终执行systemctl restart sshd,并在新终端中实测验证。
禁用root登录后无法管理服务器
前面已经演示过,通过sudo可以让普通用户管理整台服务器,日常的软件安装、服务启停、日志查看等操作,加上sudo前缀即可,唯一需要root的场景是修改SSH服务自身的配置或调整sudoers文件,这种情况下仍可以临时切换到root:
su -
注意执行这条命令需要root密码,如果忘记root密码,可以在VNC登录方式下通过单用户模式重置。
Windows云服务器不需要这个操作
Windows服务器的默认管理员是Administrator,其权限与Linux的root相当,RDP协议(远程桌面)同样会遭受暴力破解,Windows下的对应做法是禁用Administrator账户,改为使用普通用户配合UAC提权,并在防火墙层面限制RDP端口的来源IP。
云服务器安全加固的额外措施
禁用root登录只是第一步,按行业安全基线,建议同时完成以下操作:
修改SSH默认端口
把/etc/ssh/sshd_config中的Port 22改为其他端口(比如2222):
Port 2222
这能大幅减少扫描攻击的数量,攻击者通常只扫描默认的22端口,更换端口后扫描流量会显著下降,但要注意,云平台的安全组规则也需要放行新端口,否则SSH连接会超时。
启用防火墙限制来源IP
使用firewalld或ufw,只允许特定IP段访问SSH端口:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="x.x.x.x/x" port port="2222" protocol="tcp" accept'
配置防火墙时,请务必考虑IP是否固定,如果是家用宽带,IP会动态变化,需要在防火墙中预留可用的IP段,避免把自己锁在外面。
配置fail2ban自动封禁
fail2ban是一个入侵防御工具,可以监控SSH日志,对连续认证失败的IP实施自动封禁,安装后默认生效,无需复杂配置:
sudo yum install fail2ban sudo systemctl enable --now fail2ban
fail2ban的封禁规则会写入系统防火墙,封禁时长、触发阈值都可以在配置文件中调整,默认配置下,某个IP连续尝试5次密码失败就会被封禁10分钟。
常见问题解答
Q:云服务器禁用root登录后,如何上传文件到服务器?
A: 使用scp或sftp命令,以普通用户身份登录即可,文件会传输到普通用户的主目录下,如果有需要放入其他目录,可以通过sudo移动,SFTP方式登录时,部分SSH配置需要额外允许Subsystem sftp,该服务默认是开启的,一般无需修改,如果遇到无法上传的情况,检查/etc/ssh/sshd_config中的Subsystem sftp行是否被注释。
Q:禁用root登录会影响网站运行吗?
A: 不会,网站或应用的进程运行在独立的系统用户和Web服务(如Nginx、Apache)下,与root账户无关。root只涉及系统层面的管理操作,禁用root直接登录不会对已在运行的服务产生任何影响,唯一需要注意的是,后续维护时需要改用普通用户加sudo执行命令,操作习惯上会有变化。
Q:修改完配置后root无法登录也找不到普通用户,该怎么办?
A: 这通常是因为配置修改或验证流程有误,云服务商都提供VNC登录或救援模式,通过云控制台进入服务器,将PermitRootLogin no改回yes,然后重启SSH服务,在修改SSH配置时,建议始终保持至少一个已登录的SSH会话作为逃生通道,并在修改后先不关闭该会话,待新会话验证成功后再做清理,如果使用云市场的镜像,部分供应商还提供云助手或主机管理终端,可用来恢复访问权限。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/748959.html





