定期扫描的核心是自动化与可追溯:用lynis --cronjob实现每日自动归档日志,nmap -sV --script vuln做轻量服务预检,OpenVAS需通过Web界面配置周期任务或封装脚本调用,同时确保日志权限、输出可见性与报告导出。

定期扫描不是“跑一次命令就完事”,而是要让系统自己按时干活、出报告、留痕迹——核心在于自动化 + 可追溯。
用 lynis 配 cron 实现每日非交互扫描
手动执行 sudo lynis audit system 只能看当前状态,无法形成时间线对比。真正有用的定期扫描必须走 --cronjob 模式,它会跳过交互提示、禁用颜色输出、自动归档日志。
- 直接运行:
sudo lynis --cronjob,报告默认写入/var/log/lynis.log - 加日期后缀存档(推荐):
sudo lynis --cronjob --log-file /var/log/lynis/lynis_$(date +\%Y\%m\%d).log - 写进 crontab(每天凌晨 3:15 扫描):
15 3 * * * root /usr/bin/lynis --cronjob --log-file /var/log/lynis/lynis_$(date +\%Y\%m\%d).log 2>/dev/null - 注意:
--cronjob不会自动清理旧日志,建议配合logrotate或每周find /var/log/lynis -name "lynis_*.log" -mtime +7 -delete
用 nmap + NSE 脚本做轻量级服务层漏洞预检
nmap 本身不直接报 CVE,但通过 -sV 识别服务版本 + --script vuln 调用 NSE 脚本,能快速暴露已知高危点(比如 http-shellshock、smb-vuln-ms17-010),适合日常巡检而非深度审计。
- 只扫关键端口和服务版本:
nmap -sV -p 22,80,443,3306,6379 --script vuln 127.0.0.1 - 避免误伤生产服务:加
-T3控制扫描节奏,禁用-Pn(除非确认目标防火墙严格拦截 ICMP) - 脚本实际调用依赖本地
/usr/share/nmap/scripts/目录下是否有对应.nse文件;若缺失,运行sudo nmap --script-updatedb更新脚本库 - 输出中出现
[vuln]标记不等于“已被利用”,只是匹配到已知 POC 特征,需人工验证上下文
OpenVAS 扫描任务必须手动触发,不能靠 cron 直接调用
OpenVAS(现名 gvm)的后台服务是分离架构:gvmd 管理任务,ospd-openvas 执行扫描。直接在 crontab 里写 gvm-cli 命令大概率失败——因为没加载用户 session 环境、缺少认证 token、或 gvmd 尚未就绪。
- 正确做法:先用
gvm-cli --gmp-username admin --gmp-password xxx list_tasks测试连通性 - 创建一次性任务后,用
gvm-cli --gmp-username admin --gmp-password xxx start_task --task-id xxx触发 - 真要定时,得封装成 shell 脚本,并在 crontab 中加延时(如
sleep 10 && ...)等待gvmd启动完成 - 更稳妥的方式:用 OpenVAS Web 界面配置 recurring schedule,它内部处理了服务依赖和重试逻辑
真正容易被忽略的不是“怎么加 cron”,而是日志权限和报告归属——/var/log/lynis.log 默认属主是 root,普通运维查不了;nmap 输出若不重定向,crontab 的邮件通知可能被过滤;OpenVAS 报告存在数据库里,不导出就是“扫了等于没扫”。定期扫描的价值,全系在能不能被看见、被复查、被追责。

















