如何找到逃犯的Crontab


17

几年前,我设置了一个cron作业,作为监视系统的一部分,每分钟自动对URL进行ping操作(这过于简单了,但是可以解决这个问题)。因为我是一个可怕的人,所以我在任何地方都没有记录。

几年后的今天,我开始在要ping的URL的另一端遇到该应用程序的麻烦。我解决了这个问题,但后来才意识到,我不知道这个Cron工作是从哪里来的

有没有一种方法可以快速搜索或找出特定系统上的所有crontab?我具有root访问权限,因此权限不是问题。我只是曾经的用户cron,我从没对它的实现进行过深入的研究,但是我的* nix直觉表明必须在一组包含所有crontab的文本文件中。我只是不知道它们会在哪里,如果我钻进去,我会害怕找到其中一些(但不是全部),或者会丢失一些奇怪的系统细微差别

另外,我知道通过root访问

  1. 获取系统中所有用户的列表
  2. su 作为用户
  3. crontab -l
  4. 与所有用户重复

但我正在寻找一些不那么手册的内容(并希望学习有关cron的实现的知识)


2
你可能需要看看这个链接- stackoverflow.com/questions/134906/...
丹尼尔吨。

Answers:


20

crontabs只能隐藏几个地方:

  • /etc/crontab
  • /etc/cron.d/*
  • /etc/crond.{hourly,daily,weekly,monthly}/*
    这些是从调用的/etc/crontab,因此在此可能使用星号
  • /var/spool/cron/*(有时/var/spool/cron/crontabs/*

请务必同时检查,at以确保其工作处于/var/spool/at//var/spool/cron/at*/

另外,代替

su <user>
crontab -l

只是这样做:

crontab -lu <user>

8

Crontabs驻留在/etc/crontab(以及/etc/cron.*/*所有实现中)其组件(均由root编辑)和/var/spool/cron/*(用户的crontabs)中。

如果您在查找有问题的工作时遇到麻烦,另一种方法是在进行一项工作时进行调查。例如,您可以添加防火墙规则,以记录打开example.com端口80的连接的进程的用户ID :

iptables -A OUTPUT -p tcp --syn -d example.com --dport 80 -j LOG --log-prefix "[->example.com] " --log-uid

如果作业正在使用诸如ping或的应用程序,则使用curl包装程序将通常的二进制文件隐藏起来,该包装程序将记录有关正在使用该文件的信息,并使用类似以下脚本的脚本/usr/local/bin

#!/bin/sh
{
  date
  echo "$0" "$@"
  ps -p $PPID
  echo
} >>"/tmp/$(basename "$0").log"
exec "/usr/bin/$(basename "$0")" "$@"

+1,因为它显示了如何解决问题!
2013年

6

快速而肮脏的方式:

grep -r ping /var/spool/cron/crontabs

crontabs的确切存储位置可能因系统而异,但通常位于该位置,/var/spool并且crontab名称中有某处。

另外请注意,许多系统具有系统的crontab(像/etc/crontab/etc/cron.d),其中一些可以调用多个脚本像/etc/cron.hourly.daily...


4

听起来像crontab创建的cronjob。并非所有crontab都具有-u开关,但是对于GNU / Linux来说,它是可用的。这是列出所有由crontab创建的cronjobs的方便行。

for user in $(awk -F':' '{ print $1}' /etc/passwd); do crontab -u $user -l; done

(以根用户身份运行。)


2

如果所有其他方法均失败,则可以从其请求的URL中创建一个蜜罐(即提供一个大文件或其他内容),然后查找等待接收数据的进程,然后查找其PPID。


2

任何体面的系统都应在联机帮助页中解释crontab的准确位置(通常在FILES末尾的部分以及其他dæmons)。

例如,在我的系统上,cron(8)包含以下内容:

 FILES
      /etc/crontab          system crontab file
      /var/cron/atjobs      directory containing at(1) jobs
      /var/cron/log         cron's log file
      /var/cron/tabs        directory containing individual crontab files
      /var/cron/tabs/.sock  used by crontab(1) to tell cron to check for
                            crontab changes immediately

我第二泰勒尔的建议也要at在您工作时检查工作。


2

以另一种方式进行处理:cron保留其正在执行的操作的日志,而恰恰是为了避免此类问题。在我的系统上,日志保留在其中/var/cron/log,如下所示:

==> /var/cron/log <==
Oct 25 00:21:01 fortress cron[20232]: (vucar) CMD (/home/vucar/lighttpd-watchdog)

这行告诉我,机器上具有PID 20232的cron实例fortress正在/home/vucar/lighttpd-watchdog代表用户执行vucar。行为良好的系统仅运行单个cron,因此这很简单。

这也适用于at工作,因为无论如何它们通常只是交给cron进行:

==> /var/cron/log <==
Oct 25 00:28:01 fortress cron[31282]: (vucar) ATJOB (1414189680.c)

这些片段来自BSD系统,但是一般概念在其他地方都可能相同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.