1.9.1 安全基线与硬化原则

在企业级运维中,安全基线与硬化原则是保障 Linux 系统可用性、保密性与完整性的基础。安全基线是对系统最小安全配置的统一规范,硬化原则则是围绕减少攻击面、提升检测与防护能力的实施方法。本节面向生产环境,给出可落地的基线要点与硬化策略,并配套命令示例、安装与排错要点。

安全基线的核心目标#

  • 最小化攻击面:关闭无用服务与端口,移除不必要软件包与组件。
  • 最小权限原则:限制用户、进程、服务的权限范围,避免越权。
  • 可审计与可追溯:关键操作与安全事件必须可记录、可追查。
  • 持续可维护:基线应具备可重复执行、可版本管理的特性。

系统硬化的通用原则#

  • 默认拒绝:未明确允许的访问与服务默认拒绝。
  • 安全配置优先:优先使用安全配置模板与基线标准。
  • 分层防护:从系统、网络、应用、权限、审计等多个层面防护。
  • 可控变更:所有安全变更需通过变更流程并可回滚。

安全基线与硬化原理草图#

文章图片

安全基线落地要点(含命令示例)#

服务与端口控制#

# 1) 查看当前监听端口(预期:仅保留必要端口)
ss -tulpen

# 2) 列出开机自启服务
systemctl list-unit-files --type=service | grep enabled

# 3) 禁用无用服务(示例:avahi-daemon)
systemctl stop avahi-daemon
systemctl disable avahi-daemon

# 4) 核验服务状态
systemctl status avahi-daemon

账户与权限基线#

# 1) 禁止 root 远程登录(/etc/ssh/sshd_config)
# 预期:PermitRootLogin no
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl reload sshd

# 2) 设置密码复杂度(RHEL/CentOS: /etc/security/pwquality.conf)
# 预期:密码至少12位、包含三类字符
sudo tee /etc/security/pwquality.conf <<'EOF'
minlen=12
minclass=3
ucredit=-1
lcredit=-1
dcredit=-1
ocredit=-1
EOF

# 3) 失败锁定(RHEL8+:/etc/security/faillock.conf)
sudo tee /etc/security/faillock.conf <<'EOF'
deny=5
unlock_time=600
fail_interval=900
EOF

# 4) 审计非系统用户(UID>=1000)
awk -F: '$3>=1000 && $1!="nobody"{print $1,$3,$7}' /etc/passwd

文件与目录权限#

# 1) 关键目录权限核验
stat -c "%a %n" /etc /var/log /root

# 2) 限制敏感文件
chmod 600 /etc/shadow /etc/gshadow
chmod 640 /etc/sudoers

# 3) 查找可疑可写文件(排查 SUID/SGID)
find / -xdev -perm -4000 -o -perm -2000 2>/dev/null

系统内核与网络参数#

# 1) 写入基线 sysctl 配置(/etc/sysctl.d/99-hardening.conf)
sudo tee /etc/sysctl.d/99-hardening.conf <<'EOF'
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_max_syn_backlog=4096
EOF

# 2) 立即生效
sudo sysctl --system

# 3) 验证
sysctl net.ipv4.tcp_syncookies

日志与审计基线(安装与配置)#

# 1) 安装审计服务(RHEL/CentOS)
sudo yum -y install auditd

# 2) 启用与开机自启
sudo systemctl enable --now auditd

# 3) 配置审计规则(/etc/audit/rules.d/hardening.rules)
sudo tee /etc/audit/rules.d/hardening.rules <<'EOF'
-w /etc/sudoers -p wa -k sudoers_change
-w /etc/ssh/sshd_config -p wa -k ssh_config
-w /var/log/ -p wa -k log_change
EOF

# 4) 重新加载规则
sudo augenrules --load

# 5) 查询审计日志(预期:有 key 命中记录)
sudo ausearch -k ssh_config | tail

安全更新与漏洞管理#

# 1) 查看可更新包
sudo yum check-update

# 2) 应用安全更新(生产建议按窗口执行)
sudo yum -y update --security

# 3) 记录变更信息
rpm -qa --last | head

安全基线实施方式(可执行示例)#

基线模板与自动化执行#

# 示例:基线检查脚本(/usr/local/bin/baseline_check.sh)
cat <<'EOF' | sudo tee /usr/local/bin/baseline_check.sh
#!/bin/bash
set -e
echo "[*] Ports:"
ss -tulpen | awk 'NR==1 || /LISTEN/'
echo "[*] Root SSH login:"
grep -E "^PermitRootLogin" /etc/ssh/sshd_config || true
echo "[*] Sysctl hardening:"
sysctl net.ipv4.tcp_syncookies net.ipv4.conf.all.accept_redirects
echo "[*] Auditd status:"
systemctl is-active auditd
EOF
sudo chmod +x /usr/local/bin/baseline_check.sh

# 执行检查
/usr/local/bin/baseline_check.sh

常见风险与规避(含排错要点)#

  • 基线不一致:不同系统配置差异导致策略失效
    排错:对比配置文件与基线模板版本号;使用 diff 统一差异。
diff -u /etc/ssh/sshd_config /srv/baseline/sshd_config
  • 过度硬化:影响业务可用性
    排错:出现服务无法访问时,先回滚最近变更文件,再通过 journalctl -xe 查错。
sudo journalctl -xe | tail
  • 缺乏审计:安全事件发生后无法回溯
    排错:auditd 未运行或规则未加载。
systemctl status auditd
augenrules --check

练习#

  1. 编写并执行基线检查脚本,输出监听端口、SSH 配置与 sysctl 关键参数,并保存到 /var/log/baseline_check.log
  2. PermitRootLogin 设为 no 后重启 sshd,验证普通用户+sudo 仍可登录。
  3. 设计一条审计规则记录 /etc/passwd 变更,并用 ausearch -k 检索验证。

安全基线与硬化原则的价值在于形成规范化的安全防护体系,确保系统在可控范围内运行,为后续的认证、访问控制、防火墙策略与漏洞管理奠定统一标准。