数年前、私は毎分自動的にURLをpingする監視システムの一部としてcronタスクを設定しました(過度に単純化しましたが、トリックを実行します)。私はひどい人なので、これをどこにも記録しませんでした。
数年が過ぎた今、URLの反対側でアプリケーションをpingする際に問題が発生し始めました。修正しましたが、後で悟りました。このクローンの仕事がどこから来るのかわかりません。。
特定のシステムのすべてのcrontabをすばやく検索または検索する方法はありますか?ルートアクセス権があるため、権限は問題になりません。私は単なるユーザーであり、cron
その実装について深く考えたことはありませんが、*nixの直観によると、すべてのcrontabを保持するどこかにテキストファイルセットが必要です。私は彼らがどこにいるのかわからず、深く掘り下げたら全部ではありませんが、いくつかを見つけるか、システムの奇妙なニュアンスを見逃すのを恐れています。
また、rootアクセスで次のことができることに気づきました。
- システム内のすべてのユーザーのリストを取得します。
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を見つけることができます。