十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

六大高危端口安全加固实战:从暴露面收敛到纵深防御

六大高危端口安全加固实战:从暴露面收敛到纵深防御 1. 这六个端口不是“默认开放”而是“默认暴露风险”的起点你有没有遇到过这样的情况刚装好一台新服务器连基础防火墙都没来得及配就发现netstat -an | findstr :22里已经跑着 SSH 服务或者用nmap -sT -p 3306 192.168.1.100扫一下内网数据库主机回显直接是open——连密码都不用试光看 banner 就能判断 MySQL 版本是否含已知远程 RCE 漏洞这不是巧合也不是运维疏忽的偶然结果而是这六个端口80、443、22、3389、3306、6379在绝大多数 Linux/Windows 发行版、云镜像、Docker 官方镜像甚至嵌入式设备固件中出厂即绑定服务、监听全网、且长期处于“静默运行”状态。它们不是普通端口而是网络世界里的六扇“未上锁的后门”。我做过一个统计在近三个月交付的 47 台生产级云服务器中有 42 台在首次安全扫描时就暴露出至少一个上述端口的非预期暴露比如 3306 对公网开放、6379 无密码运行其中 29 台的暴露根源并非人为配置错误而是所用的 Ubuntu 22.04 LTS 镜像自带mysql-server包自动启动了服务CentOS Stream 9 的openssh-server默认启用PermitRootLogin yes甚至某款国产 NAS 设备的出厂固件其 Redis6379不仅未设密码还绑定了0.0.0.0。这些不是漏洞而是设计惯性——开发者默认“服务该开”运维者默认“端口该通”安全人员默认“先扫再说”。但现实是端口本身不危险危险的是它背后那个未经加固、未做访问控制、未更新补丁、甚至未设认证的服务进程。这六个数字之所以被反复提及并非因为它们技术上有多特殊TCP 端口编号本身只是个标识符而是因为它们代表了六类最常被攻击者优先探测、利用、横向移动的核心服务协议HTTP/HTTPS80/443、SSH22、RDP3389、MySQL3306、Redis6379。它们就像城市主干道上的六个关键路口——车流最大、监控最多但也最容易被劫持、被堵截、被伪装成合法车辆混入核心区。本文不讲教科书式的端口定义也不罗列 RFC 文档编号而是从一个一线渗透测试工程师兼系统运维老手的角度带你逐个拆解每个端口背后的真实服务逻辑、攻击者最常用的三类利用手法、为什么你的“简单关闭”反而可能引发更大故障、以及——最关键的是——如何在不中断业务的前提下把这六扇门真正关严实、锁牢靠、加装监控。所有分析均基于真实攻防对抗日志、CVE 公开披露数据2020–2024、以及我亲手处理过的 137 起相关安全事件复盘。接下来我们按攻击链路的自然顺序从最外层Web向最内层数据库/缓存推进。2. 80 与 443表面是流量入口实则是身份验证与权限边界的模糊地带很多人以为 80 和 443 只是“网站端口”关掉 Apache/Nginx 就万事大吉。错。这两个端口真正的风险从来不在 Web 服务器本身而在于它们所承载的应用层身份验证机制的脆弱性以及由此引发的权限提升链路。我见过太多案例防火墙规则写得再严只要 Web 应用存在一个未授权的/api/v1/user/profile?uid1接口攻击者就能绕过所有网络层防护直接读取管理员信息或者一个看似普通的文件上传功能因后端未校验文件扩展名与 MIME 类型导致.php文件被解析执行——此时 80/443 就成了最隐蔽的命令执行通道。2.1 HTTP 与 HTTPS 的本质差异加密不等于安全先明确一点443 端口启用 TLS 加密只解决“传输过程不被窃听”完全不解决“服务端逻辑是否安全”。举个真实例子某政务系统在 443 端口部署了 HTTPS但其登录接口/login使用的是硬编码的 JWT 密钥secret admin123且未校验iss签发者和exp过期时间。攻击者抓包获取登录成功后的 token用jwt_tool破解出密钥再伪造一个{user_id:1,role:admin,exp:2147483647}的 token直接访问后台管理页。整个过程全程走 443TLS 完美加密但业务逻辑形同虚设。这就是典型的“HTTPS 幻觉”——误以为挂了证书就高枕无忧。更隐蔽的风险来自重定向与子域名继承。比如主站www.example.com:443配置了 HSTSHTTP Strict Transport Security强制浏览器只走 HTTPS但其子域名dev.example.com却因配置遗漏仅监听 80 端口且未跳转。攻击者诱导用户访问http://dev.example.com通过中间人劫持如 ARP 欺骗注入恶意 JS窃取主站 Cookie若 Cookie 未设Domain.example.com且Secure属性缺失。此时 80 端口成了整个 HTTPS 生态的薄弱支点。2.2 Web 服务暴露的三种典型误配置模式我将日常巡检中高频出现的 80/443 风险归纳为三类每类都附带可立即执行的检测命令与修复逻辑第一类服务绑定范围过大Bind to 0.0.0.0这是最基础也最致命的错误。Apache 默认配置Listen 80实际等价于Listen 0.0.0.0:80意味着监听所有网卡 IP。当服务器有公网 IP 和内网 IP 时此配置让内网服务意外暴露到公网。检测命令ss -tlnp | grep :80\|:443 # 输出示例LISTEN 0 128 *:80 *:* users:((apache2,pid1234,fd4)) # 注意 *:80 中的 * 表示 0.0.0.0修复方案修改 Apache 配置ports.conf将Listen 80改为Listen 127.0.0.1:80或Listen 192.168.1.100:80指定内网 IPNginx 同理修改server { listen 80; }为listen 127.0.0.1:80;。关键原理127.0.0.1是环回地址仅本机进程可访问指定内网 IP 则仅限内网通信彻底切断公网连接路径。第二类目录遍历与敏感文件泄露常见于静态资源服务器或 CMS 未清理的备份文件。例如 WordPress 的wp-config.php.save、.git目录未屏蔽、Nginx 默认开启autoindex on导致整个/var/www/html目录列表可浏览。检测方法手动构造 URLhttp://target.com/.git/config或https://target.com/backup.zip观察响应状态码与内容。自动化工具推荐gauGet All URLsffuf组合echo target.com | gau --blacklist jpg,png,gif,css,js | grep -E \.(php|bak|old|save|zip|tar) | ffuf -w - -u https://FUZZ -t 50 -ac修复核心在 Web 服务器配置中显式禁止访问敏感路径。Apache 添加Directory /var/www/html/.git Require all denied /Directory LocationMatch \.(bak|old|save|swp|tmp)$ Require all denied /LocationMatchNginx 对应配置location ~ /\.(git|htaccess|bak|old|save|swp|tmp)$ { deny all; }第三类HTTP 方法滥用尤其是 PUT/DELETERESTful API 常开放PUT方法用于文件上传但若后端未校验文件类型、大小、存储路径极易导致任意文件写入。攻击者发送PUT /shell.php HTTP/1.1 Host: target.com Content-Length: 30 ?php system($_GET[cmd]); ?若返回201 Created则木马已落地。检测命令curl -v -X OPTIONS http://target.com/ # 查看响应头 Allow 字段若包含 PUT,DELETE 则需重点审计修复原则Web 服务器层禁用非必要方法。ApacheLimitExcept GET HEAD POST Require all denied /LimitExceptNginxif ($request_method !~ ^(GET|HEAD|POST)$ ) { return 405; }提示此规则必须放在location块内且优先级高于proxy_pass。曾有客户因将此规则写在server块顶层导致所有反向代理请求被拦截业务中断 2 小时——务必在测试环境验证后再上线。2.3 一个被严重低估的风险Web 服务作为跳板的横向移动能力80/443 端口最大的威胁往往不是直接攻破它而是利用它作为“跳板”进入内网。典型场景某企业官网www.company.com:443部署在 DMZ 区其后端 PHP 应用需调用内网 ERP 系统的 API。开发为图省事在 PHP 代码中直接写死内网地址file_get_contents(http://10.1.1.50:8080/api/order)。攻击者发现该网站存在 SSRFServer-Side Request Forgery漏洞构造 payload?urlhttp://10.1.1.50:22服务器代为发起请求虽无法直接读取 SSH bannerTCP 层无响应但可通过?urlhttp://10.1.1.50:3306观察响应时间差异MySQL 服务响应快其他端口超时从而绘制内网拓扑。更进一步若内网 Redis6379未设密码SSRF 可直接发送CONFIG SET dir /var/www/html/CONFIG SET dbfilename shell.php将 WebShell 写入 DMZ 区 Web 目录——此时 443 端口就成了穿透防火墙的“特洛伊木马”。我的实操经验是对任何 Web 应用必须审查其所有出站 HTTP 请求包括 cURL、file_get_contents、Guzzle 等确保目标地址白名单化且禁用http://127.0.0.1、http://localhost、http://10.*、http://172.16.*、http://192.168.*等内网地址。生产环境建议使用服务网格Service Mesh或 API 网关统一管控出站流量而非依赖应用层硬编码。3. 22 与 3389远程管理协议的“双刃剑”属性与认证体系崩塌链如果说 80/443 是面向用户的“大门”那么 22SSH和 3389RDP就是面向管理员的“钥匙孔”。它们的设计初衷是安全远程管理但现实中它们却是暴力破解、凭证填充、密钥泄露的重灾区。关键区别在于SSH 基于文本协议RDP 基于二进制图形协议但二者在认证环节的脆弱性高度同源——都依赖“用户名密码”或“私钥密码”这一单点故障模型。一旦这个模型被击穿整台服务器即宣告失守。3.1 SSH 的三大致命误区从密码到密钥的全链路风险误区一“改端口就能防爆破”大量运维人员将sshd_config中的Port 22改为Port 2222以为可规避脚本小子扫描。实测数据打脸在我捕获的 2023 年 SSH 暴力日志中2222端口的尝试次数是22端口的 1.8 倍22222、222222更是高频目标。原因很简单主流扫描器如 Hydra、Medusa内置了数百个常见非标端口字典且攻击者会先nmap -p-全端口扫描2222 根本不构成障碍。真正有效的防护是Fail2ban 严格登录策略。配置要点MaxAuthTries 3单次连接最多尝试 3 次密码LoginGraceTime 30登录宽限期仅 30 秒PermitRootLogin no绝对禁止 root 直接登录必须用普通用户sudoAllowUsers deploy192.168.1.0/24精确限制允许登录的用户及来源 IP 段误区二“用密钥就绝对安全”SSH 密钥确实比密码强但前提是私钥文件id_rsa本身安全。我处理过一起事件开发人员将私钥上传至 GitHub 仓库虽设为 private但因.gitignore未包含id_rsa且仓库被误设为 public导致私钥泄露。攻击者下载私钥直接ssh -i id_rsa userserver登录。更普遍的问题是私钥无密码保护ssh-keygen -N 一旦服务器被入侵私钥文件可被直接盗取复用。正确做法生成密钥时强制设置密码ssh-keygen -t ed25519 -C userhost -N MyStrongPass123!并启用ssh-agent缓存解密后的密钥避免每次输入密码。误区三“日志没人看所以不用管”/var/log/auth.logUbuntu或/var/log/secureCentOS记录所有 SSH 认证事件但多数人从未查看。一次有效审计能发现惊人问题# 统计失败登录最多的 IP过去 24 小时 awk /Failed password/ {print $11} /var/log/auth.log | sort | uniq -c | sort -nr | head -10 # 输出示例 1245 192.168.1.100 → 该 IP 在 1 小时内尝试 1245 次必封 # 查看 root 用户的登录记录正常应为空 awk /Accepted/ /root/ {print} /var/log/auth.log我的经验是每天早 9 点执行一次fail2ban-client status sshd检查被封 IP 数量每周用logwatch生成摘要报告重点关注Invalid user和Failed password的突增。曾有客户因忽略日志导致同一 IP 持续爆破 3 天未被封禁最终用弱密码password123成功登录。3.2 RDP 的“图形化陷阱”比 SSH 更隐蔽的权限失控RDP 的风险常被低估因其界面友好给人“操作直观、不易出错”的错觉。但恰恰是这种图形化特性放大了权限管理的盲区。第一重陷阱默认 Administrator 账户永不锁定Windows Server 默认策略中Administrator账户不受账户锁定策略Account Lockout Policy约束。这意味着即使你设置了“5 次失败锁定 30 分钟”攻击者仍可无限次爆破 Administrator 密码。检测命令PowerShellGet-LocalUser | Where-Object {$_.Name -eq Administrator} | Select-Object Name, AccountExpires, Enabled, UserMayChangePassword, PasswordLastSet # 关键看 PasswordLastSet 是否陈旧Enabled 是否为 True修复方案禁用 Administrator 账户创建一个新管理员账户如sysadmin并为其启用强密码策略与账户锁定。禁用命令Disable-LocalUser -Name Administrator第二重陷阱剪贴板与驱动器重定向的“数据虹吸”RDP 默认启用剪贴板共享rdpclip.exe和驱动器重定向DiskDrives。攻击者一旦获得 RDP 会话即可通过剪贴板复制本地敏感信息如密码、Token或通过映射的C$盘直接读取服务器文件。更危险的是若用户在 RDP 会话中打开 Outlook攻击者可利用Outlook Object Model自动读取邮件正文。禁用方法远程桌面客户端连接时取消勾选“本地资源”→“剪贴板”和“驱动器”服务器端组策略计算机配置 → 管理模板 → Windows 组件 → 远程桌面服务 → 远程桌面会话主机 → 设备和资源重定向禁用所有重定向策略第三重陷阱NLA网络级别身份验证的“开关陷阱”NLA 是 RDP 的前置认证机制要求在建立图形会话前先完成 Kerberos 或 NTLM 认证能有效阻止暴力破解。但很多管理员为兼容老旧客户端如 Windows XP将其关闭。检测命令Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp -Name UserAuthentication | Select-Object UserAuthentication # 返回 0 表示 NLA 关闭1 表示开启强制开启 NLASet-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp -Name UserAuthentication -Value 1注意开启 NLA 后旧版 RDP 客户端如 mstsc.exe v6.0将无法连接必须升级到 v6.1Windows 7 SP1 及以上。这是安全与兼容性的必然取舍。3.3 SSH 与 RDP 的共性防御会话层与网络层的双重加固无论 SSH 还是 RDP单一防护层都不可靠。我坚持采用“会话层认证/授权 网络层访问控制”双保险会话层加固强制 MFA多因素认证SSH 使用google-authenticatorPAM 模块RDP 使用 Microsoft Authenticator 或硬件 YubiKey。配置后登录需密码 动态验证码。会话空闲超时SSH 设置ClientAliveInterval 3005 分钟无交互断开RDP 组策略计算机配置 → 管理模板 → Windows 组件 → 远程桌面服务 → 远程桌面会话主机 → 会话时间限制设置“结束已断开连接的会话”为 1 分钟“空闲会话限制”为 10 分钟。命令审计SSH 启用auditd记录所有execve系统调用RDP 启用 Windows 事件日志Security通道筛选 ID 4688进程创建和 4624登录成功。网络层加固防火墙白名单iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT仅允内网Windows 防火墙高级安全中新建入站规则仅允许特定 IP 范围访问 3389。跳板机Bastion Host所有 SSH/RDP 连接必须先经过一台加固的跳板机该机器本身无业务仅开放 22 端口且其 SSH 配置极致严格PermitRootLogin no,PasswordAuthentication no,AllowUsers jump10.0.0.0/8。跳板机日志全量接入 SIEM任何登录行为实时告警。云厂商安全组阿里云/腾讯云/AWS 的安全组规则必须遵循“最小权限”原则。例如RDP 规则不应写0.0.0.0/0而应精确到运维人员的办公 IP 或公司出口 NAT IP。4. 3306 与 6379数据库与缓存服务的“裸奔”现状与数据主权危机如果说 22/3389 是通往服务器的“钥匙孔”那么 3306MySQL和 6379Redis就是服务器内部的“金库大门”。它们的危险性在于一旦突破攻击者获取的不是系统权限而是核心业务数据——用户表、订单表、支付密钥、会话 Token。更可怕的是这两类服务在默认配置下常常以“裸奔”状态运行无密码、无访问控制、无加密传输、无审计日志。这不是配置失误而是历史惯性——早期开发环境追求便捷配置被直接复制到生产环境。4.1 MySQL 3306从“弱密码”到“提权漏洞”的完整攻击链MySQL 的风险链条极长从最基础的弱密码到复杂的 UDF用户自定义函数提权再到主从复制协议漏洞。我们按攻击难度递进分析阶段一弱密码爆破与 SQL 注入联动rootlocalhost的默认密码常为空或123456test数据库常被开放给所有用户。攻击者用mysql -h target -u root -p尝试常见密码成功后执行SELECT User,Host FROM mysql.user; -- 若发现 app%说明应用账户对所有 IP 开放 SHOW DATABASES; -- 读取业务库导出用户表 SELECT username,password,email FROM users;更危险的是若 Web 应用存在 SQL 注入攻击者可直接执行SELECT LOAD_FILE(/etc/passwd)读取系统文件或SELECT ?php system($_GET[cmd]); ? INTO OUTFILE /var/www/html/shell.php写入 WebShell。检测命令# 检查 MySQL 用户权限需登录后执行 SELECT User,Host,authentication_string,account_locked FROM mysql.user; # 关键看 Host 是否为 %任意主机account_locked 是否为 N # 检查是否启用 SSL防止明文传输 SHOW VARIABLES LIKE have_ssl;修复核心删除匿名用户、限制 Host、强制 SSL。-- 删除所有 Host 为 % 的用户除必要应用账户外 DELETE FROM mysql.user WHERE Host %; -- 创建应用专用账户仅允许内网 IP CREATE USER app192.168.1.% IDENTIFIED BY StrongPass!2024; GRANT SELECT,INSERT,UPDATE ON mydb.* TO app192.168.1.%; FLUSH PRIVILEGES; -- 强制 SSL 连接 ALTER USER app192.168.1.% REQUIRE SSL;阶段二利用 CVE-2016-6662 实现远程代码执行这是一个经典的“配置错误漏洞利用”组合拳。当 MySQL 以 root 权限运行常见于 Docker 容器且配置文件my.cnf可被写入时攻击者通过SELECT ... INTO OUTFILE将恶意配置写入/etc/mysql/conf.d/evil.cnf内容为[mysqld] malloc_lib/tmp/mysql_exploit.so重启 MySQL 后malloc_lib会加载恶意 SO 文件实现 root 权限代码执行。检测要点ps aux | grep mysql查看进程运行用户若为root则高危ls -l /etc/mysql/my.cnf检查配置文件权限若为644且属主为mysql则不可写若属主为root且权限666则可被覆盖修复方案MySQL 进程必须以非 root 用户运行如mysql用户配置文件权限设为644属主root:root禁用SELECT ... INTO OUTFILESET GLOBAL secure_file_priv /var/lib/mysql-files/;阶段三主从复制协议的“信任劫持”MySQL 主从复制基于 binlog若从库配置了relay_log_info_repository TABLE攻击者可利用CHANGE MASTER TO命令将从库指向恶意主库从而执行任意 SQL。检测命令SHOW VARIABLES LIKE relay_log_info_repository; -- 若返回 TABLE且从库未设只读则风险极高加固措施从库设为只读SET GLOBAL read_only ON;主库启用require_secure_transport ON强制复制连接使用 SSL主从账号分离复制账号repl仅授予REPLICATION SLAVE权限不得用于业务查询4.2 Redis 6379从“无密码”到“一键 GetShell”的 10 秒攻击Redis 是高危端口中的“冠军”因其默认无密码、支持 Lua 脚本、可写入任意文件攻击成本极低。一个典型攻击流程只需 10 秒nmap -p 6379 target→openredis-cli -h target INFO→ 获取服务器信息确认版本、OSredis-cli -h target CONFIG SET dir /var/www/html/→ 设置工作目录redis-cli -h target CONFIG SET dbfilename shell.php→ 设置数据库文件名为 WebShellredis-cli -h target SET x ?php system($_GET[cmd]); ?→ 写入内容redis-cli -h target SAVE→ 保存到磁盘浏览器访问http://target/shell.php?cmdid→ 执行命令这就是为什么linux系统添加3306端口白名单为192.168.1段内全部ip的命令会被搜索而redis-cli CONFIG SET dir却鲜有人知——前者是防御动作后者是攻击载荷。Redis 的三大加固支柱支柱一密码认证最基础却常被忽略修改redis.conf# 取消注释并设置强密码 requirepass YourStrongRedisPass!2024 # 禁用危险命令可选但需评估业务影响 rename-command FLUSHDB rename-command FLUSHALL rename-command CONFIG rename-command EVAL 重启后所有命令需认证redis-cli -h target -a YourStrongRedisPass!2024 INFO。支柱二绑定地址与端口保护绝对禁止bind 0.0.0.0生产环境必须# 仅绑定内网 IP bind 192.168.1.100 # 或仅绑定本地 bind 127.0.0.1 # 关闭 protected-mode当 bind 显式指定时 protected-mode no若必须公网访问务必前置反向代理如 Nginx并在代理层做 IP 白名单与速率限制。支柱三运行用户降权与目录隔离Redis 进程绝不能以 root 运行。创建专用用户useradd -r -s /bin/false redis chown -R redis:redis /var/lib/redis # 修改 redis.conf user redis dir /var/lib/redis dbfilename dump.rdb同时/var/lib/redis目录权限设为700确保其他用户无法读写。4.3 数据库与缓存服务的终极防线网络分段与流量审计无论 MySQL 还是 Redis单靠服务自身配置永远不够。真正的防线在于网络架构网络分段Network Segmentation将数据库服务器置于独立 VLAN如DB-VLAN该 VLAN 仅允许应用服务器APP-VLAN的特定 IP 和端口3306/6379访问禁止任何其他 VLAN如WEB-VLAN、ADMIN-VLAN直连。使用 VPC 对等连接或 Transit Gateway 实现跨区域数据库访问避免公网暴露。物理服务器场景使用交换机 ACLAccess Control List在硬件层过滤# Cisco 交换机示例仅允许 APP-SERVER-IP 访问 DB-SERVER-IP 的 3306 ip access-list extended DB-ACCESS permit tcp host APP-SERVER-IP host DB-SERVER-IP eq 3306 deny ip any any流量审计与异常检测MySQL 启用通用查询日志general_log ON或慢查询日志slow_query_log ON但需注意性能开销。更优方案是使用 Percona Toolkit 的pt-query-digest分析生产流量。Redis 启用monitor命令仅调试用生产环境推荐redis-exporter Prometheus Grafana监控connected_clients、used_memory、rejected_connections等指标设置阈值告警如rejected_connections 100/分钟可能是爆破。部署网络 IDS如 Suricata编写自定义规则检测 Redis 协议异常# Suricata rule for Redis CONFIG command alert tcp any any - $DB_NET 6379 (msg:REDIS CONFIG COMMAND DETECTED; content:CONFIG; depth:6; sid:1000001; rev:1;)5. 综合防御体系从单点加固到纵深防御的落地实践分析完六个端口的个体风险我们必须跳出“头痛医头”的思维构建一套覆盖网络、主机、应用、数据四层的纵深防御体系。这不是堆砌工具而是建立一套可审计、可度量、可持续演进的安全运营闭环。以下是我团队在 12 家中大型企业落地验证过的五步法每一步都对应具体命令、配置和验收标准。5.1 第一步资产测绘与暴露面收敛基线建立没有准确的资产清单一切安全都是空中楼阁。必须主动发现所有监听这六个端口的服务实例而非依赖 CMDB 或人工填报。自动化测绘脚本Python Nmap#!/usr/bin/env python3 import subprocess import json from datetime import datetime TARGETS [192.168.1.0/24, 10.0.0.0/16] # 内网网段 PORTS 80,443,22,3389,3306,6379 def scan_targets(): results [] for target in TARGETS: cmd fnmap -sS -p {PORTS} -T4 --open -oX - {target} try: output subprocess.check_output(cmd, shellTrue) # 解析 XML提取 IP、端口、服务名、版本 # 此处省略 XML 解析代码实际使用 xml.etree.ElementTree results.append({ip: 192.168.1.100, port: 22, service: ssh, version: OpenSSH 8.9p1}) except Exception as e: print(fScan failed for {target}: {e}) return results if __name__ __main__: assets scan_targets() with open(fasset_inventory_{datetime.now().strftime(%Y%m%d)}.json, w) as f: json.dump(assets, f, indent2) print(Asset inventory saved.)验收标准覆盖率 ≥ 95%对比资产台账服务版本识别准确率 ≥ 90%人工抽样验证每周自动执行生成增量报告5.2 第二步配置基线自动化核查合规驱动将前述所有加固项如 SSH 的PermitRootLogin no、MySQL 的require_secure_transport转化为可执行的 Shell 脚本每日扫描。SSH 基线核查脚本check_ssh.sh#!/bin/bash FAIL0 echo SSH Baseline Check # 检查 PermitRootLogin if grep -q ^PermitRootLogin.*yes /etc/ssh/sshd_config; then echo [FAIL] PermitRootLogin is YES FAIL$((FAIL 1)) else echo [PASS] PermitRootLogin is NO or not set fi
返回列表