
核心要点(TL;DR)
- 账号加固:禁用无用账号,强制强密码与SSH密钥登录。
- 权限收紧:遵循最小权限原则,关键文件设置不可变属性。
- 端口收敛:关闭非必要服务,用防火墙限制访问来源。
- 日志审计:集中管理日志,配置实时告警与定期审查。
为什么你的Linux服务器总被盯上?
很多运维人员以为服务器部署了防火墙就万事大吉,但实际入侵往往从弱口令、多余账号、开放端口或日志缺失开始。本文围绕账号、权限、端口、日志四个维度,提供一套可落地的Linux服务器加固方案,每个步骤都附带具体命令和检查清单,帮你快速收紧安全防线。
第一步:账号管理——清理后门,强化认证
账号是入侵的第一道门槛。首先检查系统账号,禁用或删除非必要账户。
- 查看所有可登录账号:
awk -F: ' !~ /nologin|false/ {print }' /etc/passwd - 锁定无用账号:
usermod -L 用户名或userdel 用户名 - 确保只有root的UID为0:
awk -F: '( == 0) {print }' /etc/passwd
强化密码策略:修改/etc/login.defs设置密码有效期,使用pam_cracklib模块强制复杂密码。对于SSH,务必禁用密码登录,改用密钥认证:
# 编辑 /etc/ssh/sshd_config PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes Port 2222 # 更改默认端口
重启SSH服务:systemctl restart sshd。同时安装Fail2ban防止暴力破解。
第二步:权限控制——最小权限原则落地
过度权限是提权攻击的温床。遵循最小权限原则,关键操作如下:
- 检查SUID文件:
find / -perm -4000 -type f 2>/dev/null,移除不必要的SUID位(chmod u-s 文件)。 - 敏感文件权限:
/etc/passwd应为644,/etc/shadow应为600,/etc/ssh/sshd_config应为600。 - 使用
chattr +i锁定关键文件(如/etc/passwd、/etc/shadow),防止篡改。 - 限制sudo权限:编辑
/etc/sudoers,仅授权必要命令,避免ALL=(ALL) ALL。
定期审计文件权限:find / -perm -o+w -type f 2>/dev/null 查找全局可写文件,及时修复。
第三步:端口收敛——关闭不必要的服务
开放的端口越多,攻击面越大。首先列出监听端口:
ss -tulnp
或 netstat -tulnp。逐一确认进程,停止非必要服务:
systemctl stop 服务名 systemctl disable 服务名
配置防火墙,默认拒绝所有入站,仅放行必要端口:
# 使用firewalld firewall-cmd --permanent --add-service=ssh firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
对于SSH端口,建议限制来源IP:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="1.2.3.4" port port="2222" protocol="tcp" accept'。定期使用nmap从外部扫描验证。
第四步:日志审计——让入侵行为无处遁形
日志是事后追溯的关键。确保以下日志开启并集中管理:
- 认证日志:
/var/log/secure(RHEL系)或/var/log/auth.log(Debian系) - 系统日志:
/var/log/messages或/var/log/syslog - 审计日志:启用
auditd服务,监控关键文件访问。
配置远程日志服务器,防止本地日志被清除。使用rsyslog转发:
# 在/etc/rsyslog.conf末尾添加 *.* @@远程日志服务器IP:514
设置告警规则,例如通过logwatch或自定义脚本监控多次失败登录。定期审查日志,关注异常时间、IP和用户。
加固检查清单与行动建议
完成以上四步后,使用以下清单快速验证:
| 项目 | 检查命令/方法 | 达标标准 |
|---|---|---|
| 账号 | awk -F: '( == 0) {print }' /etc/passwd | 仅root |
| SSH配置 | grep -E 'PermitRootLogin|PasswordAuthentication' /etc/ssh/sshd_config | 均为no |
| SUID文件 | find / -perm -4000 -type f 2>/dev/null | 无异常文件 |
| 监听端口 | ss -tulnp | 仅必要端口 |
| 防火墙 | firewall-cmd --list-all | 默认拒绝,仅放行必要服务 |
| 日志服务 | systemctl status rsyslog auditd | active (running) |
建议每月执行一次加固复查,并结合自动化工具(如Ansible)批量管理。对于需要高级防护的场景,可以引入AegisX的服务器安全加固能力,实现基线自动核查与实时告警,让安全运维更省心。
常见问题(FAQ)
如何检查Linux服务器上是否存在可疑账号?
首先检查/etc/passwd和/etc/shadow文件,查看是否有异常UID(如0)或新增的未知账号。使用命令`awk -F: '( == 0) {print }' /etc/passwd`列出所有UID为0的账号,确保只有root。同时检查/etc/sudoers文件,确认无多余授权。定期对比账号列表,禁用或删除不再使用的账号。
SSH服务如何加固才能防止暴力破解?
修改SSH配置文件/etc/ssh/sshd_config:禁用root直接登录(PermitRootLogin no),更改默认端口(Port 2222),启用密钥认证(PubkeyAuthentication yes)并禁用密码认证(PasswordAuthentication no)。同时安装Fail2ban工具,自动封禁多次失败尝试的IP。重启SSH服务前,确保密钥登录已测试成功。
如何发现并关闭Linux服务器上不必要的端口?
使用`netstat -tulnp`或`ss -tulnp`查看当前监听端口,结合`ps aux`确认对应进程。对于非必要服务(如telnet、ftp),使用`systemctl stop`和`systemctl disable`停止并禁用。配置防火墙(如iptables或firewalld),默认拒绝所有入站流量,仅放行必要端口(如SSH、HTTP/HTTPS),并限制来源IP。
Linux日志审计应该关注哪些关键文件?
重点监控/var/log/secure(认证日志)、/var/log/auth.log(Debian系)、/var/log/syslog(系统日志)和/var/log/messages。使用`journalctl -u sshd`查看SSH登录记录。配置logwatch或rsyslog集中转发日志到远程服务器,防止本地被篡改。设置告警规则,如多次失败登录、sudo提权操作等。
如何确保Linux服务器文件权限安全?
使用`find / -perm -4000 -type f`查找所有SUID文件,移除不必要的SUID权限。关键配置文件(如/etc/passwd、/etc/shadow)应设置为600或640权限,属主为root。对于敏感目录(如/etc、/bin),使用`chattr +i`设置不可变属性,防止未授权修改。定期使用`ls -lR`检查权限异常。