Назад | Перейти на главную страницу

Проверка изменений в cronjobs

Каким-либо образом проверить и уведомить, если кто-то внес изменения / дополнения в cronjobs для конкретного пользователя на сервере Linux?

Можно ли узнать и о внесенных изменениях?

[user@user-ld ~]$ sudo tail /var/log/cron | grep RELOAD
Jan  3 00:19:01 user-ld crond[3074]: (user) RELOAD (/var/spool/cron/user)

grep для 'RELOAD'в журнале cron (/var/log/cron). Поэтому, если кто-то отредактирует / добавит задание cron, вы можете увидеть что-то выше в журнале cron.

Напишите сценарий мониторинга для этого файла журнала и с помощью которого отправляете оповещение на ваш электронный адрес.

Если вы хотите, вы можете использовать следующий скрипт для мониторинга записей cron конкретных пользователей:

#!/bin/bash
echo 'YOURPASSWORD_SUDO' | sudo -S crontab -l -u user > current_status_`date +"%m%d%y%s"`
diff <(cat `ls -1tr current_status_*| tail -1`) <(cat `ls -1tr current_status_* | tail -2 | head -1`)
if [[ $? == 0 ]] ; then 
    echo "no change in cron"
else
    echo "cron changed"
fi

Если кто-то редактирует свой файл crontab для каждого пользователя через crontab -e запись журнала записывается в / var / журнал / системный журнал. Примеры:

пользователь Алекс отредактировал свой собственный файл crontab:

Jan  3 08:42:47 localhost crontab[4278]: (alex) BEGIN EDIT (alex)
Jan  3 08:42:50 localhost crontab[4278]: (alex) END EDIT (alex)

пользователь корень отредактировал файл crontab пользователя Алекс:

Jan  3 08:49:06 localhost crontab[4557]: (root) BEGIN EDIT (alex)
Jan  3 08:49:07 localhost crontab[4557]: (root) END EDIT (alex)

Если crontab изменяется внешним редактором, то в журнале появляется следующий пример записи. / var / журнал / системный журнал:

Jan  3 08:46:01 localhost cron[1146]: (*system*) RELOAD (/etc/crontab)

Этот механизм ведения журнала, вероятно, можно настроить, но он активирован по умолчанию, по крайней мере, в Debian и Ubuntu, и я полагаю, что в большинстве других дистрибутивов тоже.

Их много, но (афаик) ничего особенного в cron. Я бы, наверное, использовал растяжка на сервере и убедитесь, что /var/spool/cron был подключен к сети.

Ты можешь использовать incron что похоже на cron но обрабатывает события файловой системы (изменения файлов / папок) вместо обработки событий по времени. Вы можете следить за папкой /var/spool/cron/crontabs для изменений и вызвать сценарий, чтобы зарегистрировать их и делать все, что вы хотите.