So, I ran into a need to scan some files for viruses on Ubuntu this past week. However, a couple of things prevented this from being straight forward:
-
I couldn’t be sure where these files were being stored.
-
I didn’t want to scan the entire filesystem just to get at these few files.
So I went out looking for a way to scan only new files with clamscan. After a good bit of digging, I ran across this old thread where someone had a similar question. So after getting a pointer there, I was able to make this happen. Here is the way to do it:
##Install ClamAV##
-
Issue
sudo apt-get install clamav
to get the freshclam and clamscan commands. -
Update the virus definitions with a
sudo freshclam
. This will take a few seconds the first time.
##Get Ya Find Right##
Now this took a bit of playing around with to get where I wanted. I wanted to find all files of a certain type that had been created or modified in the past week. There’s also some differences to note about mtime vs. ctime vs. atime as a flag for find. Linux-FAQs.info did a good job of explaining these differences:
For my purposes, I wanted EVERYTHING that had changed, so that pointed to using the ctime flag. For a first test, I just wanted to see how many items find would return. I was able to do that by issuing (edited to look for .md files, just for laughs): sudo find / -name "*.md" -ctime -7 -type f | wc -l
. That command simply returns the number 5 on my machine at the time of writing. Let’s not pipe it out to wc so we can see those files:
Note: You’ll have to do almost everything with ClamAV as root user. Also, you can change the number of days to scan for by changing the ‘-7’ portion of the command.
Okay, slightly more interesting, and now we know what we’re working with. Let’s move on…
##Enter Xargs##
Using xargs was a first for me as part of this little endeavor. It’s a really handy tool to add to the toolbox! If you’ve ever tried to run a bash command like rm *
and received an error like “Argument list too long”, xargs is the answer to your problems. It takes the argument list and breaks it down into smaller pieces. It’ll then run subsequent commands with each sublist. For the purposes of what I was doing initally, there were about 7,000 files to scan, xargs was able to break those up into two scans of ~3,000 files and one scan of ~1,000. Worked great!
Here’s the final command that I used:
- The –remove flag just means that if a vulnerability is found in that file, delete the file immediately.
- the –log flag sets the path of the log file that clamscan will write. You will need to do this for sure if you have lots of files to scan, because several scan summaries will be written to this file.
After running, the log file will look something like this: