系统安全基线配置与加固实战

系统化讲解操作系统安全基线配置与主机加固:CIS Benchmark 与等保基线、账号与认证加固(SSH/口令策略/sudo)、网络与防火墙加固、文件系统与权限加固、日志与审计加固、内核与服务加固,以及基线落地、验证与合规审计的完整流程。

导语:安全基线的意义是"默认配置不安全"

大多数被入侵的主机,问题都不在某个高级漏洞,而是基础配置不当:root 可以直接 SSH 登录、22 端口对公网开放、用户口令永不失效、日志没开审计、任意用户都能 sudo。安全基线(Hardening Baseline)就是把"不安全的默认值"改成"经评估的安全值",并用自动化工具持续校验,防止配置漂移。

一句话总结: 安全基线 = 一套明确定义的加固配置 + 自动校验它的工具 + 让不合规配置无法存在的流程。基线不是一次性加固,而是持续防漂移的机制。


1. 基线标准:CIS Benchmark 与等保

1.1 参考标准

标准内容适用
CIS BenchmarkLinux/Windows/云镜像的逐项加固建议,按 Level 1/Level 2 分级通用主机、云主机镜像
等保 2.0国标要求的安全计算环境基线(身份鉴别、访问控制、安全审计等)国内合规
云厂商基线各云平台默认安全基线(如扫描工具自带的基线包)云上实例
CIS Level 分级:
  Level 1:影响小、推荐全量启用(如关闭不需要的服务、口令策略)
  Level 2:可能影响性能/功能,需评估后启用(如强制审计某些场景)
建议:先全量 Level 1,再按业务场景评估 Level 2。

1.2 基线条目形态

一条基线 = 编号 + 描述 + 加固动作 + 验证方法 + 风险等级 + 例外申请

示例(CIS):
  · 1.4.1 确保 /etc/security/limits.conf 存在(防止 fork bomb)
  · 5.2.1 确保 SSH 禁止 root 直接登录(PermitRootLogin no)
  · 6.1.2 确保 /etc/shadow 权限为 0640

一句话总结: 基线标准把"加固"从经验变成可检查的清单——CIS 给逐项条目,等保给合规要求,两者可以映射。


2. 账号与认证加固

2.1 口令与账号策略

# 口令策略:长度、有效期、历史复用
sudo sed -i 's/PASS_MAX_DAYS.*/PASS_MAX_DAYS   90/' /etc/login.defs
sudo sed -i 's/PASS_MIN_LEN.*/PASS_MIN_LEN    12/' /etc/login.defs

# 禁止 root 直接登录(用普通用户 + sudo)
sudo sed -i 's/^#PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config

# 删除/锁定无主账号与弱账号
sudo usermod -L oracle          # 锁定不用的账号
sudo passwd -l <不用的账号>

# 检查空口令账号
sudo awk -F: '($2==""){print $1}' /etc/shadow

2.2 SSH 加固

SSH 配置建议(/etc/ssh/sshd_config):
  · PermitRootLogin no              # 禁 root 直接登录
  · PasswordAuthentication no       # 只允许密钥登录(杜绝弱口令爆破)
  · PubkeyAuthentication yes
  · Protocol 2
  · MaxAuthTries 3                  # 限制认证尝试次数
  · AllowUsers ops@10.0.0.0/8       # 白名单来源
  · 建议用 fail2ban/云安全组做二次拦截

2.3 sudo 最小化

# sudo 白名单 + 无需密码仅限指定命令
echo 'ops ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx' >> /etc/sudoers.d/ops
# 禁止任何用户对 sudoers 之外写入;定期审计 /etc/sudoers 内容

一句话总结: 账号加固的核心是「禁 root 直连、密钥登录、最小 sudo、口令策略」——把暴力破解和提权的第一步路堵死。


3. 网络与防火墙加固

3.1 端口与服务最小化

# 查看监听端口与对应进程,关闭不需要的服务
sudo ss -tlnp
# 只保留业务必需端口,其余全部关闭

# 云安全组/主机防火墙放行最小集
sudo ufw default deny incoming
sudo ufw allow from 10.0.0.0/8 to any port 22 proto tcp   # 管理面限定内网
sudo ufw allow from 0.0.0.0/0 to any port 443 proto tcp   # 业务面仅 443

3.2 加固要点

· 管理端口(SSH/数据库/管理台)只对办公网/跳板机网段开放
· 公网只暴露必要业务端口(80/443),其余 deny
· 关闭不需要的守护进程与开机自启服务(systemctl list-units)
· 开启内核 IP 转发策略注意:内部转发只在内网路由所需场景开启

一句话总结: 网络加固是「默认拒绝 + 最小放行」——暴露面越小,能被攻击者触达的攻击面越小。


4. 文件系统与权限加固

# 关键文件权限收紧
sudo chmod 640 /etc/shadow        # 含口令哈希,仅 root/owner 组可读
sudo chmod 600 /etc/ssh/sshd_config
sudo chmod 600 ~/.ssh/authorized_keys

# 查找危险权限:全局可写文件/目录、带 setuid 的可疑文件
sudo find / -xdev -perm -0002 -type f 2>/dev/null | head -50   # 全局可写
sudo find / -xdev -perm -4000 -type f 2>/dev/null               # setuid
sudo find / -xdev -type f -name '*.bak' -o -name '*.conf~' 2>/dev/null

# 危险挂载点:/tmp、/var/tmp 建议 noexec,nosuid,nodev
# 在 /etc/fstab 中为独立分区添加挂载选项
· /tmp、/var/tmp 使用独立分区并挂载 noexec,nosuid,nodev(防提权与恶意脚本执行)
· 程序安装目录去写权限(非 root 不能改)
· 禁用/隔离 setuid 非必要的二进制

一句话总结: 权限加固的关键是「最小可写 + 最小特权」——查全局可写、收紧含密文件权限、加固临时目录挂载。


5. 日志与审计加固

5.1 开启审计与集中日志

# 开启 auditd(记录关键系统调用与命令执行)
sudo systemctl enable --now auditd
sudo auditctl -a always,exit -F arch=b64 -S execve        # 记录命令执行

# 关键事件入审计
sudo auditctl -a always,exit -F arch=b64 -S open -F auid>=1000 -F auid!=4294967295

# 日志落盘到集中平台(Syslog/SIEM),防止攻击者清除本地日志
# 日志权限:仅 root 可写,防篡改
sudo chmod 640 /var/log/messages

5.2 时间同步与完整性

· NTP/chrony 时间同步(日志时序一致,取证关键)
· 关键二进制/配置做文件完整性校验(AIDE / 云主机安全 Agent)
   → 异常变更告警
· 日志保留策略符合合规要求(≥ 6 个月)

一句话总结: 日志加固是「留痕 + 防篡改 + 集中 + 防清」——审计开着、日志上送、时间同步,攻击者"抹痕"的难度直线上升。


6. 内核与服务加固

# 内核参数(/etc/sysctl.conf 或 systemd 覆盖)
net.ipv4.tcp_syncookies = 1          # 防 SYN flood
net.ipv4.conf.all.rp_filter = 1      # 反向路径过滤
net.ipv4.icmp_echo_ignore_broadcasts = 1
kernel.randomize_va_space = 2        # ASLR 全开
kernel.yama.psacct                  # 如适用

# SELinux/AppArmor
sudo setenforce 1 && sudo sed -i 's/SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config

# 仅保留必要系统服务
sudo systemctl list-unit-files --state=enabled
sudo systemctl disable <不需要的服务>
· 内核加固:ASLR、syncookies、rp_filter 等一键参数
· 强制访问控制:SELinux/AppArmor(比 chmod 更强的进程隔离)
· 服务最小化:禁用所有非业务必要服务
· 补丁管理:定期 yum/dnf/apt 更新安全补丁(配合漏洞管理)

一句话总结: 内核与服务加固 = 「内核参数安全化 + 强制访问控制 + 服务最小化 + 补丁及时」。


7. 基线落地、验证与防漂移

7.1 落地流程

① 选基线:按 OS 选 CIS/等保/云基线包
② 盘点现状:用扫描工具(如 lynis、云基线检查)打一次分
③ 分批加固:先 Level 1 全部,再 Level 2 按业务评估;每批变更走评审
④ 验证:重扫确认合规模块,回归业务功能
⑤ 固化到镜像/基础设施即代码:新机器从"加固镜像"或 IaC 基线配置创建
⑥ 持续防漂移:定期扫描 + 变更即告警 + 不合规自动修复或拦截

7.2 自动化工具

· 基线扫描:Lynis / CIS-CAT / 云厂商基线检查(一键出报告)
· 加固即代码:Ansible / Terraform / Packer 把基线写成配置
· 防漂移:定时任务重扫比对,合规模块差异告警
· 云安全:CSPM(云安全态势管理)持续检测实例/镜像不合规

一句话总结: 基线真正落地靠「基线写成代码 + 新机器从固化镜像出 + 定期扫描防漂移」三件事,否则就是"上一次线加固一次、之后又漂回去"。


8. 避坑清单

坑后果对策
直接关 SELinux失去强制访问控制层转 enforcing 而非 disabled
基线一次做完不复查配置漂移回到不安全定期扫描 + 告警
新机器不复用加固镜像每次从裸机重新加固固化镜像 + IaC
禁 root 前未留 sudo 通道把自己锁在外面先建运维账号再禁 root
只加固不测试业务被误伤分批变更 + 回归验证
全开 Level 2性能/兼容受影响按业务评估启用

9. 总结

系统安全基线是主机安全的地基,记住五层加固 + 一个机制:

层关键动作
账号认证禁 root 直连、密钥登录、最小 sudo
网络默认拒绝 + 最小放行,管理面限内网
文件权限收紧含密文件、加固 /tmp、去全局可写
日志审计auditd + 集中上送 + 防篡改
内核服务内核参数 + SELinux/AppArmor + 服务最小化

机制:基线写成代码、镜像固化、定期扫描防漂移。主机加固不是"配一次",而是让"安全配置"成为这台机器的默认状态、并且一直在。

延伸阅读

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「安全」更多文章

  1. 威胁情报与 APT 防御实战
  2. 漏洞全生命周期管理实战
  3. 安全编码规范与代码审计实战