
서버에는 몇 분마다 실행되는 스크립트가 있으며 무엇보다도 악의적인 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" 항목을 제외하는 방법은 Any Ideas 와 같은 것 같습니다 . 그러면 /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
업데이트
비교 작업
현재 지원되는 비교 작업은 다음과 같습니다.
포함
value에 제공된 문자열이 속성에 포함되어 있는지 확인합니다. 정확히 일치해야 하며 와일드카드는 지원되지 않습니다.
는 같다
제공된 "값" 문자열과 속성 내용을 비교합니다. 일치하려면 이 두 값이 정확히 동일해야 합니다. 포함과의 차이점은 포함이 속성 값 내부 어디에서나 값을 검색하는 반면, isequal의 경우 모든 문자가 동일해야 한다는 것입니다. 따라서 isequal은 정확한 내용을 알고 있는 syslogtag 또는 FROMHOST와 같은 필드에 가장 유용합니다.
시작하다
해당 값이 속성 값의 시작 부분에 정확히 있는지 확인합니다. 예를 들어, "val"을 검색하면
:msg, startswith, "val"
msg에 "이 메시지에 값이 있습니다"가 포함되어 있으면 일치하지만 "이 메시지에 값이 있습니다"가 포함되어 있으면 일치하지 않습니다(나중의 경우에는 "포함"이 일치함). "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-informational.log 파일에 기록됩니다. 그런 다음 "정보"라는 문자열이 포함된 모든 메시지가 삭제됩니다. 이는 "discard line"(샘플의 2번) 아래 구성 파일 라인이 이 메시지에 적용되지 않음을 의미합니다. 그러면 나머지 모든 줄도 allmsgs-but-informational.log 파일에 기록됩니다.
답변2
관심 있는 사람을 위해 필터가 있는 솔루션을 찾았습니다. 원치 않는 메시지를 제거하기 위해 cron.info 위에 설명을 삽입했습니다. 내 솔루션은 다음과 같습니다.
:msg, contains, "(root) LIST" ~
cron.* /var/log/cron
이제 "(루트) LIST" 항목이 포함된 모든 행이 삭제됩니다.