在Ubuntu系统中,直接使用root账户登录或依赖密码进行SSH连接,是常见的安全隐患。攻击者可能通过暴力破解密码或利用配置漏洞获取系统权限。解决方法是禁用root登录并强制使用SSH密钥认证,这能大幅提升服务器安全性。具体操作包括创建普通用户、配置SSH密钥、修改SSH服务设置,并验证配置是否生效。
为什么需要禁用root登录?
root账户拥有系统最高权限,一旦被入侵,整个服务器将面临灾难性后果。默认情况下,Ubuntu的root账户虽已禁用密码登录,但若用户手动启用或配置不当,仍可能暴露风险。禁用root登录的核心目的是减少攻击面,即使攻击者获取了root密码,也无法直接登录。同时,结合SSH密钥认证,可避免密码被暴力破解,因为密钥认证基于非对称加密,比传统密码更安全。
创建普通用户并分配sudo权限
在禁用root登录前,必须先创建一个具有sudo权限的普通用户,否则可能导致无法管理服务器。以创建用户"admin"为例,登录服务器后执行以下命令:
sudo adduser admin sudo usermod -aG sudo admin
第一行创建新用户,第二行将其加入sudo组,赋予管理员权限。完成后,切换到新用户测试sudo命令是否正常工作:
su - admin sudo ls /root
如果系统提示输入密码并正常显示目录,说明配置成功。此步骤确保在禁用root后,仍能通过普通用户进行系统管理。
生成和部署SSH密钥对
SSH密钥认证依赖于公钥和私钥对。私钥保存在本地客户端,公钥上传到服务器。在本地机器(如个人电脑)生成密钥对:
ssh-keygen -t rsa -b 4096
命令将生成RSA密钥,长度4096位以提高安全性。生成过程中,可设置密钥保存路径和密码短语。接着,将公钥上传到服务器的普通用户目录:
ssh-copy-id admin@服务器IP地址
如果ssh-copy-id不可用,可手动将公钥内容(通常是~/.ssh/id_rsa.pub文件)复制到服务器上的~/.ssh/authorized_keys文件中。确保文件权限正确:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
权限设置不当可能导致SSH认证失败。完成后,测试使用密钥登录服务器:
ssh admin@服务器IP地址
如果无需输入密码即可登录,说明密钥认证配置成功。
配置SSH服务以禁用root登录和密码认证
接下来,修改SSH服务配置文件/etc/ssh/sshd_config,应用安全加固设置。使用文本编辑器打开文件:
sudo nano /etc/ssh/sshd_config
找到并修改以下参数:
PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes
PermitRootLogin设为no可禁用root登录;PasswordAuthentication设为no关闭密码认证,强制使用密钥;PubkeyAuthentication设为yes启用公钥认证。此外,建议调整其他安全参数,例如:
Protocol 2 MaxAuthTries 3 ClientAliveInterval 300
Protocol 2指定使用SSH第二版协议;MaxAuthTries限制登录尝试次数;ClientAliveInterval设置连接超时时间,防止空闲会话长期占用。保存文件后,重启SSH服务使配置生效:
sudo systemctl restart sshd
重启前,务必保持一个活跃的SSH会话,以便测试新配置。如果配置错误导致无法登录,可通过该会话回滚修改。
验证配置和故障排除
配置完成后,需全面测试以确保安全性。首先,尝试使用root账户登录:
ssh root@服务器IP地址
系统应拒绝连接并提示权限错误。接着,尝试用密码登录普通用户:
ssh -o PubkeyAuthentication=no admin@服务器IP地址
如果配置正确,此命令将失败,因为密码认证已禁用。最后,使用密钥登录普通用户,确认可正常访问。若遇到问题,检查SSH服务状态和日志:
sudo systemctl status sshd sudo journalctl -u sshd -f
常见错误包括权限设置不当、配置文件语法错误或防火墙阻断SSH端口。确保服务器防火墙允许SSH端口(默认22),必要时可考虑更改端口以减少扫描攻击。
进阶安全措施和最佳实践
除了禁用root和启用密钥认证,还可采取额外措施强化SSH安全。例如,更改SSH默认端口:在sshd_config中修改Port参数为其他值(如2222),并更新防火墙规则。这能减少自动化攻击脚本的探测。另外,使用fail2ban工具监控登录失败尝试并自动封锁IP:
sudo apt install fail2ban sudo systemctl enable fail2ban
配置fail2ban后,可有效防御暴力破解。对于高安全环境,建议禁用SSH协议1、限制用户访问(通过AllowUsers参数),并定期轮换密钥。同时,保持系统和SSH软件更新,以修补已知漏洞。
总结与长期维护建议
禁用root登录和启用SSH密钥认证是Ubuntu服务器安全的基础步骤,能显著降低未授权访问风险。但安全加固不是一次性任务,需持续维护。定期审计SSH日志,检查异常登录尝试;备份authorized_keys文件,防止误删导致锁定;并为团队成员分发独立密钥,便于权限管理。在云服务器环境中,结合服务商的安全组或网络策略,可构建多层防御体系。通过这些措施,即使面对不断演变的网络威胁,服务器也能保持稳健的安全状态。
