【学习笔记】等保合规安全基线核查实战

这篇文章按五大核查对象拆解基线核查的全部要点:每个对象给核查项、给命令、给整改动作,最后讲清楚核查之后的整改闭环怎么建。文中命令均在 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 流水线,基线模板的每次变更都有评审记录,这本身就是等保"安全建设管理"部分要查的配置管理证据。

基线核查没有高深技术,拼的是清单化、命令化、闭环化。把这篇文章里的清单落成自己环境的模板,核查从"测评前熬夜"变成"每周半小时"------这才是等保实战的正确姿势。

参考文献:

等保合规安全基线核查实战

相关推荐
传奇开心果编程2 小时前
【Jetpack Compose进阶学与练】第14课:系列收尾复习总结;Compose项目常见坑点汇总;学习路线与后续学习方向
android·学习·ui·kotlin·android jetpack
yangmu32032 小时前
发动机是怎么把油变成动力的:四冲程内燃机原理拆解
学习
m4Rk_2 小时前
【论文阅读】Agent 记忆机制(81):EMR——用情景记忆避免 Agent 在多步推理中反复绕圈
论文阅读·人工智能·学习·开源·github
海海不掉头发2 小时前
阶段五_实验34-38_学习总结
深度学习·神经网络·学习·机器学习
M78佐菲2 小时前
ARM学习笔记(11)
linux·arm开发·笔记·嵌入式硬件·学习
M78佐菲2 小时前
ARM学习笔记(10)
linux·arm开发·笔记·嵌入式硬件·学习
dadaobusi3 小时前
学习:PCIe原子操作
学习
李游Leo3 小时前
HarmonyOS 7 + ArkUI + RelationalStore 学习笔记:本地数据分层存储与状态持久化架构实践【鸿蒙心迹】
笔记·学习·架构·harmonyos
我命由我123453 小时前
经纪人的职业定义
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法