linux系统常作为服务器系统,以安全著称,但是随着市场占有量的增大,慢慢的linux病毒也还是增多,而对于病毒,一般都是管理员手动分析进行查杀,除了手动分析查杀病毒外,还可以借助杀毒软件进行查杀,就像windows都有杀毒软件一样,liunx的杀毒软件也是有的,但基本上都是开源的小工具,由于本身linux服务器的病毒就较少,且相对windows更难以入侵,所以专门的Linux杀毒软件较少,专门研发linux杀毒软件或病毒的人就更少了。
但是,随着linux服务器在市场上的占用率的飙升,针对linux系统的病毒也开始增加了,所以,我们还是使用更为专业的杀毒软件,这里选择开源的ClamAV 杀毒软件。
- 在Ubuntu安装ClamAV
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install clamav clamav-daemon -y
- 更新病毒库
sudo freshclam
病毒库保存位置:
/var/lib/clamav/daily.cvd
/var/lib/clamav/main.cvd
- 常用命令
##扫描文件
$ clamscan “目录或者文件名”
##递归扫描home目录,并且记录日志
$ clamscan -r /home -l /var/log/clamav.log
##递归扫描home目录,将病毒文件删除,并且记录日志
$ clamscan -r /home --remove -l /var/log/clamav.log
##扫描指定目录,然后将感染文件移动到指定目录,并记录日志
$ clamscan -r /home --move=/tmp/clamav -l /var/log/clamav.log
说明:
-r 递归扫描目录
-i 只打印受感染的文件
-l 指定记录日志文件
--remove 删除病毒文件
--move 移动病毒到指定目录
--max-dir-recursion=#n 最大目录递归级别
1.重点扫描目录
clamscan -r -i /etc --max-dir-recursion=5 -l /var/log/clamav-etc.log
clamscan -r -i /bin --max-dir-recursion=5 -l /var/log/clamav-bin.log
clamscan -r -i /usr --max-dir-recursion=5 -l /var/log/clamav-usr.log
clamscan -r -i /var --max-dir-recursion=5 -l /var/log/clamav-var.log
2.扫描报告说明
----------- SCAN SUMMARY -----------
Known viruses: 8608049 #已知病毒
Engine version: 0.103.5 #软件版本
Scanned directories: 1 #扫描目录
Scanned files: 15 #扫描文件
Infected files: 0 #感染文件!!!
Data scanned: 8.32 MB #扫描数据
Data read: 3.96 MB (ratio 2.10:1) #数据读取
Time: 105.181 sec (1 m 45 s) #扫描用时
Start Date: 2022:07:15 16:56:23 #扫描开始时间
End Date: 2022:07:15 16:58:08 #扫描结束时间
3.查看病毒文件
cat /var/log/clamav-bin.log | grep "FOUND"
- 定时扫描(自动执行病毒查杀)
1. 启动clamav服务。
$ sudo /etc/init.d/clamav-daemon start
2. 自动更新病毒库的。
$ sudo /etc/init.d/clamav-freshclam start
我们可以编写计划任务,每天深夜进行病毒扫描,并打印日志,如果扫描到了病毒,就发送邮件给管理员,管理员手动进行一定的病毒分析然后再杀毒。
扫描脚本:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import socket
import os
import re
class ClamAV(object):
## 这里填入自己的远程smtp服务。利用第三方smtp服务进行邮件发送。
def __init__(self):
self.HOST = "smtp.exmail.qq.com"
self.PORT = "465"
self.USER = 'xxx@xxxx.com'
self.PASSWD = 'xxxxxx'
self.TO = "xxxxxxxxx@xx.com"
def clamscan(self):
os.system('freshclam')
os.system('clamscan -ri /tmp > /tmp/clamscan.log')
with open('/tmp/clamscan.log', 'r', encoding='utf-8') as f:
a = f.read()
result = re.findall('Infected files:.*', a)
if result:
number = result[0].split(':')[1].strip()
if number != '0':
self.sendmail('Infected files:%s。有文件感染,请手动检查,查杀病毒。' %number)
else:
self.sendmail('扫描脚本有误,请检查')
def sendmail(self,content):
ipaddr = socket.gethostbyname(socket.gethostname())
smtp = smtplib.SMTP_SSL(self.HOST, self.PORT)
smtp.ehlo()
smtp.login(self.USER, self.PASSWD)
TEXT = """IP: %s\nContent: %s""" %(ipaddr,content)
message = MIMEText(TEXT, 'plain', 'utf-8')
message['From'] = self.USER
message['To'] = self.TO
message['Subject'] = Header('Clamscan Result Warning', 'utf-8')
smtp.sendmail(self.USER, self.TO, message.as_string())
smtp.quit()
clam = ClamAV()
clam.clamscan()
设为定时任务,每天凌晨4点执行扫描。
$ sudo vim /etc/crontab
00 4 * * * root {local-path}/clamsacn.py
- FAQ
- 查杀常见错误:LibClamAV Warning: fmap_readpage: pread fail: asked for 4077 bytes @ offset 19, got 0
LibClamAV Warning: fmap: failed to get MD5
解决:
扫描/sys/会产生大量报错,跳过此文件夹即可
-i 代表只报出infected的文件
-r 代表子文件夹也要扫描,/就是根目录了
$ sudo clamscan --exclude-dir=/sys/ -i -r /
- 更新病毒库超时
解决:
$ sudo chmod +w /etc/clamav/freshclam.conf
$ sudo vim /etc/clamav/freshclam.conf
# 将默认超时30s 改为 120s
ConnectTimeout 120 # 30
ReceiveTimeout 120 # 30
$ sudo chmod -w /etc/clamav/freshclam.conf
# 重新更新
$ sudo freshclam -v
-
initialize: libfreshclam init failed
ERROR: /var/log/clamav/freshclam.log is locked by another process
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).
ERROR: initialize: libfreshclam init failed.
ERROR: Initialization error!解决:
1. 删除日志文件:
rm -f /var/log/clamav/freshclam.log
2. 停止服务
systemctl stop clamav-freshclam
freshclam
systemctl start clamav-freshclam