cron: script problem
wergor 09.06.2014 - 12:35 1959 7
wergor
connoisseur de mimi
|
ich habe hier ein script, das clamscan ausführt und den report als email an root sendet falls infizierte dateien gefunden wurden. die file liegt in /etc/cron.weekly/ und funktioniert auch wie gewünscht wenn ich es von hand (als root) ausführe. cron scheint das script aber nicht auszuführen (bin nicht sicher, zumindest kommen keine email reports rein) #!/bin/bash
# email subject
SUBJECT="VIRUS DETECTED ON `hostname`!!!"
# Email To ?
EMAIL="root@localhost"
# Log location
LOG=/var/log/clamav/scan.log
check_scan () {
# Check the last set of results. If there are any "Infected" counts that aren't zero, we have a problem.
if [ `tail -n 12 ${LOG} | grep Infected | grep -v 0 | wc -l` != 0 ]
then
EMAILMESSAGE=`mktemp /tmp/virus-alert.XXXXX`
echo "To: ${EMAIL}" >> ${EMAILMESSAGE}
echo "From: [email]alert@domain.com[/email]" >> ${EMAILMESSAGE}
echo "Subject: ${SUBJECT}" >> ${EMAILMESSAGE}
echo "Importance: High" >> ${EMAILMESSAGE}
echo "X-Priority: 1" >> ${EMAILMESSAGE}
echo "`tail -n 50 ${LOG}`" >> ${EMAILMESSAGE}
sendmail -t < ${EMAILMESSAGE}
fi
}
clamscan -r / --exclude-dir=/sys/ --quiet --infected --log=${LOG}
check_scan
es gäbe zwar die möglichkeit das script irgendwo hin zu verschieben und mit crontab -e das ausführen zu planen. ich würde aber gerne wissen, ob/wie ich das scipt ausführen lassen kann, wenn es in /etc/cron.weekly liegt.
|
Crash Override
BOfH
|
Geb einfach mal für alle Binaries die du aufrufst den kompletten Pfad an.
|
wergor
connoisseur de mimi
|
Du meinst grep, clamscan etc?
|
Crash Override
BOfH
|
Genau, cron kennt die Umgebungsvariablen wie den Suchpfad deiner Shell nicht.
|
wergor
connoisseur de mimi
|
scheint zu funktionieren, danke
|
COLOSSUS
AdministratorGNUltra
|
Weil man es so oft sieht... sowas: if [ `tail -n 12 ${LOG} | grep Infected | grep -v 0 | wc -l` != 0 ]
then
[...]
ist gleich mehrfach redundant und unnoetig. Viel eleganter waere: if tail -n 12 "${LOG}" | grep -Fq Infected
then
[...]
An dem Script koennte man sonst natuerlich auch noch so einiges verbessern, aber ich will nicht langweilen
|
wergor
connoisseur de mimi
|
Bin für alle vorschläge offen (ist ein copy-paste script aus dem internet) edit: if tail -n 12 "${LOG}" | grep -Fq Infected
then
[...]
funktioniert nicht wie gewünscht, mit dieser zeile werden auch emails gesendet wenn nichts gefunden wurde. edit2: #!/bin/bash
# email subject
SUBJECT="VIRUS DETECTED ON `hostname`!!!"
# Email To ?
EMAIL="root@localhost"
# Log location
LOG=/var/log/clamav/scan.log
#Summary Lines
SUMMARY="11"
check_scan () {
# Check the last set of results. If there are any "Infected" counts that aren't zero, we have a problem.
local infectedCount=`tail -n 8 ${LOG} | grep "Infected files" | grep -o "[^ ]*$"`
local linesToPrint=$(( $SUMMARY + $infectedCount ))
if [ $infectedCount != 0 ]
then
EMAILMESSAGE=`mktemp /tmp/virus-alert.XXXXX`
echo "To: ${EMAIL}" >> ${EMAILMESSAGE}
echo "From: [email]alert@domain.com[/email]" >> ${EMAILMESSAGE}
echo "Subject: ${SUBJECT}" >> ${EMAILMESSAGE}
echo "Importance: High" >> ${EMAILMESSAGE}
echo "X-Priority: 1" >> ${EMAILMESSAGE}
echo "`tail -n $linesToPrint ${LOG}`" >> ${EMAILMESSAGE}
sendmail -t < ${EMAILMESSAGE}
fi
}
/usr/bin/clamscan -r / --exclude-dir=/sys/ --quiet --infected --log=${LOG}
check_scan
scheint gut zu funktionieren und schickt auch nur die relevanten ergebnisse.
Bearbeitet von wergor am 10.06.2014, 12:59
|
-=Willi=-
The Emperor protects
|
Und statt EMAILMESSAGE=`mktemp /tmp/virus-alert.XXXXX`
echo "To: ${EMAIL}" >> ${EMAILMESSAGE}
echo "From: [email]alert@domain.com[/email]" >> ${EMAILMESSAGE}
echo "Subject: ${SUBJECT}" >> ${EMAILMESSAGE}
echo "Importance: High" >> ${EMAILMESSAGE}
echo "X-Priority: 1" >> ${EMAILMESSAGE}
echo "`tail -n 50 ${LOG}`" >> ${EMAILMESSAGE}
sendmail -t < ${EMAILMESSAGE}
könntest du zur besseren Lesbarkeit auch das schreiben: EMAILMESSAGE=$(mktemp /tmp/virus-alert.XXXXX)
cat <<-EOF > "${EMAILMESSAGE}"
To: ${EMAIL}
From: [email]alert@comain.com[/email]"
Subject: ${SUBJECT}
Importance: High
X-Priority: 1
$(tail -n 50 ${LOG})
EOF
sendmail -t < "${EMAILMESSAGE}"
Oder auch das ganze mktemp auslassen und gleich cat <<-EOF | sendmail -t [...]
schreiben aber da bin ich mir grad ned sicher, kanns ned ausprobieren .
Bearbeitet von -=Willi=- am 10.06.2014, 16:43
|