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.noticecrontab が編集または実行されたときは表示されないようです。これもログで必要なことです。

# 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*アスタリスク (*) を使用すると、0 回以上の出現に一致します。

ログを別のファイルに移動するためにルールを変更できます/path/to/another/file

アップデート

比較操作

現在、次の比較操作がサポートされています。

含む

値に指定された文字列がプロパティに含まれているかどうかを確認します。完全に一致する必要があります。ワイルドカードはサポートされていません。

等しい

指定された「値」文字列とプロパティの内容を比較します。一致するには、これら 2 つの値が正確に一致している必要があります。contains との違いは、contains はプロパティ値内の任意の場所で値を検索するのに対し、isequal の場合はすべての文字が同一である必要があることです。そのため、isequal は、正確な内容がわかっている可能性が高い syslogtag や FROMHOST などのフィールドで最も役立ちます。

始まり

値がプロパティ値の先頭に正確に見つかるかどうかを確認します。たとえば、「val」を

:msg, startswith, "val"

msg に「このメッセージに値があります」が含まれている場合は一致しますが、msg に「このメッセージに値があります」が含まれている場合は一致しません (後者の場合は、「contains」が一致します)。「startswith」は正規表現よりもはるかに高速であることに注意してください。そのため、一度実装された後でも、「startswith」を使用することは (パフォーマンスの面で) 非常に理にかなっています。

正規表現

指定された POSIX BRE 正規表現とプロパティを比較します。

正規表現

指定された POSIX ERE 正規表現とプロパティを比較します。

比較演算の直前に感嘆符 (!) を使用すると、この演算の結果は否定されます。たとえば、 にmsg「これは情報メッセージです」が含まれている場合、次のサンプルは一致しません。

:msg, contains, "error"

しかし、これは一致します:

:msg, !contains, "error"

否定を使用すると、一般的な処理を実行したいが、特定のイベントを除外したい場合に便利です。これと組み合わせて、破棄アクションを使用できます。例は次のようになります。

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

2 行目のチルダを見逃さないでください。このサンプルでは、​​すべてのメッセージが allmsgs-including-informational.log ファイルに書き込まれます。次に、文字列「informational」を含むすべてのメッセージが破棄されます。つまり、「破棄行」 (サンプルでは 2 行目) より下の config ファイルの行はこのメッセージには適用されません。その後、残りのすべての行も allmsgs-but-informational.log ファイルに書き込まれます。

答え2

興味のある方のために、フィルターを使った解決策を見つけました。不要なメッセージを削除するために、cron.info の上にステートメントを挿入しました。私の解決策は次のようになります。

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

これで、「(root) LIST」というエントリを含むすべての行が破棄されます。

関連情報