
核心要点(TL;DR)
- 先收敛SSH与账号权限,是投入产出比最高的加固起点。
- 防火墙默认拒绝入站,只放行必要端口并限制来源。
- 基线检查要留痕:命令输出存档,整改前后可对比。
- 补丁与日志审计需常态化,单次加固不等于长期安全。
很多生产事故并非源于高深漏洞,而是几项基础配置长期没人管:root 允许密码登录、防火墙全放行、日志从不看。本文给出一份可直接照做的 Linux 服务器加固清单,20 项基线检查配具体命令,面向要动手的运维和站长,逐项执行即可显著收敛攻击面。
一、账号与权限基线:先关掉不该存在的入口
入侵者第一步往往是用弱口令或多余账号登录,账号面收敛优先级最高。
- 检查 UID 为 0 的账号:
awk -F: '==0{print }' /etc/passwd,除 root 外出现其他账号立即排查。 - 锁定无口令账号:
awk -F: '==""{print }' /etc/shadow,结果应为空。 - 禁止系统账号登录:将 daemon、bin 等账号 shell 设为
/sbin/nologin。 - sudo 最小授权:用
visudo按命令白名单授权,避免全员ALL=(ALL) ALL;用sudo -l -U 用户名复核。 - 口令策略:在
/etc/security/pwquality.conf设置最小长度与复杂度,并配置失败锁定。
二、SSH 加固:最高频被爆破的服务
SSH 是公网暴露面最大的服务,改完必须校验语法再重载。
# 备份后编辑 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 关键项 PermitRootLogin no PasswordAuthentication no MaxAuthTries 3 AllowUsers deploy ops # 校验并重载 sshd -t && systemctl reload sshd sshd -T | grep -E 'permitrootlogin|passwordauthentication'
改配置时保留一个已登录会话不关闭,确认密钥登录成功后再退出,防止把自己锁在门外。
三、网络与防火墙:默认拒绝,按需放行
先看真实监听端口,再决定放行什么:ss -tulnp。仅需 22、80、443 等必要端口对外,数据库与管理端口限制来源 IP。
firewall-cmd --permanent --add-service=https firewall-cmd --permanent --remove-service=ftp firewall-cmd --reload firewall-cmd --list-all
同时确认 SELinux 处于 enforcing:getenforce;关闭不必要的服务:systemctl list-unit-files --state=enabled。
四、内核参数与文件权限:堵住提权与信息泄露
在 /etc/sysctl.d/99-hardening.conf 中加入并执行 sysctl --system:
net.ipv4.conf.all.rp_filter=1防源地址伪造net.ipv4.tcp_syncookies=1缓解 SYN 洪水kernel.randomize_va_space=2强化地址随机化fs.suid_dumpable=0禁止转储敏感内存
权限方面:chmod 600 /etc/shadow、chmod 644 /etc/passwd;用 find / -perm -4000 -type f 排查异常 SUID 文件,用 find / -nouser -o -nogroup 找出孤立文件。
五、日志、补丁与审计留痕
没有日志就没有溯源。确认 systemctl status rsyslog 正常,用 journalctl -u sshd --since today | grep Failed 查看爆破记录,配置 logrotate 防磁盘写满。补丁按 yum check-update 或 apt list --upgradable 定期评估,内核更新安排维护窗口。关键目录可用 auditd 监控写入与权限变更。需要统一告警与集中分析时,可结合 AegisX 的主机安全与基线核查能力补充自动化巡检。
六、20 项基线速查表
| 类别 | 检查项 | 合格标准 |
|---|---|---|
| 账号 | UID=0 账号、空口令、系统账号 shell | 仅 root,无空口令 |
| SSH | root 登录、密码登录、最大尝试次数 | 全部禁用,次数≤3 |
| 网络 | 监听端口、防火墙策略、SELinux | 最小放行,enforcing |
| 内核 | syncookies、rp_filter、ASLR | 按清单开启 |
| 文件 | 敏感文件权限、SUID、孤立文件 | 无异常项 |
| 运维 | 补丁、日志、时间同步、备份 | 常态化执行 |
行动建议:按「账号→SSH→防火墙→内核与权限→日志补丁」顺序分批整改,每批改完用同一批命令复跑对比输出并存档;保持一个已登录会话与云控制台可用,确保随时可回滚。加固不是一次性任务,建议每月复检一次基线。
常见问题(FAQ)
生产服务器直接改SSH配置会不会把自己锁在外面?
有风险,必须先留后路。操作前保持一个已登录的SSH会话不关闭,修改sshd_config后先用sshd -t校验语法,再reload而非restart;同时确认新端口或密钥登录已生效,再关闭旧会话。若使用云主机,提前确认控制台VNC可用,避免配置错误导致无法远程登录。
20项基线要一次全做完吗?
不建议。按风险排序分批执行:先做账号与SSH、防火墙三类,再处理内核参数、日志与补丁,最后做文件权限与审计留痕。每批改完观察业务是否异常,保留回滚方案。一次性大改难以定位问题来源,分批推进更稳妥。
没有专业安全设备,怎么做日志审计?
用系统自带能力即可起步:rsyslog集中记录auth日志,配合logrotate防止磁盘写满,关键目录用auditd监控写入与权限变更。再定期用grep筛查失败登录与提权记录。若需要统一告警与集中分析,可引入AegisX的主机安全能力做补充。
加固后怎么验证真的生效了?
用同一批检查命令复跑并对比输出:sshd -T确认SSH参数、ss -tulnp确认监听端口、firewall-cmd --list-all确认规则、getenforce确认SELinux状态。再模拟一次外部端口扫描与失败登录,确认被拒绝并产生日志,才算闭环。
最小权限原则在实操中怎么落地?
三件事:禁用不必要的系统账号登录、sudo按需授权而非全员ALL、服务以独立低权限用户运行。定期用awk检查UID为0的账号、用sudo -l核对授权范围,发现多余权限立即回收,并记录变更。