4、操作系统合规基线:Windows Server/Linux基线配置、账户策略与密码策略、审计日志开启与配置

操作系统基线,说白了就是一台服务器「出厂前」必须拧紧的螺丝。我见过太多团队,业务跑得飞起,结果等保测评一来,光密码策略就挂了七八项。嗯,今天咱们就把 Windows Server 和 Linux 两边最关键的基线配置掰开揉碎讲清楚。

核心原则:基线不是越严越好,而是要在安全与运维之间找到平衡点。我曾经帮一家金融客户做整改,他们把密码最长使用期设成 15 天,结果运维同事天天在群里喊「密码又过期了」——这种配置根本落不了地。

4.1 Windows Server 基线配置要点

Windows Server 的基线,我个人习惯从三个维度入手:账户策略、本地策略、事件日志。别小看这些 GUI 界面里的选项,很多攻击者就是靠默认配置进来的。

4.1.1 账户策略与密码策略

密码策略是基线的第一道门。我建议你直接在组策略管理编辑器里操作,路径是:计算机配置 → Windows 设置 → 安全设置 → 账户策略 → 密码策略。

策略项 推荐值 说明
密码必须符合复杂性要求 已启用 必须包含大写、小写、数字、特殊字符中三类
密码长度最小值 12 个字符 低于 8 位基本等于没设
密码最长使用期限 90 天 等保三级要求 90 天,别设太短
强制密码历史 5 个 防止用户循环使用旧密码
账户锁定阈值 5 次无效登录 防暴力破解的关键
账户锁定时间 30 分钟 锁定后自动解锁,避免管理员手动解

注意:启用「账户锁定阈值」后,一定要同步配置「重置账户锁定计数器」时间。我遇到过有人只设了锁定阈值,没设计数器重置时间,结果用户输错 5 次后账户永久锁定——最后只能进安全模式解。

4.1.2 审计日志开启与配置

Windows 的审计策略默认只记录少量事件,这远远不够。你需要手动开启以下关键审计类别:

  • 账户登录事件:记录谁在什么时候登录了系统
  • 账户管理:记录创建、删除、修改用户或组的操作
  • 登录事件:记录本地或远程登录尝试
  • 对象访问:记录对关键文件或注册表的访问
  • 策略更改:记录安全策略的修改
  • 特权使用:记录特权命令的执行

配置路径:计算机配置 → Windows 设置 → 安全设置 → 本地策略 → 审核策略。我个人习惯把「审核登录事件」和「审核账户登录事件」都设为「成功和失败」——失败日志在排查攻击时特别有用。

小技巧:日志文件大小默认只有 20MB,对于生产服务器来说根本不够。我建议把事件日志大小调到至少 1GB,并设置「按需要覆盖事件」或「存档日志」。否则日志一满,新事件就写不进去了。

4.2 Linux 基线配置要点

Linux 的基线配置,说白了就是改几个关键文件。我刚开始做 Linux 安全时,总觉得改 /etc/ssh/sshd_config 很麻烦,后来被扫出一个弱密码漏洞后,再也不敢偷懒了。

4.2.1 账户策略与密码策略

Linux 的密码策略主要靠 PAM(可插拔认证模块)控制。核心文件是 /etc/pam.d/common-password(Debian/Ubuntu)或 /etc/pam.d/system-auth(RHEL/CentOS)。

以下是我常用的配置示例:

# /etc/pam.d/common-password 关键配置
password requisite pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
password requisite pam_unix.so sha512 shadow remember=5

参数说明:

  • retry=3:允许用户重试 3 次
  • minlen=12:密码最小长度 12 位
  • ucredit=-1:至少 1 个大写字母
  • lcredit=-1:至少 1 个小写字母
  • dcredit=-1:至少 1 个数字
  • ocredit=-1:至少 1 个特殊字符
  • remember=5:记住最近 5 次密码,防止重复

账户锁定策略则通过 pam_tally2 或 pam_faillock 实现:

# /etc/pam.d/login 添加以下行
auth required pam_tally2.so deny=5 unlock_time=1800 onerr=fail
account required pam_tally2.so

避坑指南:我曾经在 CentOS 7 上配置 pam_tally2,结果忘记在 sshd 的 PAM 文件里也加上同样的配置。结果 SSH 登录不受锁定限制——等于白配。记住,本地登录和远程登录的 PAM 文件是分开的。

4.2.2 审计日志开启与配置

Linux 的审计系统核心是 auditd。很多新手以为装了 auditd 就完事了,其实默认规则几乎不记录任何有用信息。你需要手动添加规则。

安装与启动:

# Debian/Ubuntu
apt install auditd audispd-plugins
systemctl enable auditd
systemctl start auditd

# RHEL/CentOS
yum install audit
systemctl enable auditd
systemctl start auditd

以下是我常用的审计规则(写入 /etc/audit/rules.d/audit.rules):

# 删除所有默认规则
-D

# 设置缓冲区大小
-b 8192

# 记录时间同步
-w /etc/ntp.conf -p wa -k time_change

# 记录用户和组管理
-w /etc/passwd -p wa -k user_modify
-w /etc/shadow -p wa -k user_modify
-w /etc/group -p wa -k user_modify

# 记录 SSH 配置变更
-w /etc/ssh/sshd_config -p wa -k sshd_config

# 记录特权命令执行
-a exit,always -F arch=b64 -S execve -F euid=0 -k root_command

# 记录登录事件
-w /var/log/wtmp -p wa -k login_events
-w /var/log/btmp -p wa -k failed_login

# 记录系统关键文件变更
-w /etc/sudoers -p wa -k sudoers_change
-w /etc/hosts -p wa -k hosts_change

个人经验:审计日志最怕的就是磁盘写满。我建议把 /var/log/audit/ 单独分区,并设置日志轮转。在 /etc/audit/auditd.conf 里把 max_log_file 设为 500MB,num_logs 设为 5,这样既能保留足够的历史记录,又不会撑爆磁盘。

4.3 基线配置知识体系

下面这张图把 Windows Server 和 Linux 的基线配置核心逻辑串起来了。你想想看,不管是哪边的系统,最终都落在「身份认证」和「行为审计」这两条线上。

操作系统合规基线知识体系 操作系统合规基线核心逻辑 操作系统基线 身份认证 行为审计 密码策略 账户锁定 SSH/远程访问 登录事件 账户管理 特权命令 Windows Server 组策略 / 事件查看器 Linux PAM / auditd 核心目标:最小权限 + 可追溯 + 防暴力破解 Windows 侧重 GUI 策略,Linux 侧重配置文件

4.4 基线检查与自动化

手动配完基线后,我建议你用工具做一次验证。Windows 上可以用 SecPol.msc 导出安全策略,然后用 secedit /analyze 对比基线。Linux 上我常用 lynis 做快速扫描:

# 安装 lynis
apt install lynis   # Debian/Ubuntu
yum install lynis   # RHEL/CentOS

# 执行系统审计
lynis audit system

# 查看审计报告
cat /var/log/lynis-report.dat | grep "suggestion\|warning"

自动化建议:如果你管理的服务器超过 10 台,手动配基线根本不现实。我个人习惯用 Ansible 写 playbook,把密码策略、审计规则、SSH 配置全部写成角色。每次新服务器上线,跑一遍 playbook 就能保证基线一致。嗯,这个后面章节会详细讲。

最后说一句:基线配置不是一次性工作。系统版本升级、补丁更新、业务变更都可能影响基线状态。我建议每季度至少做一次基线复核,把审计日志导出来看看有没有异常。安全这件事,说白了就是「平时多流汗,战时少流血」。