13.5 系统基线加固
一句话
基线加固不是 “打补丁” 一件事,而是把 “安全的默认值”固化下来:关掉不需要的服务、收紧账号与权限、限制内核暴露面、记录审计——然后用脚本持续检查,而不是靠人记。
基线项(按收益排序)
| 类别 | 关键项 | 判据 |
|---|---|---|
| 账号 | 禁用 root 远程登录、强制密钥、最小 sudo | /etc/ssh/sshd_config、visudo |
| 服务 | 只开必要端口、关掉 telnet/ftp | ss -tlnp 对照白名单 |
| 内核 | randomize_va_space=2、kptr_restrict=2、禁 IP 转发 | sysctl -a |
| 文件 | 关键目录权限(600/700)、noexec 挂载 | find / -perm -o+w |
| 日志 | auditd/集中日志、留存 ≥6 个月 | 见 3.5 审计与取证 |
| 容器 | 非 root 运行、只读根文件系统、禁特权 | securityContext |
脚本:一次检查、输出得分
#!/usr/bin/env bash
# 最小基线检查:每项 0/1 分,最后给百分比
score=0; total=0
check(){ total=$((total+1)); if eval "$2" >/dev/null 2>&1; then score=$((score+1)); printf "✓ %s\n" "$1"; else printf "✗ %s\n" "$1"; fi; }
check "禁止 root 远程登录" "! grep -qiE '^PermitRootLogin\s+yes' /etc/ssh/sshd_config"
check "禁止密码登录" "grep -qiE '^PasswordAuthentication\s+no' /etc/ssh/sshd_config"
check "关闭 IP 转发" "[ \"\$(sysctl -n net.ipv4.ip_forward)\" = 0 ]"
check "地址随机化开启" "[ \"\$(sysctl -n kernel.randomize_va_space)\" = 2 ]"
check "无全局可写目录" "! find /etc /usr /bin -xdev -perm -o+w 2>/dev/null | grep -q ."
echo "基线得分: $score/$total"
(脚本为通用写法,未在本机对生产机执行;不同发行版路径略有差异。)
反模式
| 反模式 | 后果 |
|---|---|
| 只做一次加固,之后不复测 | 新装机/新镜像又回到默认值 |
| 用 “手工 checklist” 检查 | 人一换就忘,无法持续 |
| 为了排障方便开 root 登录 | 暴露面回到解放前 |
| 基线不考虑业务(一刀切) | 关掉必要服务,业务受损后被回滚 |
| 加固不做变更记录 | 出问题无法回滚到 “加固前” |
| 只加固主机、不管镜像 | 容器里仍是宽松默认值 |
三条铁律
🔑 基线要脚本化、可复测;手工 checklist 不算基线。
🔑 加固必须可回滚(记录变更、保留旧配置)。
🔑 镜像基线 = 主机基线;容器不是法外之地。
自检
Q1 为什么 “加固一次” 没用?
▸ 答案:因为环境会持续产生新的默认配置:新装机、新镜像、新扩缩容节点都会回到 “发行版默认”。只有把基线写进镜像/启动脚本 + 定期复测,才能保持在 “加固后” 的状态。
Q2 “禁 root 远程登录” 为什么是收益最高的一项?
▸ 答案:因为互联网上的暴力破解主要打 root:禁用后攻击面立即缩小,且强制使用普通账号 + sudo 后,操作可审计、权限可细分。成本很低(配置一行),收益很高(阻断大部分自动化爆破)。
Q3 内核参数加固的常见项有哪些?
▸ 答案:randomize_va_space=2(ASLR)、kptr_restrict=2(隐藏内核符号)、net.ipv4.ip_forward=0(非路由器不转发)、net.ipv4.conf.all.accept_redirects=0(禁 ICMP 重定向)、kernel.dmesg_restrict=1(限制 dmesg 读取)。
Q4 容器基线要额外注意什么?
▸ 答案:四条:非 root 运行(runAsNonRoot)、只读根文件系统(readOnlyRootFilesystem)、禁止特权/提权(allowPrivilegeEscalation: false、privileged: false)、能力最小化(drop: [ALL])。容器默认的宽松配置和主机一样危险。
Q5 一刀切基线会带来什么问题?
▸ 答案:会误伤业务:比如关掉 IP 转发导致容器网络不通、限制文件权限导致应用起不来。正确做法是 “基线分层”:所有主机共用的最小集 + 按角色(数据库/网关/容器节点)的额外项,并允许 “有评审的例外”。
Q6 加固后如何验证 “真的生效”?
▸ 答案:三条:脚本复测得分(应接近 100%)、外部扫描(端口/漏洞扫描对照)、攻击面复核(从外网能否访问管理端口)。只看 “配置文件改了” 不够,要看 “实际行为”。
Q7 基线与等保/合规是什么关系?
▸ 答案:基线是合规的技术落地:等保的 “身份鉴别、访问控制、入侵防范” 等控制项,最终都要落到具体配置。先把基线做扎实,测评时 “技术项” 才有证据;反之,只写制度不改配置,测评过不了(见 3.1 等级保护与网络安全法)。