Rkhunterが私のシステムで奇妙な何かを見つけたときに、デスクトップに警告を表示したいのですが。
/etc/rkhunter.conf
で問題がないように見えるファイルとディレクトリをホワイトリストに登録したため、警告は表示されなくなりました。
今、私はこのコマンドをどこかに置きたいです:
Sudo rkhunter --checkall --report-warnings-only | while read OUTPUT; do notify-send "$OUTPUT"; done
私はcron
の使い方を知っていますが、うまくいきません。コンピューターが不定期に実行されているため、1日に1回実行されるようにどこに配置する必要があるのでしょうかただし、システム中はできません) -boot?起動後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チェックルートとしてを実行します。
このソリューションを通知送信ソリューションと組み合わせることもできます。警告がない場合は、全方位ダイアログは完全ではないためです。その場合は通知で十分です
#!/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 で、コマンドを自動的にrootとして実行します。rootはメインのdbusセッションにアクセスする必要がありますユーザー。
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
が作成/更新されます。
/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が出力(警告のみ)を生成した場合、このスクリプトはユーザーの画面右上に各警告の通知として表示されます
ソース: