Выполненный rkhunter регулярно в настольной системе

Я хочу получить предупреждение на своем рабочем столе, когда rkhunter находит что-то нечетным в моей системе.

Я добавил в белый список некоторые файлы и директоров, которые кажутся хорошо в /etc/rkhunter.conf таким образом, я больше не получаю предупреждений.

Теперь я хочу поместить эту команду где-нибудь:

sudo rkhunter --checkall --report-warnings-only | while read OUTPUT; do notify-send "$OUTPUT"; done

Я знаю, как использовать cron но это не работает, вызывает мой компьютер, работает в неправильные времена, поэтому куда я должен поместить это так, он выполняется один раз в день, но не во время начальной загрузки системы? Оптимальный был бы спустя 30 Минут после запуска.

1
задан 29 August 2016 в 05:10

3 ответа

Выполненный при запуске, отобразитесь с 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.

  1. создайте сценарий запуска systemd

    Создайте сценарий /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
    
  2. запустите /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

источник: Как запустить скрипт во время начальной загрузки как корень

1
ответ дан 7 December 2019 в 14:05

Решение с anachron и notify-send

ответ на проблему anachron, который выполняет команды автоматически как корень , где корню нужен доступ к dbus сессии основного пользователя.

1. Предоставьте корневой доступ к своей настольной сессии (как пользователь)

, Чтобы позволить пользователю 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 для использования при каждой начальной загрузке системы.

2. Сценарий крона (как корень)

Помещенный сценарий в папку /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 генерирует вывод (только предупреждения), этот сценарий обнаружится как уведомление для каждого предупреждения на верхнем правом из Вашего экрана как пользователь

<час>

Источник:

1
ответ дан 7 December 2019 в 14:05

Можно использовать cron. Редактирование с:

crontab -e

для большего количества информации о том, как использовать cron, перейдите по этой ссылке:

crotab-учебное-руководство

0
ответ дан 7 December 2019 в 14:05

Другие вопросы по тегам:

Похожие вопросы: