• 3 svar
Shellscript
2008-09-29 kl 12:09

Detta är tråden för blogginlägget Dela med dig av dina shellscript.Som utlovat finner du nedan mitt shellscript för att söka och radera infekterade virusfiler.Kom gärna med tips och förbättringar, och tveka inte att lägga upp dina egna shellscript!Thomas Forsberg - "Information wants to be free"

2008-09-29 kl 12:30

#!/bin/bash# Forsbergs sök-och-radera-virusinfekterade-filer-script# Version 2008.09.29-2# # Körs som root varje fredagnatt med start 02:30, på en Debian Stable-maskin, med följande Crontab-rader:# # Kör en viruskoll, som root# 30 02 * * fri root run-parts /home/forsberg/cron/viruskoll# Noterbart är att viruskoll är en katalog. I den finns detta script, vars namn är viruskoll.# # Detta script får modifieras, spridas och användas helt fritt. Användning sker på egen risk.## TODO V2012: Städa upp i koden.function initiera_variabler{ DEBUGMODE=0 # 1 om bara scanna cron/-katalogen, 0 (noll) om allt ska scannas. SCRIPTSTART=`date +%Y-%m-%d_%Hh%Mm%Ss` SCRIPTLOGFILE=/home/forsberg/cron/viruskoll/logs/scriptlog-`date +%Y-%m-%d` VIRUSLOGFILE=/home/forsberg/cron/viruskoll/logs/viruslog-`date +%Y-%m-%d` VERSIONTESTFILE=/home/forsberg/cron/viruskoll/logs/versionlog-`date +%Y-%m-%d` VALIDUSER=root RUNNINGUSER=`whoami`}function kolla_validuser{# Debug: echo "User is $RUNNINGUSER" | sleep 10# TODO V2012: Om inte användaren är root - logga, rapportera och avsluta.if [ "$DEBUGMODE" = "1" ]; then echo "Warning - DEBUGMODE is set to 1." >> $SCRIPTLOGFILE echo "Warning - DEBUGMODE is set to 1." >> $VIRUSLOGFILE echo "Warning - DEBUGMODE is set to 1."; fi;if [ "$VALIDUSER" != "root" ]; then echo "Warning - ValidUser is $VALIDUSER, and not root. Resetting logfile." >> $SCRIPTLOGFILE cat $SCRIPTLOGFILE | mail -s "Warning: Virus-scripts ValidUser is not root" forsberg@localhost; echo "" > $SCRIPTLOGFILE exit; fi;if [ "$RUNNINGUSER" != "$VALIDUSER" ]; then echo -e "\nViruskoll-script begin $SCRIPTSTART" >> $SCRIPTLOGFILE echo "Error. Must be $VALIDUSER. User $RUNNINGUSER is not good enough. Stopping here." >> $SCRIPTLOGFILE echo "Error. Must be $VALIDUSER. User $RUNNINGUSER is not good enough. Stopping here." cat $SCRIPTLOGFILE | mail -s "Error: Virus-script must be run as user $VALIDUSER" forsberg@localhost; echo -e "\nViruskoll-script ended `date +%F@%T`" >> $SCRIPTLOGFILE exit; fi;}function kolla_outdated{freshclam -v >> $VERSIONTESTFILEcat $VERSIONTESTFILE | grep OUTDATE >/dev/null 2>&1VERSIONTESTFILE_result=$?;if [ $VERSIONTESTFILE_result -eq 0 ]; then echo "I will continue to scan for viruses, but your ClamAV installation is OUTDATED." >> $VERSIONTESTFILE; cat $VERSIONTESTFILE >> $SCRIPTLOGFILE; cat $VERSIONTESTFILE | grep -i Recommended | mail -s "Warning: ClamAV installation is outdated" forsberg@localhost# vid behov av local broadcast: cat $VERSIONTESTFILE | grep -i Recommended | wall;fi;if [ $VERSIONTESTFILE_result -eq 1 ]; then echo "ClamAV is running latest version. Removing version test file." >> $SCRIPTLOGFILE; rm -f $VERSIONTESTFILE;fi;}function uppdatera_antivirusdatabasen{freshclam --quietfreshclam_result=$?;kolla_freshclam_result;}function kolla_freshclam_result{ # if [ $freshclam_result -eq 0 ]; then echo "New antivirus database installed." >> $SCRIPTLOGFILE; fi; # if [ $freshclam_result -eq 1 ]; then echo "Antivirus database is already the latest version." >> $SCRIPTLOGFILE; fi; if [ $freshclam_result -eq 62 ]; then echo "Database update error. Trying again in 5..." >> $SCRIPTLOGFILE killall -9 freshclam >> $SCRIPTLOGFILE sleep 5 freshclam -v >> $SCRIPTLOGFILE; freshclam_result_two=$?; kolla_freshclam_result_two; # Göra om kontrollen igen? Behövs kanske inte, eftersom allt här loggas till SCRIPTLOGFILE. fi;}function kolla_freshclam_result_two{ if [ $freshclam_result_two -eq 0 ]; then echo "Thanks, now it worked. New antivirus database installed." >> $SCRIPTLOGFILE; fi; # DEBUG: if [ $freshclam_result_two -eq 1 ]; then echo "Antivirus database is already the latest version." >> $SCRIPTLOGFILE; fi; if [ $freshclam_result_two -eq 62 ]; then echo "Impossible - database update error again. Will try again in 10..." >> $SCRIPTLOGFILE killall -9 freshclam >> $SCRIPTLOGFILE sleep 10 freshclam -v >> $SCRIPTLOGFILE; # Nu räcker det med kontroller. fi;}function kolla_efter_virus{# Sök efter virus, och RADERA infekterade filer:# echo "Searching for virus... this may take some time. Go make coffee." >> $SCRIPTLOGFILE# ORIGINAL-KOMMANDO: clamscan -r -i --remove / >> $SCRIPTLOGFILE# DEBUG-KOMMANDO clamscan -r -i --remove /home/forsberg/cron >> $SCRIPTLOGFILE# VID BEHOV med --no-summary, fast jag vill ha med summary.if [ $DEBUGMODE -eq 1 ]; then clamscan -r -i --remove -l $VIRUSLOGFILE /home/forsberg/cron >> $SCRIPTLOGFILE;else clamscan -r -i --remove -l $VIRUSLOGFILE / >> $SCRIPTLOGFILE;fi; VIRUSSTATUS=$?; if [ $DEBUGMODE -eq 1 ]; then echo "VIRUSSTATUS = $VIRUSSTATUS"; fi;}# Sätt lite startvariabler.initiera_variabler;# Då kör vi igång.echo -e "\nViruskoll-script begin $SCRIPTSTART" >> $SCRIPTLOGFILEecho -e "\nViruskoll-script begin $SCRIPTSTART" >> $VIRUSLOGFILEkolla_validuser;# Om kommandot körs i terminal - echo "See $SCRIPTLOGFILE for details".echo -e "\nSee $SCRIPTLOGFILE for details."# Synkronisera klockan./usr/sbin/ntpdate -u ntp1.sth.netnod.se >/dev/null 2>&1kolla_outdated;uppdatera_antivirusdatabasen;kolla_efter_virus;# Kontrollera virusstatusif [ $VIRUSSTATUS -eq 0 ];then echo -e "\nViruskoll-script ended `date +%Y-%m-%d_%Hh%Mm%Ss`" >> $SCRIPTLOGFILE cat $SCRIPTLOGFILE | mail -s "No viruses found at `date +%F@%T`" forsberg@localhost; # bara så jag vet att systemet kollar efter virus else if [ $VIRUSSTATUS -eq 1 ]; then # Virus hittat - rapportera via e-post! echo -e "\nViruskoll-script ended `date +%Y-%m-%d_%Hh%Mm%Ss`" >> $VIRUSLOGFILE cat $VIRUSLOGFILE | mail -s " Virus at Xplorern (pid $$, Exit status $?)" forsberg@localhost thomas.forsberg@datormagazin.se cat $VIRUSLOGFILE | grep -i found | wall; else echo "Something else is wrong. Exit Status = $?" >> $SCRIPTLOGFILE; cat $SCRIPTLOGFILE | mail -s "Oops, from Virus-script. Unknown Exit Status $? - Scriptlogfile" forsberg@localhost; cat $VIRUSLOGFILE | mail -s "Oops, from Virus-script. Unknown Exit Status $? - Viruslogfile" forsberg@localhost; fi;fi# End of script

2008-09-29 kl 14:34

Egentligen är inte funktionerna nödvändiga, eftersom de bara anropas en gång. Den största anledningen att jag bakade in funktioner är för att lära mig hur de fungerar och hur de anropas.Till version (och år) 2012 har jag tänkt att fixa en uppstädning av koden. Funktionen kolla_validuser är onödigt lång och bör logga och rapportera om en icke root-användare försöker starta scriptet. Funktionen kolla_outdated behöver eventuellt uppdateras i och med ny output från det nya clamav-biblioteket (LibClamAV).Kommentarer och förslag på förbättringar mottages tacksamt.

  • 3 svar

Läs mer

  • Senaste
  • Mest läst
  • Mest kommenterat

Kom in i diskussionen

Detta innehåll är skapat av Datormagazins besökare

Trassel efter uppgradering

3 kommentarer

LasseD: Hej igen några timmar senare! Till min stora glädje kan jag nu rapportera att reparationen av Win 7 tycks ha lyckats! Efter ett flertal omstarter och långvariga sökningar på hårddisken hittade den...

Månadens fråga

  • Sysslar du med utveckling på något sätt?

Artikelkommentarer

Nyhetsbrevet Uppsnappat

Uppsnappat har i över tio år levererat de senaste IT-nyheterna till tiotusentals läsare. Som prenumerant får du nyhetsbrevet varje tisdag och torsdag.
Uppsnappat är helt gratis, så varför inte teckna en prenumeration redan idag?



För dig som vill veta mer: prenumerera

Datormagazin är datortidningen för dig som vill veta mest. Vår ambition är att göra en tidning med djupare och mer avancerade artiklar än vad du hittar i andra datortidningar. Samtidigt väjer vi inte för att på ett handfast sätt förklara hur saker och ting fungerar. Du ska alltid känna att du har nytta av tidningen.
Välkommen till Sveriges största tidskrift för avancerade datoranvändare!

Beställ prenumeration och betala direkt online

  • Datormagazin 5-2014

  • Datormagazin 4-2014

  • Datormagazin 3-2014

  • Datormagazin 2-2014

  • Datormagazin 1-2014

  • Datormagazin 14-2013

  • Datormagazin 13-2013