
Tengo un script en el servidor que se ejecuta cada pocos minutos y, entre otras cosas, comprueba si se han inyectado algunas entradas crontab maliciosas. Para hacer esto, verifico los crontabs de todos los usuarios, lo cual funciona bien, pero mi /var/log/cron
archivo se llena con entradas de todos los listados de crontab, por lo que cada vez que ejecuto el script registrará todas las listas de crontab de esta manera:
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)
.....
por lo que llena el archivo de registro innecesariamente. Jugué con diferentes selectores, pero parece que al elegir cron.info
muestra toda la información, mientras que cron.notice
no muestra cuándo se editó ni ejecutó crontab, lo cual nuevamente me gusta en mis registros.
# Log cron stuff
cron.* /var/log/cron
cron.*
parece ser lo mismo que cron.info
¿Alguna idea de cómo excluir las entradas "LISTA"? así /var/log/cron
se vería así:
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)
Respuesta1
Prueba con cron.none
. Si utiliza *
un asterisco ( * ), coincide con cero o más ocurrencias.
Ahora puedes modificar la regla para mover el registro a otro archivo./path/to/another/file
ACTUALIZAR
Operaciones de comparación
Actualmente se admiten las siguientes operaciones de comparación:
contiene
Comprueba si la cadena proporcionada en valor está contenida en la propiedad. Debe haber una coincidencia exacta; no se admiten comodines.
es igual
Compara la cadena de "valor" proporcionada y el contenido de la propiedad. Estos dos valores deben ser exactamente iguales para que coincidan. La diferencia con contiene es que contiene busca el valor en cualquier lugar dentro del valor de la propiedad, mientras que todos los caracteres deben ser idénticos para isequal. Como tal, isequal es más útil para campos como syslogtag o FROMHOST, donde probablemente conozcas el contenido exacto.
comienza con
Comprueba si el valor se encuentra exactamente al comienzo del valor de la propiedad. Por ejemplo, si busca "val" con
:msg, startswith, "val"
Será una coincidencia si el mensaje contiene "los valores están en este mensaje", pero no coincidirá si el mensaje contiene "Hay valores en este mensaje" (en el último caso, "contiene" coincidiría). Tenga en cuenta que "empieza con" es mucho más rápido que las expresiones regulares. Entonces, incluso una vez implementados, puede tener mucho sentido (en términos de rendimiento) usar "empieza con".
expresión regular
Compara la propiedad con la expresión regular POSIX BRE proporcionada.
ereregex
Compara la propiedad con la expresión regular POSIX ERE proporcionada.
Puede utilizar el carácter bang (!) inmediatamente delante de una operación de comparación; el resultado de esta operación se niega. Por ejemplo, si msg
contiene "Este es un mensaje informativo", el siguiente ejemplo no coincidirá:
:msg, contains, "error"
pero este coincide:
:msg, !contains, "error"
Usar la negación puede resultar útil si desea realizar algún procesamiento genérico pero excluir algunos eventos específicos. Puedes usar la acción de descarte junto con eso. Una muestra sería:
*.* /var/log/allmsgs-including-informational.log
:msg, contains, "informational" ~
*.* /var/log/allmsgs-but-informational.log
¡No pases por alto la tilde en la línea 2! En este ejemplo, todos los mensajes se escriben en el archivo allmsgs-incluido-informational.log. Luego, se descartan todos los mensajes que contengan la cadena "informativo". Eso significa que las líneas del archivo de configuración debajo de la "línea de descarte" (número 2 en nuestro ejemplo) no se aplicarán a este mensaje. Luego, todas las líneas restantes también se escribirán en el archivo allmsgs-but-informational.log.
Respuesta2
Encontré una solución con filtro, para cualquiera que esté interesado. Inserté una declaración arriba de cron.info para eliminar mensajes no deseados. entonces mi solución se ve así:
:msg, contains, "(root) LIST" ~
cron.* /var/log/cron
ahora se descartarán todas las líneas con entradas con "(raíz) LISTA".