如何停用 cron 日誌中的 crontab 清單條目?

如何停用 cron 日誌中的 crontab 清單條目?

我在伺服器上有一個腳本,每隔幾分鐘運行一次,除此之外還檢查是否注入了一些惡意 crontab 條目。為了做到這一點,我檢查所有使用者的 crontab,這一切都很好,但是我的/var/log/cron檔案被所有crontab 列表的條目填滿,所以每次我運行腳本時,它都會記錄所有crontab 列表,如下所示:

Nov 30 17:16:02 myserv crontab[348610]: (root) LIST (root)
Nov 30 17:16:02 myserv crontab[348611]: (root) LIST (bin)
Nov 30 17:16:02 myserv crontab[348612]: (root) LIST (daemon)
Nov 30 17:16:02 myserv crontab[348613]: (root) LIST (adm)
Nov 30 17:16:02 myserv crontab[348614]: (root) LIST (lp)
Nov 30 17:16:02 myserv crontab[348615]: (root) LIST (sync)
Nov 30 17:16:02 myserv crontab[348616]: (root) LIST (shutdown)
Nov 30 17:16:02 myserv crontab[348617]: (root) LIST (halt)
Nov 30 17:16:02 myserv crontab[348618]: (root) LIST (mail)
Nov 30 17:16:02 myserv crontab[348619]: (root) LIST (operator)
Nov 30 17:16:02 myserv crontab[348620]: (root) LIST (games)
Nov 30 17:16:02 myserv crontab[348621]: (root) LIST (ftp)
Nov 30 17:16:02 myserv crontab[348622]: (root) LIST (smb)
Nov 30 17:16:02 myserv crontab[348623]: (root) LIST (named)
Nov 30 17:16:02 myserv crontab[348624]: (root) LIST (postgres)
Nov 30 17:16:02 myserv crontab[348625]: (root) LIST (mysql)
.....

所以它不必要地填充了日誌檔案。我使用了不同的選擇器,但似乎在選擇時cron.info它顯示了所有信息,而cron.notice它不顯示 crontab 何時被編輯或執行,這再次是我喜歡在我的日誌中。

# Log cron stuff
cron.*                                                  /var/log/cron

cron.*似乎與cron.info 任何想法相同如何排除“LIST”條目?所以/var/log/cron看起來像:

Nov 30 17:24:02 mysrv CROND[349831]: (root) CMDEND (/etc/cron.b/check nout >/dev/null 2>&1)
Nov 30 17:28:01 mysrv CROND[350781]: (root) CMD (/etc/cron.b/check nout >/dev/null 2>&1)

答案1

嘗試使用cron.none.如果使用*星號 ( * ) 則符合零次或多次出現。

現在您可以修改規則以將日誌移至另一個文件/path/to/another/file

更新

比較操作

目前支援以下比較操作:

包含

檢查值中提供的字串是否包含在屬性中。必須完全匹配,不支援通配符。

是平等的

比較提供的“值”字串和屬性內容。這兩個值必須完全相等才能匹配。與 contains 的差異在於 contains 搜尋屬性值內任意位置的值,而所有字元必須相同才能實作 isequal。因此,isequal 對於 syslogtag 或 FROMHOST 等欄位最有用,您可能知道其中的確切內容。

以。

檢查是否恰好在屬性值的開頭找到該值。例如,如果您搜尋“val”

:msg, startswith, "val"

如果訊息包含“此訊息中有值”,則它將匹配,但如果訊息包含“此訊息中有值”,則它將不匹配(在後一種情況下,「包含」將匹配)。請注意,“startswith”比正規表示式快得多。因此,即使它們被實現,使用“startswith”也非常有意義(從性能角度來看)。

正規表示式

將此屬性與提供的 POSIX BRE 正規表示式進行比較。

埃雷正規表示式

將此屬性與提供的 POSIX ERE 正規表示式進行比較。

您可以在比較操作前面使用感嘆號 (!),該操作的結果是否定的。例如,如果msg包含“This is an informative message”,則下列範例將不符:

:msg, contains, "error"

但這一個匹配:

:msg, !contains, "error"

如果您想要進行一些通用處理但排除某些特定事件,則使用否定會很有用。您可以結合使用丟棄操作。一個樣本是:

*.* /var/log/allmsgs-including-informational.log
:msg, contains, "informational"  ~
*.* /var/log/allmsgs-but-informational.log

不要忽視第 2 行中的波形符!在此範例中,所有訊息都會寫入檔案 allmsgs-include-informational.log。然後,所有包含字串“informational”的訊息都將被丟棄。這表示「丟棄行」(我們的範例中的編號 2)下方的設定檔行將不會套用於此訊息。然後,所有剩餘行也將寫入檔案 allmsgs-but-informational.log。

答案2

我為任何有興趣的人找到了帶有過濾器的解決方案。我在 cron.info 上方插入了一條語句,以刪除不需要的訊息。所以我的解決方案如下所示:

:msg, contains, "(root) LIST"                           ~
cron.*                                                  /var/log/cron

現在,所有帶有「(root) LIST」條目的行都將被丟棄。

相關內容