我的服务器是 centos 7.4,带有 clamav 0.101.1-1.el7。
当我通过终端运行时clamscan -r --infected --exclude-dir="^/sys" /
,我总是等待 6 个多小时才能获得输出。
如果我关闭终端,clamscan
就会停止。
然后我想clamdscan
在后台使用扫描。
我的问题是:
1.如何--exclude-dir="^/sys" /
使用clamdscan
?
2.如何clamdscan
只记录--infected
?
答案1
clamdscan
通过命令行可用的选项并不多,因为clamscan
clamdscan
它的大部分选项都是从配置文件中读取的。/etc/clamav/clamd.conf
您可以在文件中添加多个ExcludePath
选项/etc/clamav/clamd.conf
。这些选项在 RegEx 中:
ExcludePath ^/dev/
ExcludePath ^/proc/
ExcludePath ^/sys/
然后你可以使用以下命令运行它:
clamdscan --multiscan --fdpass --quiet /
--multiscan
由于使用多个线程,因此将加快处理速度。
--fdpass
将允许您以 clamav-daemon.service 运行所用的 clamd 用户身份扫描文件。
--quiet
应抑制除受感染文件之外的所有输出。至少在我的系统上它似乎是这样做的,但文档中并没有这样描述。
如果您想保存到文件,您可以重定向输出clamdscan <options> > /save/file.txt
或者使用该--log=FILE
选项将其保存到文件。
把命令放入 cron 作业中,就大功告成了。
如果你正在编写脚本,我建议检查退出代码clamdscan
,然后让脚本在检测到病毒时给你发送电子邮件:
0:未发现病毒。1
:发现病毒。2
:发生错误。
clamdscan
文档:https://linux.die.net/man/1/clamdscan
clamd.conf
文档:https://linux.die.net/man/5/clamd.conf
答案2
您可以使用此命令创建一个 cron.daily 脚本,该脚本仅当感染率>0 时才会发送电子邮件。
echo -e '#!/bin/bash \nclamlog=/var/log/clamav/clamav.log; rm -f $clamlog; touch $clamlog \nnice -n5 clamscan -ri / --exclude-dir=/proc --exclude-dir=/sys --exclude-dir=/dev --exclude-dir=/media --exclude-dir=/mnt -l clamav.log \nMALWARE=$(tail "clamav.log"|grep Infected|cut -d" " -f3) && if [ "$MALWARE" -ne "0" ]; then mail -s "Malware Found" $EMAIL <<< $(cat clamav.log); fi && rm -f clamav.log' > "/etc/cron.daily/clamscan_daily" && chmod +x /etc/cron.daily/clamscan_daily
echo -e 'service clamav-freshclam stop && freshclam && service clamav-freshclam start' >> "/etc/cron.daily/clamscan_daily"
#!/bin/bash
clamlog=/var/log/clamav/clamav.log; rm -f $clamlog; touch $clamlog
nice -n5 clamscan -ri / --excluded-dir=/proc --exclude-dir=/sys --exclude-dir=/dev
--exclude-dir=/media --exclude-dir=/mnt -l $clamlog
MALWARE=$(tail "$clamlog"|grep Infected|cut -d" " -f3) && if [ "$MALWARE" -ne "0" ];
then mail -s "Malware Found $(hostname -i; uname -a)" $(cat ~/.env/EMAIL) <<<
$(cat $clamlog); fi
答案3
用这个
clamscan --recursive --infected --exclude=/proc --exclude=/sys --exclude=/dev /path