이스케이프된 crontab을 찾는 방법

이스케이프된 crontab을 찾는 방법

몇 년 전 저는 매분 자동으로 URL을 핑하는 모니터링 시스템의 일부로 cron 작업을 설정했습니다(지나치게 단순화했지만 트릭을 수행합니다). 나는 끔찍한 사람이기 때문에 이것을 어디에도 기록하지 않았습니다.

몇 년이 지난 지금, URL 반대편에서 애플리케이션을 핑하는 데 문제가 발생하기 시작했습니다. 고쳤는데 나중에 깨달았어요.이 크론 작업이 어디서 나오는지 모르겠습니다..

특정 시스템의 모든 crontab을 빠르게 검색하거나 찾을 수 있는 방법이 있습니까? 루트 액세스 권한이 있으므로 권한은 문제가 되지 않습니다. 저는 단지 사용자일 뿐이고 cron그 구현을 깊이 생각해 본 적이 없지만 *nix 직관에 따르면 모든 crontab을 보관할 어딘가에 텍스트 파일 세트가 있어야 합니다. 나는 그들이 어디에 있는지 모르고 더 깊이 파고들면 전부는 아니지만 일부를 찾거나 시스템의 이상한 뉘앙스를 놓칠까 두렵습니다.

또한 루트 액세스를 통해 다음과 같은 작업을 수행할 수 있다는 것을 깨달았습니다.

  1. 시스템의 모든 사용자 목록을 가져옵니다.
  2. su사용자로서
  3. crontab -l
  4. 모든 사용자에 대해 이 작업을 반복합니다.

하지만 덜 수동적인 것을 찾고 있습니다(그리고 cron 구현에 대해 배우고 싶습니다).

답변1

Crontab은 다음과 같은 몇 가지 위치에만 숨길 수 있습니다.

  • /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>

답변2

Crontab은 해당 구성 요소 (모두 루트에 의해 편집됨) 및 (사용자의 crontab) /etc/crontab내에 존재합니다(많은 구현이 있음) ./etc/cron.*/*/var/spool/cron/*

문제의 작업을 찾을 수 없는 경우 작업이 진행되는 동안 조사하는 또 다른 방법이 있습니다. 예를 들어 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")" "$@"

답변3

빠르고 더러운 방법:

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

구체적인 위치는 어디인가요?예약 된 일들저장되는 내용은 시스템마다 다를 수 있지만 일반적으로 이름 /var/spoolcrontab이름 어딘가에 있습니다.

또한 많은 시스템에는체계crontab(예: /etc/crontab, /etc/cron.d) 중 일부는 /etc/cron.hourly, .daily... 와 같은 추가 스크립트를 호출할 수 있습니다.

답변4

다른 모든 방법이 실패하면 요청하는 URL(예: 대용량 파일 등 제공)을 기반으로 허니팟을 만들고 데이터 수신을 기다리고 있는 프로세스를 찾은 다음 해당 PPID를 찾을 수 있습니다.

관련 정보