몇 년 전 저는 매분 자동으로 URL을 핑하는 모니터링 시스템의 일부로 cron 작업을 설정했습니다(지나치게 단순화했지만 트릭을 수행합니다). 나는 끔찍한 사람이기 때문에 이것을 어디에도 기록하지 않았습니다.
몇 년이 지난 지금, URL 반대편에서 애플리케이션을 핑하는 데 문제가 발생하기 시작했습니다. 고쳤는데 나중에 깨달았어요.이 크론 작업이 어디서 나오는지 모르겠습니다..
특정 시스템의 모든 crontab을 빠르게 검색하거나 찾을 수 있는 방법이 있습니까? 루트 액세스 권한이 있으므로 권한은 문제가 되지 않습니다. 저는 단지 사용자일 뿐이고 cron
그 구현을 깊이 생각해 본 적이 없지만 *nix 직관에 따르면 모든 crontab을 보관할 어딘가에 텍스트 파일 세트가 있어야 합니다. 나는 그들이 어디에 있는지 모르고 더 깊이 파고들면 전부는 아니지만 일부를 찾거나 시스템의 이상한 뉘앙스를 놓칠까 두렵습니다.
또한 루트 액세스를 통해 다음과 같은 작업을 수행할 수 있다는 것을 깨달았습니다.
- 시스템의 모든 사용자 목록을 가져옵니다.
su
사용자로서crontab -l
- 모든 사용자에 대해 이 작업을 반복합니다.
하지만 덜 수동적인 것을 찾고 있습니다(그리고 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/spool
과 crontab
이름 어딘가에 있습니다.
또한 많은 시스템에는체계crontab(예: /etc/crontab
, /etc/cron.d
) 중 일부는 /etc/cron.hourly
, .daily
... 와 같은 추가 스크립트를 호출할 수 있습니다.
답변4
다른 모든 방법이 실패하면 요청하는 URL(예: 대용량 파일 등 제공)을 기반으로 허니팟을 만들고 데이터 수신을 기다리고 있는 프로세스를 찾은 다음 해당 PPID를 찾을 수 있습니다.