在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文件,防止误删导致锁定;并为团队成员分发独立密钥,便于权限管理。在云服务器环境中,结合服务商的安全组或网络策略,可构建多层防御体系。通过这些措施,即使面对不断演变的网络威胁,服务器也能保持稳健的安全状态。