检查 cronjobs 的变更

检查 cronjobs 的变更

有没有办法检查并通知某人是否对 Linux 服务器上特定用户的 cronjobs 进行了更改/添加?

是否也可以知道所做的更改?

答案1

[user@user-ld ~]$ sudo tail /var/log/cron | grep RELOAD
Jan  3 00:19:01 user-ld crond[3074]: (user) RELOAD (/var/spool/cron/user)

RELOAD在 cron 日志中查找 ' ' ( /var/log/cron)。因此,如果有人编辑/添加 cron 作业,您可以在 cron 日志中看到上述内容。

为此日志文件编写一个监控脚本,并使用该脚本向您的电子邮件 ID 发送警报。

如果您愿意,可以使用以下脚本来监控特定用户的 cron 条目:

#!/bin/bash
echo 'YOURPASSWORD_SUDO' | sudo -S crontab -l -u user > current_status_`date +"%m%d%y%s"`
diff <(cat `ls -1tr current_status_*| tail -1`) <(cat `ls -1tr current_status_* | tail -2 | head -1`)
if [[ $? == 0 ]] ; then 
    echo "no change in cron"
else
    echo "cron changed"
fi

答案2

crontab -e如果有人通过日志条目编辑他的每个用户 crontab 文件,则会写入/var/log/syslog。 例子:

用户亚历克斯编辑了自己的 crontab 文件:

Jan  3 08:42:47 localhost crontab[4278]: (alex) BEGIN EDIT (alex)
Jan  3 08:42:50 localhost crontab[4278]: (alex) END EDIT (alex)

用户编辑用户的 crontab 文件亚历克斯

Jan  3 08:49:06 localhost crontab[4557]: (root) BEGIN EDIT (alex)
Jan  3 08:49:07 localhost crontab[4557]: (root) END EDIT (alex)

如果 crontab 被外部编辑器更改,则以下示例日志条目会出现在/var/log/syslog

Jan  3 08:46:01 localhost cron[1146]: (*system*) RELOAD (/etc/crontab)

这种日志机制可能是可配置的,但至少在 Debian 和 Ubuntu 上默认激活,我想大多数其他发行版也是如此。

答案3

有很多,但(据我所知)没有一个是 cron 固有的。我可能会使用绊线在服务器上,并确保它/var/spool/cron已被绊倒。

答案4

您可以使用incron它,它类似于cron但处理文件系统事件(文件/文件夹的更改),而不是处理基于时间的事件。您可以监视文件夹/var/spool/cron/crontabs的更改并调用脚本来记录它们并执行任何您想要的操作。

相关内容