导语:安全基线的意义是"默认配置不安全"
大多数被入侵的主机,问题都不在某个高级漏洞,而是基础配置不当:root 可以直接 SSH 登录、22 端口对公网开放、用户口令永不失效、日志没开审计、任意用户都能 sudo。安全基线(Hardening Baseline)就是把"不安全的默认值"改成"经评估的安全值",并用自动化工具持续校验,防止配置漂移。
一句话总结: 安全基线 = 一套明确定义的加固配置 + 自动校验它的工具 + 让不合规配置无法存在的流程。基线不是一次性加固,而是持续防漂移的机制。
1. 基线标准:CIS Benchmark 与等保
1.1 参考标准
| 标准 | 内容 | 适用 |
|---|---|---|
| CIS Benchmark | Linux/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 + 服务最小化 |
机制:基线写成代码、镜像固化、定期扫描防漂移。主机加固不是"配一次",而是让"安全配置"成为这台机器的默认状态、并且一直在。
延伸阅读
- 容器安全最佳实践 — 镜像与容器的加固基线
- Kubernetes 安全加固 — 集群层的安全基线
- 安全合规与数据保护 — 等保 2.0 与合规审计视角
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。