如何在身份驗證日誌中追蹤進程

如何在身份驗證日誌中追蹤進程

我有一台運行 ubuntu 14.04 的伺服器。在 /var/log/auth.log 中有某種每小時運行一次的自動化進程,我想找出該進程是什麼。

我已經確定沒有任何使用者安排任何 cron 作業。我所要做的就是每小時在 auth.log 中查看以下範例行:

Dec  2 03:17:01 fi CRON[23537]: pam_unix(cron:session): session opened for user root by (uid=0)
Dec  2 03:17:01 fi CRON[23537]: pam_unix(cron:session): session closed for user root
Dec  2 04:17:01 fi CRON[23557]: pam_unix(cron:session): session opened for user root by (uid=0)

關於如何追蹤這個問題有什麼想法嗎?

答案1

我已經確定沒有任何使用者安排任何 cron 作業。

/etc/crontab您可能錯過了和中的系統範圍的 cron 作業/etc/cron.d/*

如果沒有,您可以附加strace到 cron 進程以查看它讀取了哪些文件,或者執行了哪些命令:

strace -p 23537 -e file
strace -p 23537 -f -e execve [-s 10000]

在較舊的系統中,cron 可能會在沒有自動重新載入支援的情況下進行編譯,因此如果有人從 /etc/crontab 手動刪除作業但沒有重新載入 cron,它們將繼續運行,直到有人觸發重新載入。

答案2

您可以使用atop

安裝後,它將開始自動記錄進程及其資源使用情況,並將資料寫入日誌檔案。您可以稍等一下以收集足夠的數據,然後檢查日誌或解析它們。

例如,收集日誌後,要檢查正在運行的進程,我建議使用以下命令:

atop -r /var/log/atop/atop_<current date> -b 03:16 -e 03:18 -P PRG | grep -P 'PRG.*\s23557\s\('

這會:

  1. 讀取當天 03:16 到 03:18 之間的日誌文件
  2. 將資料輸出到機器可解析的輸出中,其中包含有關進程的通用資料(這將包括進程名稱)
  3. 搜尋 PID 為 23557 的進程所在的行,以便您可以看到進程名稱是什麼(用括號括起來)。 grep 模式是為了獲得更高的準確性 - 該行始終以 開頭PRG,值列以空格分隔(PID 是一個單獨的列),PID 後面的列是括在括號中的進程名稱(以 開頭()。

相關內容