从零搭建CVE高危漏洞定期自动扫描服务器巡检脚本

为什么要定期扫描CVE高危漏洞

CVE(通用漏洞披露)收录了全球软件包中已知的安全缺陷。
如果服务器长期不扫描,这些高危漏洞可能被攻击者利用,导致数据泄露或权限被控。
本文推荐使用轻量级工具 Trivy,配合 crontab 定时任务,实现每周一次的自动巡检。
整个方案占用资源少、配置简单,适合单台或少量服务器。

操作前的准备工作

确保你的服务器是 Linux 系统(CentOS 7+ / Ubuntu 18.04+),并且拥有 root 或 sudo 权限。
安装 Trivy 只需要一条命令,不需要复杂的数据库依赖。

# Ubuntu / Debian
sudo apt-get install -y wget apt-transport-https gnupg
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update && sudo apt-get install -y trivy

# CentOS / RHEL
sudo rpm -ivh https://github.com/aquasecurity/trivy/releases/latest/download/trivy_$(uname -m).rpm

安装完成后运行 trivy --version 确认成功。
首次扫描前 Trivy 会自动下载漏洞库,需要服务器能访问 GitHub 或使用代理。

编写自动扫描脚本

创建一个脚本文件 /usr/local/bin/cve-scan.sh,内容如下:

#!/bin/bash
# CVE 高危漏洞定期扫描脚本
LOG_DIR="/var/log/cve-scan"
REPORT_FILE="$LOG_DIR/scan-$(date +%Y%m%d-%H%M).log"

# 确保日志目录存在
mkdir -p $LOG_DIR

# 使用 Trivy 扫描系统文件系统(只显示高危和严重级别)
trivy filesystem --severity HIGH,CRITICAL / --no-progress 2>&1 | tee $REPORT_FILE

# 可选:如果有发信需求,可在此添加 curl 或 mail 命令
# echo "CVE scan finished at $(date)" | mail -s "Weekly CVE Report" your@email.com

赋予执行权限:

sudo chmod +x /usr/local/bin/cve-scan.sh

脚本中使用 --severity HIGH,CRITICAL 过滤掉中低危漏洞,减少噪音。/var/log/cve-scan/ 会按时间保存每次的扫描日志。

设置定时任务

使用 crontab 让脚本每周运行一次。
编辑 root 用户的任务表(推荐用 root 执行,避免权限不足):

sudo crontab -e

添加一行(例如每周一凌晨 3 点):

0 3 * * 1 /usr/local/bin/cve-scan.sh

保存后,用 sudo crontab -l 确认任务已添加。
如果你希望每天扫描,可以将 1 改为 *,但建议至少每周一次,减少对服务器性能的影响。

常见问题与避坑

1. 扫描特别慢怎么办?
第一次扫描会下载完整的 CVE 数据库(约几百 MB),后续更新增量即可。如果网络差,可以设置代理:export HTTP_PROXY=http://your-proxy:port 再运行脚本。

2. 日志文件越来越大怎么办?
可以在脚本中加入清理逻辑:删除 30 天前的日志。例如:

find $LOG_DIR -type f -name "*.log" -mtime +30 -exec rm {} \;

3. 脚本执行后没有任何输出?
先手动运行脚本检查报错。可能原因:Trivy 未安装、权限不足、文件系统扫描被 SELinux 阻断。用 audit2allow 或临时关闭 SELinux 测试。

4. 只扫描高危,中低危被忽略,会不会遗漏?
高频巡检建议优先处理高危和严重漏洞。中低危可以结合季度复查或人工评估。本文脚本专注解决最紧急的风险。

验证扫描是否生效

手动执行一次脚本:

sudo /usr/local/bin/cve-scan.sh

查看日志文件:

cat /var/log/cve-scan/scan-*.log

如果输出类似:

2024-01-15T03:00:00.000Z        INFO    Vulnerability scanning is enabled
...
libcurl4 (CVE-2024-XXXXX) (HIGH)
openssl (CVE-2023-XXXXX) (CRITICAL)

说明扫描正常。
你可以尝试安装一个含有测试漏洞的包(如 gnutls26 旧版)来验证是否能被检出。
确认没问题后,crontab 会在指定时间自动运行,之后定期查看日志即可。

如果你希望收到通知,可以在脚本末尾加入钉钉/企业微信 webhook 推送,或者直接发送邮件。
这样即使不看服务器,也能第一时间掌握 CVE 高危漏洞情况。

分享到:
上一篇
Ollama离线模型包无网络住宅主机部署教程
下一篇
swap分区一键扩容脚本缓解服务器频繁OOM报错
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意