如何让 `clamdscan` 排除文件夹并且只记录 `--infected`?

如何让 `clamdscan` 排除文件夹并且只记录 `--infected`?

我的服务器是 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

相关内容