Làm thế nào để tìm một Crontab chạy trốn


17

Vài năm trước tôi đã thiết lập một công việc định kỳ để tự động ping URL mỗi phút như một phần của hệ thống giám sát (đó là sự đơn giản hóa, nhưng nó sẽ làm được cho câu hỏi này). Bởi vì tôi là một người ghê gớm, tôi đã không làm tài liệu này ở bất cứ đâu.

Hôm nay, nhiều năm sau, tôi bắt đầu gặp rắc rối với ứng dụng ở đầu kia của URL đang được ping. Tôi đã sửa nó, nhưng sau đó nhận ra, tôi không biết công việc định kỳ này đến từ đâu .

Có cách nào để nhanh chóng tìm kiếm thông qua hoặc loại bỏ tất cả các crontabs trên một hệ thống cụ thể không? Tôi có quyền truy cập root nên quyền không phải là vấn đề. Tôi mới chỉ là người dùng cron, tôi chưa bao giờ nhìn quá sâu vào việc triển khai nó, nhưng bản năng * nix của tôi nói rằng phải có một nhóm các tệp văn bản ở đâu đó chứa tất cả các crontabs. Tôi chỉ không biết họ sẽ ở đâu, và nếu tôi tìm hiểu về nó, tôi sẽ sợ tìm thấy một số, nhưng không phải tất cả trong số họ, hoặc thiếu một số sắc thái kỳ lạ của hệ thống

Ngoài ra, tôi nhận ra với quyền truy cập root tôi có thể

  1. Nhận danh sách tất cả người dùng trong hệ thống
  2. su như một người dùng
  3. crontab -l
  4. Lặp lại với tất cả người dùng

nhưng tôi đang tìm kiếm một cái gì đó ít thủ công hơn (và muốn tìm hiểu điều gì đó về việc triển khai cron)


2
bạn có thể cần xem liên kết này - stackoverflow.com/questions/134906/ Khăn
Daniel t.

Câu trả lời:


20

Chỉ có một vài nơi crontabs có thể ẩn:

  • /etc/crontab
  • /etc/cron.d/*
  • /etc/crond.{hourly,daily,weekly,monthly}/*
    chúng được gọi từ /etc/crontab, vì vậy có thể là dấu hoa thị trên này
  • /var/spool/cron/*(đôi khi /var/spool/cron/crontabs/*)

Hãy chắc chắn kiểm tra atlà tốt, giữ cho công việc của nó trong /var/spool/at/hoặc/var/spool/cron/at*/

Ngoài ra, thay vì

su <user>
crontab -l

Chỉ cần làm điều này:

crontab -lu <user>

8

Crontabs sống trong /etc/crontabvà (với nhiều triển khai) các thành phần của nó trong /etc/cron.*/*(tất cả được chỉnh sửa bởi root) và trong /var/spool/cron/*(crontabs của người dùng).

Nếu bạn gặp khó khăn trong việc định vị công việc vi phạm, một cách tiếp cận khác là điều tra một trong khi nó đang diễn ra. Ví dụ: bạn có thể thêm quy tắc tường lửa để ghi nhật ký id người dùng của quá trình mở kết nối example.comvào cổng 80:

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

Nếu công việc đang sử dụng một ứng dụng như , pinghoặc curlche bóng nhị phân thông thường bằng một trình bao bọc ghi nhật ký thông tin về những gì đang sử dụng nó, với một tập lệnh như thế này trong /usr/local/bin:

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

+1 vì nó cho thấy làm thế nào để giải quyết vấn đề!
Joe

6

Cách nhanh chóng và bẩn thỉu:

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

Vị trí chính xác nơi crontabs được lưu trữ có thể khác nhau tùy theo hệ thống, nhưng nó thường nằm trong /var/spoolvà có crontabmột nơi nào đó trong tên.

Cũng lưu ý rằng nhiều hệ thống có crontabs hệ thống (như trong ) /etc/crontab, /etc/cron.dmột số trong đó có thể gọi nhiều tập lệnh hơn như /etc/cron.hourly, .daily...


4

Nghe có vẻ như một cronjob được tạo bởi crontab. Không phải tất cả các crontab đều có -ucông tắc, nhưng đối với GNU / Linux thì nó có sẵn. Đây là một dòng tiện dụng để liệt kê tất cả các cronjobs được tạo bởi crontab.

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

(Chạy bằng root.)


2

Nếu vẫn thất bại, bạn có thể tạo ra một honeypot từ URL mà nó yêu cầu - tức là phục vụ một tệp lớn hoặc một cái gì đó - và tìm quá trình đang chờ để nhận dữ liệu, sau đó tra cứu PPID của nó.


2

Bất kỳ hệ thống tử tế nào cũng cần giải thích vị trí chính xác của các crontabs trong trang chủ (thường là trong FILESphần gần cuối và cũng cho các dons khác).

Trên hệ thống của tôi chẳng hạn, cron(8)chứa các mục sau:

 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

Và tôi khuyên thứ hai của tylerl là cũng kiểm tra atcông việc trong khi bạn đang ở đó.


2

Tiếp cận nó theo cách khác 'vòng: cron giữ một bản ghi về những gì nó đang làm, chính xác để tránh loại vấn đề này ở nơi đầu tiên. Trên hệ thống của tôi, nhật ký được giữ /var/cron/logvà trông như thế này:

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

Dòng này cho tôi biết rằng phiên bản cron với PID 20 232 trên máy fortressđang thực hiện /home/vucar/lighttpd-watchdogthay mặt cho người dùng vucar. Một hệ thống hoạt động tốt chỉ có một cron duy nhất đang chạy, vì vậy điều này sẽ đơn giản.

Điều này cũng hoạt động cho các atcông việc, vì dù sao chúng thường chỉ được trao cho cron:

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

Các đoạn trích là từ một hệ thống BSD, nhưng khái niệm chung rất có thể giống nhau ở mọi nơi khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.