Я хочу получить предупреждение на своем рабочем столе, когда rkhunter находит что-то нечетным в моей системе.
Я добавил в белый список некоторые файлы и директоров, которые кажутся хорошо в /etc/rkhunter.conf
таким образом, я больше не получаю предупреждений.
Теперь я хочу поместить эту команду где-нибудь:
sudo rkhunter --checkall --report-warnings-only | while read OUTPUT; do notify-send "$OUTPUT"; done
Я знаю, как использовать cron
но это не работает, вызывает мой компьютер, работает в неправильные времена, поэтому куда я должен поместить это так, он выполняется один раз в день, но не во время начальной загрузки системы? Оптимальный был бы спустя 30 Минут после запуска.
zenity
Создайте файл /usr/local/sbin/rkhunter-check
и сделайте это исполняемым файлом:
sudo touch /usr/local/sbin/rkhunter-check
sudo chmod +x /usr/local/sbin/rkhunter-check
Отредактируйте файл gksu gedit /usr/local/sbin/rkhunter-check
#!/usr/bin/env bash
export DISPLAY=:0
MAINUSER="$(awk -F: '$3==1000{print $1}' /etc/passwd)"
LOG=/tmp/.rkhunter-warnings
rm -f $LOG
touch $LOG
rkhunter --checkall --report-warnings-only | while read OUTPUT; do
if [ "$OUTPUT" != "" ]; then
OUTPUT="${OUTPUT//[\`\"\']/}"
echo "$OUTPUT">>$LOG
fi
done
if [ "$(cat $LOG)" = "" ]; then
#like this there is always a notification, even if there is no warning, it will show an empty notification.
echo "#no warnings">$LOG
fi
if [ "$(cat $LOG)" != "" ]; then
su $MAINUSER -c 'zenity --text-info --width 800 --title "Rkhunter warnings" < '"$LOG"
fi
Если выполненный rkhunter генерирует вывод (только предупреждения), то этот сценарий обнаружится как окно с возможностью прокрутки с выводом rkhunter.
Создайте сценарий /etc/systemd/system/rkhunter.service
:
[Unit]
Description=starts rkhunter and displays any findings with zenity
[Service]
TimeoutStartSec=infinity
ExecStartPre=/bin/sleep 1800
ExecStart=/usr/local/sbin/rkhunter-check
[Install]
WantedBy=default.target
Обновите systemd с:
sudo systemctl daemon-reload
sudo systemctl enable rkhunter
sudo systemctl start rkhunter
/etc/rc.local
В системах без systemd
назовите сценарий во времени выполнения в /etc/rc.local
и помещенный сон перед целой командой:
gksu gedit /etc/rc.local
Добавьте эту команду перед последней строкой в /etc/rc.local
это содержит exit 0
:
sleep 1800 && /usr/local/sbin/rkhunter-check &
Оба решения будут ожидать 30 минут прежде, чем выполнить проверку rkhunter как корень.
Можно также объединиться, это решение с уведомлением - отправляют решение, потому что в случае, при отсутствии предупреждений, zenity диалоговое окно не прекрасно. уведомление было бы достаточно в этом случае
#!/usr/bin/env bash
export DISPLAY=:0
MAINUSER="$(awk -F: '$3==1000{print $1}' /etc/passwd)"
LOG=/tmp/.rkhunter-warnings
echo ""> $LOG
rkhunter --checkall --report-warnings-only | while read OUTPUT; do
if [ "$OUTPUT" != "" ]; then
OUTPUT="${OUTPUT//[\`\"\']/}"
echo "$OUTPUT">>$LOG
fi
done
if [ "$(cat $LOG)" = "" ]; then
MAINUSER="$(awk -F: '$3==1000{print $1}' /etc/passwd)"
if [ -r "/home/$MAINUSER/.dbus/Xdbus" ]; then
. "/home/$MAINUSER/.dbus/Xdbus"
fi
su $MAINUSER -c $"notify-send \"rkhunter: no warnings\""
fi
if [ "$(cat $LOG)" != "" ]; then
su $MAINUSER -c 'zenity --text-info --width 800 --title "Rkhunter warnings" < '"$LOG"
fi
источник: Как запустить скрипт во время начальной загрузки как корень
anachron
и notify-send
ответ на проблему anachron, который выполняет команды автоматически как корень , где корню нужен доступ к dbus сессии основного пользователя.
, Чтобы позволить пользователю root получить доступ к рабочему столу пользователя по умолчанию, сначала необходимо установить DBUS_SESSION_BUS_ADDRESS
переменная. Кроном по умолчанию не имеет доступа к переменной, которая изменяется, каждая система запускаются. Для исправления это поместило следующий сценарий в корневой каталог и звонит, это ~/dbus-session-export
#!/bin/sh
touch ~/.dbus/Xdbus
chmod 600 ~/.dbus/Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > ~/.dbus/Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> ~/.dbus/Xdbus
exit 0
Дает ему исполняемые права:
chmod +x ~/dbus-session-export
И вызов это в Ваших программах запуска. Это создаст/обновит файл ~/.dbus/Xdbus
, содержащий необходимую переменную Dbus evironment для anachron для использования при каждой начальной загрузке системы.
Помещенный сценарий в папку /etc/cron.daily/
и делает его исполняемым файлом:
sudo touch /etc/cron.daily/rkhunter-check
sudo chmod +x /etc/cron.daily/rkhunter-check
Редактирование файл gksu gedit /etc/cron.daily/rkhunter-check
#!/usr/bin/env bash
sleep 1800 # wait 30 minutes in case the script is called directly at boot
MAINUSER="$(awk -F: '$3==1000{print $1}' /etc/passwd)"
if [ -r "/home/$MAINUSER/.dbus/Xdbus" ]; then
. "/home/$MAINUSER/.dbus/Xdbus"
fi
su $MAINUSER -c 'notify-send "starting rkhunter scan... "'
rkhunter --checkall --report-warnings-only | while read OUTPUT; do
if [ "$OUTPUT" != "" ]; then
OUTPUT="${OUTPUT//[\`\"\']/}"
su $MAINUSER -c $"notify-send \"rkhunter: $OUTPUT\""
fi
done
Это будет выполнять сценарий каждый день однажды и если выполненный rkhunter генерирует вывод (только предупреждения), этот сценарий обнаружится как уведомление для каждого предупреждения на верхнем правом из Вашего экрана как пользователь
<час>Источник:
Можно использовать cron
. Редактирование с:
crontab -e
для большего количества информации о том, как использовать cron
, перейдите по этой ссылке: