这篇文章按五大核查对象拆解基线核查的全部要点:每个对象给核查项、给命令、给整改动作,最后讲清楚核查之后的整改闭环怎么建。文中命令均在 RHEL/CentOS 8+、麒麟 V10、统信 UOS、MySQL 8.0、Oracle 19c、Tomcat 9 等现行主流版本上核对过语法,可直接照做。
01 基线核查,为什么是测评的重头戏
等保 2.0 的标准体系由三份国标构成:GB/T 22239-2019《网络安全等级保护基本要求》、GB/T 25070-2019《安全设计技术要求》、GB/T 28448-2019《测评要求》。现场测评的方法只有三种:访谈、核查、测试。其中**核查(查配置、看记录)**承接了绝大多数测评项。

图 1:基线核查在等保测评中的位置
以三级系统"安全计算环境"的 11 个控制点为例:身份鉴别、访问控制、安全审计、入侵防范这四个控制点的测评项,几乎全部落在配置核查上------口令策略达不达标、审计日志开没开、默认账户改没改,全是一行配置的事。基线过硬,测评就顺;基线松散,访谈讲得再好也补不回来。
法规锚点:《网络安全法》第二十一条要求采取监测记录网络运行状态、网络安全事件的技术措施,并按照规定留存网络日志不少于六个月 ;三级系统依据《信息安全等级保护管理办法》每年至少测评一次;《关键信息基础设施安全保护条例》自 2021 年 9 月 1 日施行后,关基系统的配置核查要求进一步加严。
02 八大通用核查项:五类对象全部适用
不管是主机、数据库还是防火墙,总有一组核查项跨对象通用。把这八项做成默认基线模板,新系统上线即套用,是成本最低的合规方式。

图 2:八大通用核查项与等保 2.0 控制点映射(三级)
两点说明:其一,等保 2.0 原文对多数条款是定性要求(如"应对登录的用户进行身份标识和鉴别"),"8 位口令、90 天更换、5 次锁定"这类具体数值来自测评实践与行业基线(金融行业 JR/T 0071 系列、CIS Benchmarks 等),数值可按行业要求从严调整。其二,通用项落到不同对象上语法不同------下面分对象逐一展开。
03 主机核查(一):Linux 实战

图 3:主机核查 Linux 与 Windows 对照总览
3.1 身份鉴别:口令三件套 + 失败锁定
口令周期看/etc/login.defs,复杂度看/etc/security/pwquality.conf。
注意 login.defs 的PASS_MIN_LEN只在非 PAM 场景生效,实际复杂度以 pwquality 为准:
# /etc/login.defs 口令周期
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 7
PASS_MIN_LEN 8
# /etc/security/pwquality.conf 口令复杂度(PAM 生效)
minlen = 8
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
maxrepeat = 3
enforcing = 1
登录失败锁定,RHEL 8+/麒麟 V10/统信 UOS 已用pam_faillock取代老的 pam_tally2(后者在这些版本已移除)。推荐做法是编辑/etc/security/faillock.conf后用 authselect 启用,不必手改 PAM 文件:
# 1) 编辑 /etc/security/faillock.conf
deny = 5
fail_interval = 900
unlock_time = 900
even_deny_root
root_unlock_time = 900
# 2) 通过 authselect 启用(RHEL 8+ / 麒麟 V10 / 统信 UOS)
authselect enable-feature with-faillock
authselect apply-changes
核查与解锁命令:
# 查看指定用户的失败记录
faillock --user root
# 解锁(整改后清零计数)
faillock --user zhangsan --reset
# 核查 PAM 是否已挂载 faillock(password-auth / system-auth)
grep pam_faillock /etc/pam.d/password-auth
3.2 访问控制:禁 root 远程 + 排查空口令
SSH 侧四项基线(改完systemctl restart sshd生效):
# /etc/ssh/sshd_config
PermitRootLogin no
MaxAuthTries 4
PermitEmptyPasswords no
ClientAliveInterval 600
ClientAliveCountMax 1
# 说明:禁止root远程登录 / 认证尝试上限4次 / 严禁空口令
# 空闲600秒探测1次未响应即断开,会话超时10分钟
# 终端通用超时 /etc/profile.d/tmout.sh
TMOUT=600
readonly TMOUT
export TMOUT
空口令与默认账户排查、umask 收紧:
# 排查空口令账户(有输出即为高风险项)
awk -F: '($2 == ""){print "空口令账户: " $1}' /etc/shadow
# 锁定/删除无用账户
usermod -L demo_user # 锁定
userdel -r demo_user # 删除
# 默认 umask 收紧为 027
echo "umask 027" >> /etc/profile.d/umask.sh
# 关键文件权限核查(shadow 属主 root,其他用户不可读写)
ls -l /etc/passwd /etc/shadow /etc/gshadow
3.3 安全审计:审计规则 + 远程转发 + 六个月留存
审计分两层:内核审计(auditd 记录关键文件与调用)和系统日志(rsyslog 统一收集转发)。规则写到/etc/audit/rules.d/audit.rules,用augenrules加载,重启不丢:
# /etc/audit/rules.d/audit.rules 关键文件监控
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/sudoers -p wa -k scope
-w /etc/sudoers.d/ -p wa -k scope
# 加载并核查
augenrules --load
systemctl enable --now auditd
auditctl -s # 状态:enabled=1 即审计开启
auditctl -l # 已加载规则列表
远程转发与留存周期:@@表示 TCP、单个@表示 UDP;logrotate 按周轮转 26 份即约六个月:
# /etc/rsyslog.conf 远程转发(@@=TCP,@=UDP)
*.* @@192.168.10.10:514
systemctl restart rsyslog
# /etc/logrotate.conf 按周轮转 26 份 ≈ 6 个月
weekly
rotate 26
3.4 入侵防范:最小安装 + SELinux + 补丁
# 最小安装核查:看已启用服务与监听端口
systemctl list-unit-files --state=enabled
ss -tulpn
# SELinux 应为 Enforcing
getenforce
# 永久生效:/etc/selinux/config 中 SELINUX=enforcing
# 安全补丁(RHEL 8+ 用 dnf)
dnf update --security -y
rpm -qa --last | head -20
3.5 一键自查脚本(只读,不改动系统)
把上述核查项串成脚本,测评前自己先跑一遍,报告里的问题项清零再迎评:
#!/bin/bash
# 等保 Linux 基线自查(只读)
echo "== 1 口令策略 =="
grep -E '^PASS_(MAX_DAYS|MIN_DAYS|WARN_AGE)' /etc/login.defs
grep -E '^minlen|^[udlo]credit' /etc/security/pwquality.conf
echo "== 2 登录失败锁定 =="
grep -Ev '^#|^$' /etc/security/faillock.conf
echo "== 3 SSH 基线 =="
sshd -T | grep -Ei 'permitrootlogin|maxauthtries|permitemptypasswords'
echo "== 4 空口令账户 =="
awk -F: '($2 == ""){print $1}' /etc/shadow
echo "== 5 审计与日志 =="
systemctl is-active auditd rsyslog
auditctl -s | head -3
echo "== 6 留存周期 =="
grep -E '^weekly|^rotate' /etc/logrotate.conf
04 主机核查(二):Windows 实战
Windows 的口令与锁定策略看net accounts一条命令的输出即可判定;整改既可以用命令行批量改,也可以走组策略(gpedit.msc:计算机配置 → Windows 设置 → 安全设置 → 账户策略):
# 核查:口令与锁定策略现状
net accounts
# 整改:口令四项(长度/有效期/最短天数/历史次数)
net accounts /minpwlen:8 /maxpwage:90 /minpwage:7 /uniquepw:5
# 整改:锁定策略(5 次失败锁 15 分钟,计数窗口 15 分钟)
net accounts /lockoutthreshold:5 /lockoutduration:15 /lockoutwindow:15
审核策略用auditpol核查,九类审核事件(登录/账户登录/对象访问/策略更改/权限使用/详细跟踪/系统/账户管理/进程跟踪)按测评要求开启成功或失败:
# 核查:九类审核策略开启情况
auditpol /get /category:*
# 整改示例:开启登录事件成功+失败审核
# 中文系统子类别名已本地化,建议用组策略统一配置:
# gpedit.msc → 计算机配置 → Windows 设置 → 安全设置 → 高级审核策略
# 导出本地安全策略做证据留存
secedit /export /cfg C:\secpol.cfg
findstr /i "password lockout" C:\secpol.cfg
账户治理与三项注册表基线(重命名 Administrator 用 PowerShell 的 Rename-LocalUser,比已淘汰的 wmic 更通用):
# 重命名内置 Administrator(PowerShell,管理员)
Rename-LocalUser -Name "Administrator" -NewName "secadmin"
# 禁用 Guest
net user guest /active:no
# 关闭默认管理共享(需重启 Server 服务或重启主机)
reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" ^
/v AutoShareServer /t REG_DWORD /d 0 /f
# 核查 RDP 是否启用 NLA(UserAuthentication=1 即开启)
$rk = "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp"
Get-ItemProperty $rk -Name UserAuthentication
05 数据库核查:三大产品 + 信创

图 4:数据库核查要点总览
5.1 Oracle(11g/12c/19c)
口令策略全部落在 Profile 上,一条查询看全貌:
-- 口令策略全景(关注 DEFAULT 与自建 Profile)
SELECT profile, resource_name, limit
FROM dba_profiles
WHERE resource_type = 'PASSWORD'
ORDER BY profile, resource_name;
整改与审计核查:
-- 整改:失败 5 次锁定,口令 90 天过期
ALTER PROFILE DEFAULT LIMIT
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LIFE_TIME 90;
-- 核查审计开关(重启实例后生效)
SELECT name, value FROM v$parameter WHERE name = 'audit_trail';
ALTER SYSTEM SET audit_trail = 'DB,EXTENDED' SCOPE = SPFILE;
-- 默认账户状态核查
SELECT username, account_status FROM dba_users
WHERE account_status LIKE 'OPEN%';
ALTER USER outln ACCOUNT LOCK;
默认账户核查:重点关注 dbsnmp、outln、xs$null 等账户状态,不在用的锁定;19c 建议同时启用统一审计(Unified Auditing),审计记录查unified_audit_trail。
5.2 MySQL 8.0
8.0 的口令复杂度组件(validate_password component,注意与旧插件的变量名差异:组件用点号命名):
-- 安装口令复杂度组件(MySQL 8.0)
INSTALL COMPONENT 'file://component_validate_password';
SHOW VARIABLES LIKE 'validate_password%';
-- 整改:SET PERSIST 重启不丢
SET PERSIST validate_password.length = 8;
SET PERSIST validate_password.mixed_case_count = 1;
SET PERSIST validate_password.number_count = 1;
SET PERSIST validate_password.special_char_count = 1;
-- 口令自动过期(全局默认 90 天)
SET PERSIST default_password_lifetime = 90;
登录失败限制用 connection_control 插件(延迟单位是毫秒,900000ms = 15 分钟);安全路径与监听地址核查:
-- 登录失败限制:connection_control 插件
INSTALL PLUGIN connection_control SONAME 'connection_control.so';
INSTALL PLUGIN connection_control_failed_login_attempts
SONAME 'connection_control.so';
SET PERSIST connection_control_failed_connections_threshold = 5;
-- 单位毫秒:900000ms = 15 分钟
SET PERSIST connection_control_min_connection_delay = 900000;
-- 核查:安全路径与匿名账户
SHOW VARIABLES LIKE 'secure_file_priv';
SELECT user, host FROM mysql.user;
-- /etc/my.cnf [mysqld] 收敛监听:bind-address = 10.0.0.5
审计提示:MySQL 社区版不带审计插件,企业版用 MySQL Enterprise Audit(audit_log 插件);社区方案可选 Percona Server 的 audit_log 插件或 MariaDB 的 server_audit,等保场景必须补齐------无审计是数据库核查的最常见高风险项。
5.3 SQL Server
-- 口令策略核查(应为 1)
SELECT name, is_policy_checked, is_expiration_checked
FROM sys.sql_logins;
ALTER LOGIN app_user WITH CHECK_POLICY = ON;
-- sa 治理:改名并禁用
ALTER LOGIN sa WITH NAME = [sec_sa];
ALTER LOGIN sa DISABLE;
-- C2 审计(官方要求重启实例后生效)
EXEC sys.sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sys.sp_configure 'c2 audit mode', 1; RECONFIGURE;
-- 新版本建议改用 SQL Server Audit 对象,登录审计设为"成功和失败"
5.4 信创数据库
达梦 DM8 的SP_SET_PARA_VALUE体系与金仓 KingbaseES 的 kingbase.conf 配置核查逻辑与传统数据库同源:口令策略、审计开关、权限模型三件事。
两家均自带安全基线检查工具(DM 的安全版本工具集、KingbaseES 的 sys_security 相关检查),建议内置工具全量扫描 + 关键项手工复核,报告直接作为测评证据附件。
06 中间件核查:直面互联网的第一入口

图 5:中间件核查要点总览
6.1 Nginx
# nginx.conf / conf.d/*.conf
server_tokens off;
ssl_protocols TLSv1.2 TLSv1.3;
# TLS1.3 密套自动协商,此处仅约束 TLS1.2
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
# 禁用不必要的 HTTP 方法
if ($request_method ~* ^(PUT|DELETE)$) { return 403; }
keepalive_timeout 30;
client_max_body_size 10m;
access_log /var/log/nginx/access.log main;
改完先nginx -t验证语法再systemctl reload nginx;日志走 logrotate 留存六个月。
6.2 Tomcat(9.x)
server.xml 三处硬基线:shutdown 端口改掉并换长随机串、AJP 只绑本机并设 secret(Ghostcat 漏洞 CVE-2020-1938 的标准修复)、启用 HTTPS:
<!-- 1. shutdown 端口与口令 -->
<Server port="8015" shutdown="STR0NG-R4nd0m-Secret">
<!-- 2. AJP:只绑本机 + 强制 secret(修复 Ghostcat)-->
<Connector protocol="AJP/1.3" port="8009"
address="127.0.0.1"
secretRequired="true" secret="Ajp-S3cret-Key" />
<!-- 3. HTTPS 连接器(TLS 1.2+)-->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true" scheme="https" secure="true" >
<SSLHostConfig protocols="TLSv1.2,TLSv1.3">
<Certificate certificateKeystoreFile="conf/keystore.jks" />
</SSLHostConfig>
</Connector>
再删掉 webapps 下不用的 docs、examples、manager、host-manager 目录;manager 若必须保留,conf/tomcat-users.xml里配强口令并绑定内网访问。
6.3 WebLogic
WebLogic 核查重点:控制台(/console)配置 IP 白名单与登录锁定、删除安装时自带的 samples/medrec 示例应用、部署目录权限最小化、管理通道切 SSL,以及按季度跟 Oracle CPU(关键补丁更新)------WebLogic 历年反序列化漏洞(CVE-2015-4852 及后续系列)的根治手段就是补丁。
07 网络设备核查
网络设备的通用项与主机一致(口令、锁定、SSH、SNMPv3、日志、NTP、关闭未用端口、配置备份),落成各厂商命令。H3C Comware 7 的口令体系一条命令族搞定:
# H3C Comware 7 口令基线(# 开头为说明,无需输入)
password-control enable
# 口令 90 天过期
password-control aging 90
# 最短 8 位,至少含 3 类字符、每类至少 1 个
password-control length minimum 8
password-control composition type-number 3 type-length 1
# 5 次失败锁定 15 分钟
password-control login-attempt 5 exceed lock-time 15
# 最多连续 3 个相同字符
password-control complexity same-character 3
华为 VRP 关闭 Telnet、启用 STelnet + AAA:
# 华为 VRP:关 Telnet,用 STelnet + AAA
aaa
local-user secops password irreversible-cipher XXXXXX
local-user secops privilege level 15
local-user secops service-type ssh
stelnet server enable
ssh user secops authentication-type password
ssh user secops service-type stelnet
user-interface vty 0 4
authentication-mode aaa
protocol inbound ssh
idle-timeout 15
SNMP 一律用 v3(关闭 v1/v2c 团体字,尤其 public/private),Cisco IOS 写法示例:
! Cisco IOS:SNMPv3,关闭 v1/v2c 团体字
no snmp-server community public RO
no snmp-server community private RW
snmp-server group SECGRP v3 priv
snmp-server user secmon SECGRP v3
auth sha Auth-Passw0rd priv aes 128 Priv-Passw0rd
! 设备日志统一外发
logging host 192.168.10.10
ntp server 192.168.10.20
另有两项容易漏:NTP 统一时间源 (日志时间戳不一致,审计证据直接作废)和配置定期备份(测评要查变更记录)。
08 云平台核查:先分清责任边界
等保 2.0 对云计算场景明确了责任共担:云平台自身要过等保(向云商索取平台的等保备案证明与测评报告结论),租户负责自己实例内的操作系统、应用与数据配置。
租户侧核查清单五条:
① IAM 账户治理:开启密码策略(与图 2 通用项对齐)、主账号与子账号全部启用 MFA、按最小权限授权,禁用长期 AccessKey 改用临时凭证。
② 安全组最小开放:管理端口(22/3389/数据库端口)禁止 0.0.0.0/0 全网放行,按源 IP 收敛。
③ 操作审计:开启操作审计/日志服务并外发归档,留存不少于 180 天,满足六个月要求的下行线。
④ 运维收口:所有云上运维经堡垒机,录像留存。
⑤ 基线自动扫描:用云安全中心/主机安全的基线检查能力(内置等保 2.0 与 CIS 基线模板),每月全量扫一次,问题项与图 6 的整改闭环打通。
09 核查之后:整改、复测与持续合规

图 6:核查 → 整改 → 复测闭环
核查报告出来只是开始。整改按风险分三级:高危立即改 (空口令、明文管理通道、审计关闭------都是测评里的高风险判定项,直接影响结论);中危限期改 (口令策略、锁定阈值不达标);低危排期改 (版本信息隐藏、banner 修改)。每项整改后复测留证:改前配置截图、改后配置截图、复测命令输出,三件套归档,测评师要什么给什么。
频率上建议三级演进:从迎评前的一次性突击,走向季度周期核查,最终落到配置漂移持续监控------基线固化后,任何偏离默认配置的变更自动告警,合规从"运动式"变成"日常态"。
10 进阶:基线即代码(Baseline as Code)
人工核查不可持续,终局是把基线写成代码。Ansible 示例------两条任务就能让百台主机的口令周期自动达标、偏离自动纠正:
# baseline.yml ------ 口令周期基线(偏离自动纠正)
- name: 等保口令基线
hosts: all
become: true
tasks:
- name: 确保 PASS_MAX_DAYS=90
ansible.builtin.lineinfile:
path: /etc/login.defs
regexp: '^PASS_MAX_DAYS'
line: 'PASS_MAX_DAYS 90'
- name: 确保审计服务运行并自启
ansible.builtin.systemd:
name: auditd
state: started
enabled: true
# 执行:ansible-playbook -i inventory baseline.yml
配合 Git 版本管理与 CI 流水线,基线模板的每次变更都有评审记录,这本身就是等保"安全建设管理"部分要查的配置管理证据。
基线核查没有高深技术,拼的是清单化、命令化、闭环化。把这篇文章里的清单落成自己环境的模板,核查从"测评前熬夜"变成"每周半小时"------这才是等保实战的正确姿势。
参考文献: