web-dev-qa-db-fra.com

Exécutez rkhunter régulièrement sur un système de bureau

Je veux recevoir un avertissement sur mon bureau lorsque rkhunter trouve quelque chose d'étrange sur mon système.

J'ai mis en liste blanche certains fichiers et répertoires qui semblent corrects dans /etc/rkhunter.conf donc je n'ai plus d'avertissement.

Maintenant, je veux mettre cette commande quelque part:

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

Je sais comment utiliser cron mais cela ne fonctionne pas, car mon ordinateur fonctionne à des heures irrégulières, alors où dois-je le mettre pour qu'il soit exécuté une fois par jour mais pas pendant le système -boot? Optimal serait de 30 minutes après le démarrage.

1
rubo77

Exécuter au démarrage, afficher avec zenity

Créez un fichier /usr/local/sbin/rkhunter-check et le rendre exécutable:

Sudo touch /usr/local/sbin/rkhunter-check
Sudo chmod +x /usr/local/sbin/rkhunter-check

Modifiez le fichier 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

Si l'exécution de rkhunter génère une sortie (uniquement des avertissements), ce script apparaîtra comme une fenêtre déroulante avec la sortie de rkhunter.

  1. créer un script de démarrage systemd

    Créez le script /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
    

    Mettre à jour systemd avec:

    Sudo systemctl daemon-reload
    Sudo systemctl enable rkhunter
    Sudo systemctl start rkhunter
    
  2. commence par /etc/rc.local

    Sur les systèmes sans systemd appelez le script lors de l'exécution dans /etc/rc.local et mettre un sommeil avant la commande entière:

    gksu gedit /etc/rc.local
    

    Ajoutez cette commande avant la dernière ligne de /etc/rc.local cela contient exit 0:

    sleep 1800 && /usr/local/sbin/rkhunter-check &
    

Les deux solutions attendront 30 minutes avant d'exécuter la vérification rkhunter en tant que root .


Vous pouvez également combiner cette solution avec la solution notify-send, car dans le cas où il n'y a pas d'avertissement, une boîte de dialogue de zénité n'est pas parfaite. une notification suffirait dans ce cas

#!/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

source: Comment exécuter un script lors du démarrage en tant que root

1
rubo77

Solution avec anachron et notify-send

La réponse au problème est anachron qui exécute automatiquement les commandes en tant que root , où root a besoin d'accéder à la session dbus du principal utilisateur.

1. Donnez un accès root à votre session de bureau (en tant qu'utilisateur)

Pour permettre à l'utilisateur root d'accéder au bureau de l'utilisateur par défaut, vous devez d'abord définir le DBUS_SESSION_BUS_ADDRESS variable. Par défaut, cron n'a pas accès à la variable qui change à chaque démarrage du système. Pour y remédier, placez le script suivant dans votre répertoire personnel et appelez-le ~/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

Donnez-lui des droits exécutables:

chmod +x ~/dbus-session-export

Et appelez-le dans vos programmes de démarrage. Cela va créer/mettre à jour le fichier ~/.dbus/Xdbus contenant la variable d'environnement Dbus requise pour anachron à utiliser à chaque démarrage du système.

2. Script Cron (en tant que root)

Mettez un script dans le dossier /etc/cron.daily/ et le rendre exécutable:

Sudo touch /etc/cron.daily/rkhunter-check
Sudo chmod +x /etc/cron.daily/rkhunter-check

Modifiez le fichier 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

Cela exécutera le script tous les jours une fois et si l'exécution de rkhunter génère une sortie (uniquement des avertissements), ce script apparaîtra comme une notification pour chaque avertissement en haut à droite de votre écran en tant qu'utilisateur


La source:

1
rubo77

Vous pouvez utiliser cron. Modifier avec:

crontab -e

pour plus d'informations sur l'utilisation de cron, suivez ce lien:

tutoriel crotab

0
AdigaJo