检查对cronjobs的更改

任何方式检查并通知,如果有人对Linux服务器上的特定用户的cronjobs进行更改/添加?

是否有可能知道所做的更改?

其中很多,但(afaik)没有什么固有的cron。 我可能会在服务器上使用tripwire ,并确保/var/spool/cron是tripwired。

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

用户alex编辑他自己的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) 

用户root编辑了用户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) 

这种日志logging机制可能是可configuration的,但至less在Debian和Ubuntu上是默认激活的,我也假定其他的发行版本也是如此。

 [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) 

grep for cron log( /var/log/cron )中的' RELOAD '。 所以如果有人编辑/添加一个cron作业,你可以在cron log中看到上面那种东西。

为此日志文件编写一个监视脚本,并使用它向您的电子邮件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 

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