web-dev-qa-db-ja.com

デスクトップシステムで定期的にrkhunterを実行する

Rkhunterが私のシステムで奇妙な何かを見つけたときに、デスクトップに警告を表示したいのですが。

/etc/rkhunter.confで問題がないように見えるファイルとディレクトリをホワイトリストに登録したため、警告は表示されなくなりました。

今、私はこのコマンドをどこかに置きたいです:

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

私はcronの使い方を知っていますが、うまくいきません。コンピューターが不定期に実行されているため、1日に1回実行されるようにどこに配置する必要があるのでしょうかただし、システム中はできません) -boot?起動後30分が最適です。

1
rubo77

起動時に実行し、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チェックルートとしてを実行します。


このソリューションを通知送信ソリューションと組み合わせることもできます。警告がない場合は、全方位ダイアログは完全ではないためです。その場合は通知で十分です

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

anachronおよびnotify-sendを使用したソリューション

問題の答えは anachron で、コマンドを自動的にrootとして実行します。rootはメインのdbusセッションにアクセスする必要がありますユーザー。

1.(ユーザーとして)デスクトップセッションにrootアクセスを付与します。

Rootユーザーがデフォルトユーザーのデスクトップにアクセスできるようにするには、最初にDBUS_SESSION_BUS_ADDRESS変数を設定する必要があります。デフォルトでは、cronはすべてのシステム起動を変更する変数にアクセスできません。これを修正するには、次のスクリプトをホームディレクトリに置いて、~/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

スタートアッププログラムで呼び出します。これにより、anachronが各システムブートで使用するために必要なDbus環境変数を含むファイル~/.dbus/Xdbusが作成/更新されます。

2. cronスクリプト(rootとして)

/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

これによりスクリプトが毎日1回実行され、rkhunter runが出力(警告のみ)を生成した場合、このスクリプトはユーザーの画面右上に各警告の通知として表示されます


ソース:

1
rubo77

cronを使用できます。編集:

crontab -e

cronの使用方法の詳細については、次のリンクにアクセスしてください。

crotab-tutorial

0
AdigaJo