Linux中用crontab定期执行安全巡检脚本需确保脚本可执行、显式声明环境变量、绝对路径调用、日志追加并轮转、root权限运行,并通过手动测试和日志验证生效。

在 Linux 中,用 crontab 定期执行系统安全巡检脚本,关键在于:脚本需具备可执行权限、环境变量要显式声明、日志必须保留以便追溯,且任务应避免冲突或资源争抢。
编写一个基础安全巡检脚本
先创建一个简单但实用的巡检脚本(例如 /opt/scripts/security-check.sh),内容包括检查登录失败记录、异常进程、开放高危端口、关键文件权限等:
- 使用
lastb -n 10查最近 10 次失败登录 - 用
ps aux --sort=-%cpu | head -10查 CPU 占用异常进程 - 运行
ss -tuln | grep -E ':22|:23|:21|:3389'筛查明文协议端口 - 检查
/etc/shadow和/etc/passwd权限是否为644或更严格 - 把结果追加到日志文件(如
/var/log/security-check.log),并带上时间戳
写完后赋予执行权限:chmod +x /opt/scripts/security-check.sh
配置 crontab 时注意环境与路径
直接运行 crontab -e 添加任务时,不要依赖用户的 PATH 或 shell 配置。推荐写成绝对路径调用,并显式指定解释器和环境:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 在 crontab 文件顶部添加:
SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/bin - 示例定时任务(每天凌晨 3:15 执行):
15 3 * * * /bin/bash /opt/scripts/security-check.sh >> /var/log/security-check.log 2>&1 - 避免使用
~或相对路径;所有命令、脚本、日志路径都用绝对路径
确保日志可读、可轮转、不被覆盖
安全巡检日志是事后分析的重要依据,不能只靠追加(>>)就万事大吉:
- 用
logger命令将关键事件写入系统日志(journalctl -t security-check可查) - 配合
logrotate对/var/log/security-check.log做按周轮转,保留 8 周归档 - 在脚本开头加
exec >> /var/log/security-check.log 2>&1; echo "=== $(date) ===",让每次执行有清晰分隔
验证与排错要点
刚配置完别急着等明天,立刻验证是否真正生效:
- 手动运行一次脚本,确认输出无报错:
/opt/scripts/security-check.sh - 查看 cron 日志(通常在
/var/log/cron或journalctl -u cron)确认任务是否被触发 - 检查脚本中调用的命令(如
lastb)是否在 cron 的 PATH 下可用;不确定就全路径调用(如/usr/bin/lastb) - 若脚本依赖 root 权限(比如读
/etc/shadow),务必用sudo crontab -e或 root 用户编辑 crontab
不复杂但容易忽略。定期跑起来,比临时救火强得多。

















