笔者最近更新放缓了,原因是各种折腾等保加固,各种应对攻防演练,各种过程记录和复盘(画外音:你单兵作战复个什么)......
言归正传。等保测评要求必须在服务器上部署恶意代码防范措施,简单说就是要安装防病毒软件。
笔者:国际认证信息系统审计师、软考系统分析师
笔者的工作环境一直是Linux和Windows混合的环境,实际主力都在Linux环境,所以首先就要考虑如何在Linux环境下实现恶意代码防范。
如果上网搜索,基本都可以找到关于如何在Linux环境下安装ClamAV这个免费杀毒软件的教程。
安装确实简单,只需要两条命令,首先安装EPEL仓库,然后安装ClamAV即可,以下以Rocky Linux 8为例:
[root@rocky-vm /]# dnf install epel-release
[root@rocky-vm /]# dnf install clamav clamav-update clamd
总共会安装:clamav clamav-data clamav-filesystem clamav-lib libprelude clamav-update clamd等7个软件包。安装软件包后,如果操作系统启用了SELinux,需要设置允许扫描的参数,否则SELinux会拦截ClamAV的执行:
[root@rocky-vm /]# setsebool -P antivirus_can_scan_system on
顺带一提,可以通过getsebool命令查看设置,比如:
[root@rocky-vm /]# getsebool -a | grep scan
antivirus_can_scan_system --> on
然后就可以对指定目录进行扫描,并输出扫描结果:
[root@rocky-vm /]# clamscan /home
LibClamAV Warning: **************************************************
LibClamAV Warning: *** The virus database is older than 7 days! ***
LibClamAV Warning: *** Please update it as soon as possible. ***
LibClamAV Warning: **************************************************
----------- SCAN SUMMARY -----------
Known viruses: 8624196
Engine version: 0.103.7
Scanned directories: 1
Scanned files: 0
Infected files: 0
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 43.047 sec (0 m 43 s)
Start Date: 2022:09:26 23:01:32
End Date: 2022:09:26 23:02:15
从上面的输出会发现需要更新病毒数据库。很显然,ClamAV作为一个传统的基于特征扫描的杀毒软件,需要更新病毒数据库才能应对新出现的病毒。该命令是freshclam:
[root@rocky-vm /]# freshclam --show-progress
ClamAV update process started at Mon Sep 26 23:38:08 2022
daily database available for update (local version: 26614, remote version: 26670)
Current database is 56 versions behind.
Downloading database patch # 26615...
Time: 2.8s, ETA: 0.0s [========================>] 26.34KiB/26.34KiB
Downloading database patch # 26616...
Update process terminated [==============> ] 20.93KiB/34.53KiB
这也太慢了,毅然一个^C停掉。这个更新操作,显然不应该靠手工去进行。因此,我们设置一个定时更新任务,在/etc/cron.d下面创建定时每天早上4点执行的任务项目clamav-update:
[root@rocky-vm /]# cat /etc/cron.d/clamav-update
# Run the clamav daily update job
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
00 04 * * * root /usr/bin/freshclam > /dev/null
不过,在实践中发现,由于ClamAV的特征库升级服务器实在是慢,升级进程还会在后台挂起,进而导致新一天的定时升级任务无法正常启动,特征库升级持续失败。因此,在定时更新的任务项目运行之前,还要先杀掉可能已经存在的升级进程,于是在/etc/cron.d下面创建定时每天早上3点55分执行的任务项目clamav-kill:
[root@rocky-vm /]# cat /etc/cron.d/clamav-kill
# KILL the freshclam program
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
55 03 * * * root /opt/clamav-kill.sh
然后创建杀升级进程的脚本/opt/clamav-kill.sh:
[root@rocky-vm /]# cat /opt/clamav-kill.sh
#!/bin/sh
/bin/ps ax | /bin/grep freshclam | /bin/grep -v grep | /bin/awk '{print $1}' | /bin/xargs /bin/kill -9
注意要设置运行属性:
[root@rocky-vm /]# chmod u+x /opt/clamav-kill.sh
3点55分杀掉挂起的更新进程,4点开始新的一次更新,就这样。
回到扫描杀毒这件事本身。和特征库升级一样的是,仅靠手工运行扫描杀毒是没有意义的。那么,如果要相对有效地发挥ClamAV的作用,那就要设置它每天定时进行一次全盘扫描。
于是,我们需要设置定时任务,在/etc/cron.d目录中加入定时任务项目clamav-dailyscan,定义每日的凌晨2点进行扫描,文件内容如下:
[root@rocky-vm /]# cat /etc/cron.d/clamav-dailyscan
# Run the clamav daily scan jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
00 02 * * * root /opt/dailyscan.sh
预估2个小时内能扫描完指定的文件夹,4点开始的特征库更新任务不会对扫描产生影响。
编写扫描脚本,这个脚本会把扫描发现有问题的文件情况记录到日志,并通过邮件发送给管理员ROOT用户方便查阅。注意脚本中的指定扫描位置参数定义了 /home /var /opt /tmp 四个笔者认为会比较频繁被修改的目录或者是外来程序、文件会存放的目录,如有需要也可以自行修改。脚本存放在/opt目录就可以了:
[root@rocky-vm /]# cat /opt/clamav-dailyscan.sh
#!/bin/bash
CLAMSCANTMP=`mktemp`
/usr/bin/clamscan --infected -r -l /var/log/clamav/clamscan.log /home /var /opt /tmp>$CLAMSCANTMP
[ ! -z "$(/usr/bin/grep FOUND $CLAMSCANTMP)" ] && /usr/bin/grep FOUND $CLAMSCANTMP | /usr/bin/mail -s "Virus Found !" root&&
/usr/bin/rm -f $CLAMSCANTMP
也是不忘记设置运行属性:
[root@rocky-vm /]# chmod a+x /opt/clamav-dailyscan.sh
这样就实现了每天定时扫描了。
ClamAV也提供了后台扫描功能,可以通过systemctl启用clamd@scan服务,并以clamdscan程序去调用运行查杀任务。但该程序作为守护进程运行的目的只是可以随时调用进行查杀,节省启动加载特征库的时间而已,并不是实时对系统的读写进行监控检查,对于专用于中间件或数据库运行的Linux服务器而言并无启动这个服务的必要。需要时可通过clamonacc命令实现。
最后小结一下,我们总共创建了三个定时任务项目:
[root@rocky-vm /]# ll /etc/cron.d/clam*
总用量 20
-rw-r--r--. 1 root root 142 9月 26 23:46 clamav-dailyscan
-rw-r--r--. 1 root root 130 9月 27 00:41 clamav-kill
-rw-r--r--. 1 root root 146 9月 27 00:40 clamav-update
两个脚本:
[root@rocky-vm /]# ll /opt/clam*
总用量 8
-rwxr-xr-x. 1 root root 286 9月 27 00:44 clamav-dailyscan.sh
-rwxr--r--. 1 root root 115 9月 27 00:42 clamav-kill.sh
本站微信订阅号:
本页网址二维码: