quinta-feira, 24 de setembro de 2026

ClamAV no Linux



   Leia todo o artigo antes de sair executando comandos e siga os comandos na sequência apresentada no artigo, a não ser que você saiba o que está fazendo.

   O presente artigo, além de instalar e configurar o ClamAV, apresenta fins didáticos para aprendizagem.

   É um artigo explicativo para fins de entendimento do ClamAV, sendo que foi testado várias vezes para o que se pretende no artigo.

   Talvez alguém dirá: "para quê um anti-vírus no Linux?"; porém, existe vírus para Linux, mas como o Linux não é amplamente utilizado como desktop ninguém faz vírus para Linux, além disso, agora com o advento de IA faz-se necessário alguma proteção extra no desktop e, principalmente, em servidores.


   ClamAV é um kit de ferramentas antivírus de código aberto (GPLv2) projetado especialmente para verificação de e-mail em servidores de e-mail. Ele fornece vários utilitários incluindo um daemon multiencadeado flexível e escalável, um scanner de linha de comando e uma ferramenta avançada para atualizações automáticas de banco de dados. O núcleo do pacote é um mecanismo antivírus disponível na forma de biblioteca compartilhada.

   O ClamAV® é um poderoso mecanismo antivírus de código aberto para detecção de trojans, vírus, malware e outras ameaças maliciosas. O ClamAV não possui um modo de "verificação rápida". O ClamAV é um conjunto de ferramentas de detecção de malware, não é um antivírus tradicional nem um pacote de segurança para endpoints.

   Cabe a você decidir o que verificar. Uma verificação completa do sistema levará muito tempo com o ClamAV ou com qualquer outro software antivírus.

   Clamscan, ClamOnAcc e Clamdscan incluem as opções "--remove" para excluir qualquer arquivo que gere alertas durante uma verificação. Isso geralmente é uma péssima ideia, a menos que você esteja monitorando um diretório de uploads/downloads. Falsos positivos acontecem! Você não quer que o arquivo errado seja excluído acidentalmente. Em vez disso, considere usar o parâmetro "--move" ou talvez apenas "--copy" e configure um script com o recurso "VirusEvent" para notificá-lo quando algo for detectado.

   O ClamAV inclui uma ferramenta de filtragem de e-mails chamada clamav-milter. Essa ferramenta interage diretamente com o Clamd, e, portanto, requer uma instância Clamd em funcionamento para ser executada. No entanto, os arquivos de configuração e de log do clamav-milter são separados dos do Clamd.

AVISO
   O ClamAV vem minimamente configurado, você deve configurá-lo manualmente de acordo com o teu cenário e as tuas necessidades. Caso você seja daquelas almas sebosas e fedorentas que gostam de dizer: "capaz que vou passar todo esse trabalho para configurar um programa", pare de ler aqui esse artigo e vá bater a cabeça na parede ou vá enfiar a cara no ventilador repetidas vezes ou vá fazer sei lá o que você gosta de fazer, mas, claramente, teu lugar não é aqui.

   No final tem um resumo com os comandos e pouca explicação.

   O ClamAV é fornecido pela Cisco Systems, Inc.

Documentação:


   A distribuição utilizada de exemplo foi o Void, porém, você pode adaptar para a tua distribuição sem grandes mudanças.

   O ClamAV está presente nos repositórios de quase todas as distribuições.

   Vários comandos utilizados são universais para quase todas as distribuições.


Instalação para Fedora, AlmaLinux, openSUSE, etc:


Instalação para Debian, Ubuntu, Mint, etc:


Para instalar a partir dos fontes:



Verificando a configuração do Kernel

Verificando a configuração do Kernel para a presença do fanotify:

cat /boot/config-`uname -r` | grep FANOTIFY
Caso tiver habilitado no Kernel a saída será essa:
CONFIG_FANOTIFY=y
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y

E se isso aparecer:
CONFIG_FANOTIFY=y
# CONFIG_FANOTIFY_ACCESS_PERMISSIONS is not set

então está habilitado, mas a verificação de acesso será restrita ao modo somente notificação, ou seja, vai avisar que tem vírus, mas fará absolutamente nada.

   Caso aparecer CONFIG_FANOTIFY_ACCESS_PERMISSIONS is not set o fanotify não está habilitado no seu Kernel então você deverá recompilar o Kernel para habilitá-lo ou instalar um Kernel mais moderno, mas não será mostrado aqui pois demanda tempo e não é o escopo do artigo.

   Dificilmente dará CONFIG_FANOTIFY_ACCESS_PERMISSIONS is not set porque CONFIG_FANOTIFY=y passou a vir habilitado por padrão na arquitetura x86 na versão Kernel Linux 2.6.37 e CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y passou a vir ativada por padrão no defconfig genérico do x86 na versão Kernel Linux 3.14.

   Não será modificada a configuração do arquivo clamav-milter.conf, deixaremos com as configurações padrões. O ClamAV-Milter é o aplicativo do ClamAV que fornece filtragem de e-mails, caso a máquina Linux não for servidor de e-mails não se faz necessário. Para Desktop não precisa instalar, mas vai do seu gosto.


Instalação


Atualizando e instalando (adapte para a tua distribuição):
sudo xbps-install -Syu
sudo xbps-install clamav
Name Action Version New version Download size
clamav install - 1.5.3_1 40MB
Size to download: 40MB
Size required on disk: 182MB
Space available on disk: 5405MB

Do you want to continue? [Y/n] Y

[*] Downloading packages
clamav-1.5.3_1.x86_64.xbps.sig2: 512B [avg rate: 14MB/s]
clamav-1.5.3_1.x86_64.xbps: 40MB [avg rate: 9318KB/s]
clamav-1.5.3_1: verifying RSA signature...

[*] Collecting package files
clamav-1.5.3_1: collecting files...

[*] Unpacking packages
clamav-1.5.3_1: unpacking ...

[*] Configuring unpacked packages
clamav-1.5.3_1: configuring ...
Created _clamav system group.
Created _clamav system user.
clamav-1.5.3_1: installed successfully.

1 downloaded, 1 installed, 0 updated, 1 configured, 0 removed, 0 on hold.


Os arquivos serão criados no diretório /etc:
/etc/freshclam.conf
/etc/clamd.conf
/etc/clamav-milter.conf.sample
Obs.: Em algumas distribuições ficarão no caminho /etc/clamav, verifique o caminho certo.

Sugestão de pesquisa:
sudo find / | grep freshclam.conf
Caso já tenha os arquivos de uma instalação anterior e não quis removê-los para resguardar as configurações, a instalação preserva os arquivos e cria novos com a seguinte nomenclatura:
/etc/freshclam.conf.new-1.5.3_1
/etc/clamd.conf.new-1.5.3_1
/etc/clamav-milter.conf.sample
Caso queira, pode removê-los.

Verifique se o usuário e o grupo do ClamAV foram criados:

cut -d: -f1 /etc/passwd
cut -d: -f1 /etc/group
   Caso não tenha sido criado na tua distribuição, crie o usuário (no Void, ao instalar o ClamAV, o usuário e o grupo _clamav são criados automaticamente, então pode pular esses dois comandos):
sudo groupadd _clamav
sudo useradd -g _clamav -s /bin/false -c "Clam Antivirus" _clamav
Se o seu sistema operacional não tiver os utilitários groupadd e useradd, instale-os.

Vamos remover a extensão do arquivo:
cd /etc
sudo mv clamav-milter.conf.sample clamav-milter.conf
cd
Caso precisar, aqui tem o freshclam.conf oficial:

https://github.com/Cisco-Talos/clamav/blob/main/etc/freshclam.conf.sample


   Criando diretório para o soquete local e permissionando (verifique o nome correto de usuário):
sudo mkdir -p /var/run/clamav
Por padronização é sem o sublinhado em /var/run/clamav.
sudo chown -R _clamav:_clamav /var/run/clamav
sudo chmod -R 750 /var/run/clamav


Arquivos de Log


Para o Freshclam:
sudo touch /var/log/freshclam.log
sudo chown _clamav:_clamav /var/log/freshclam.log
sudo chmod 640 /var/log/freshclam.log

Para o Clamd:
sudo touch /var/log/clamd.log
sudo chown _clamav:_clamav /var/log/clamd.log
sudo chmod 640 /var/log/clamd.log
Colocando o diretório database com o dono correto (verifique se é _clamav ou clamav):
sudo chown -R _clamav:_clamav /var/lib/_clamav


   O ClamAV Daemon, ou Clamd, é um daemon multithread que utiliza a libclamav para verificar arquivos em busca de vírus. O ClamAV fornece diversas ferramentas que interagem com esse daemon.

   São elas:
  1. Clamdscan - um cliente de digitalização simples;
  2. Clamonacc - fornece varredura em tempo real (também conhecida como proteção em tempo real por meio de uma instância Clamd);
  3. Clamav-milter - um plugin de filtragem de e-mails para o software de servidor de processamento de e-mails Sendmail, que permite analisar e-mails;
  4. Clamdtop - uma interface de monitoramento de recursos para o Clamd.

   O ClamAV também fornece uma ferramenta de linha de comando para tarefas simples de varredura com a libclamav, chamada Clamscan. Ao contrário do daemon Clamd, o Clamscan não é um processo persistente e é mais adequado para casos de uso em que uma varredura única com configuração mínima é necessária.

   As ferramentas mais complexas fornecidas pelo ClamAV exigem algum grau de configuração. O ClamAV fornece três arquivos com configurações de exemplo:

🔵clamd.conf: para configurar o comportamento do ClamAV Daemon Clamd e ferramentas associadas;
🟢freshclam.conf: para configurar o comportamento da ferramenta de atualização do banco de dados de assinaturas;
🟡clamav-milter.conf: para configurar o comportamento do ClamAV de filtragem de e-mails para servidor de e-mails, que interage diretamente com o Clamd.

   Além disso, uma ferramenta chamada clamconf permite que os usuários verifiquem as configurações usadas por cada uma das outras ferramentas, obtendo informações dos arquivos de configuração listados acima, juntamente com outras informações relevantes.
clamconf
Clamconf mostra todas as configurações:
clamconf --help
man clamconf
man clamd
man clamonacc
man clamscan
man clamdscan
   Dependendo do método de instalação e do sistema operacional, algumas opções de configuração podem já ter sido pré-configuradas. No Void os arquivos de configurações vêm todos comentados, à exceção da linha User no arquivo clamd.conf.

   No entanto, dependendo da distribuição, é provável que você precise criar novos arquivos de configurações ou modificar os existentes com configurações personalizadas que façam mais sentido para o seu caso de uso.

   A título de curiosidade, uma instalação a partir do código-fonte exigirá que você crie um arquivo freshclam.conf antes de usar o Freshclam, crie um arquivo "clamd.conf" antes de usar o Clamd e um arquivo "clamav-milter.conf" antes de usar o ClamAV-Milter.

   Os arquivos freshclam.conf, clamd.conf e o clamav-milter.conf são os arquivos principais de configurações do ClamAV antivírus.

   O parâmetro "DatabaseDirectory /var/lib/_clamav" deve ser o mesmo nos arquivos freshclam.conf e clamd.conf. Caso alterar em um, deve, obrigatoriamente, alterar no outro. Aconselho a deixar no padrão.

   Em algumas distribuições é /var/lib/clamav, sem o sublinhado.


AVISO
   "Os espelhos e links se reservam o direito de bloquear seu IP caso você abusar dos downloads e atualizações muitas vezes por hora ou abusar do servidor de qualquer maneira."

   Faça atualizações dos bancos de dados e assinaturas com sensatez.

   A ferramenta Freshclam é a usada para baixar e atualizar os bancos de dados oficiais de assinaturas de vírus do ClamAV.

   Obs.: Em sistemas onde tem o SELinux ativado, provavelmente você precisará definir o contexto SELinux correto, caso contrário, o serviço Freshclam não conseguirá acessar o arquivo.

   A seguir deixo os conteúdos dos arquivos freshclam.conf e clamd.conf, ambos em estado funcional e com espelhos (mirrors) para bancos de dados de vírus e pragas em geral.

   Freshclam é a ferramenta de atualização automática do banco de dados do Clam AntiVirus.
   Ela pode ser configurada para funcionar em dois modos:
    • interativo - sob demanda a partir da linha de comando;
    • daemon - silenciosamente em segundo plano.
Aqui faremos interativo através do Cron.


FRESHCLAM.CONF

Uso o vim, use teu editor preferido.
sudo vim /etc/freshclam.conf
Comente ou remova a linha ~8:
# Comment or remove the line below.
# Example ... <<< Linha 8

   Vá descomentando e configurando os parâmetros abaixo (ou deixe tudo comentado e acrescente no final).

Obs.: Na linha 92 comente "DatabaseMirror database.clamav.net", pois já está abaixo.
DatabaseDirectory /var/lib/_clamavUpdateLogFile /var/log/freshclam.logLogFileMaxSize 0LogRotate noLogTime yesLogVerbose yesDatabaseOwner _clamavDNSDatabaseInfo current.cvd.clamav.netMaxAttempts 5NotifyClamd /etc/clamd.confReceiveTimeout 300
# Check for new database 2 times a dayChecks 2DatabaseMirror database.clamav.net#DatabaseMirror db.br.clamav.netDatabaseMirror db.ar.clamav.netDatabaseMirror db.at.clamav.netDatabaseMirror db.au.clamav.netDatabaseMirror db.be.clamav.netDatabaseMirror db.bg.clamav.netDatabaseMirror db.ca.clamav.netDatabaseMirror db.ch.clamav.netDatabaseMirror db.cn.clamav.netDatabaseMirror db.cz.clamav.netDatabaseMirror db.de.clamav.netDatabaseMirror db.dk.clamav.netDatabaseMirror db.ec.clamav.netDatabaseMirror db.ee.clamav.netDatabaseMirror db.es.clamav.netDatabaseMirror db.fr.clamav.netDatabaseMirror db.gr.clamav.netDatabaseMirror db.hk.clamav.netDatabaseMirror db.hu.clamav.netDatabaseMirror db.id.clamav.netDatabaseMirror db.ie.clamav.netDatabaseMirror db.it.clamav.netDatabaseMirror db.jp.clamav.netDatabaseMirror db.kr.clamav.netDatabaseMirror db.lt.clamav.netDatabaseMirror db.mx.clamav.netDatabaseMirror db.nl.clamav.netDatabaseMirror db.pl.clamav.netDatabaseMirror db.pt.clamav.netDatabaseMirror db.ro.clamav.netDatabaseMirror db.ru.clamav.netDatabaseMirror db.se.clamav.netDatabaseMirror db.sg.clamav.netDatabaseMirror db.sk.clamav.netDatabaseMirror db.tr.clamav.netDatabaseMirror db.tw.clamav.netDatabaseMirror db.ua.clamav.netDatabaseMirror db.uk.clamav.netDatabaseMirror db.us.clamav.net## ArgentinaDatabaseMirror clamav.md5.com.ar## AustraliaDatabaseMirror clamav.island.net.auDatabaseMirror clamav.mirror.pacific.net.auDatabaseMirror clamavdb.planetmirror.com## AustriaDatabaseMirror clamav.inode.atDatabaseMirror xarch.clamav.net## BelgiumDatabaseMirror clamav.edpnet.net## BulgariaDatabaseMirror clamav.host.bgDatabaseMirror clamav.paralax.org## CanadaDatabaseMirror clamav.mirror.rafal.caDatabaseMirror clamav.gossamer-threads.com## ChinaDatabaseMirror clamav.ialfa.net## Czech RrepublicDatabaseMirror clamav.iol.czDatabaseMirror clamav.skynet.czDatabaseMirror clamav.mirror.vutbr.cz## DenmarkDatabaseMirror clamav.dif.dkDatabaseMirror clamav.mirrors.webpartner.dk## EcuadorDatabaseMirror clamav.ecualinux.com## EstoniaDatabaseMirror clamav.infonet.ee## FranceDatabaseMirror clamav.easynet.frDatabaseMirror clamav.inet6.frDatabaseMirror clamav.univ-nantes.frDatabaseMirror clamav.ovh.netDatabaseMirror clamav.mirror.waycom.net## GermanyDatabaseMirror clamav.mirror.fizzelpark.comDatabaseMirror clamav.informatik.fh-furtwangen.deDatabaseMirror clamav.lug-norderstedt.deDatabaseMirror clamav.mcs.deDatabaseMirror clamav.mirror.myebs.deDatabaseMirror clamav.pcn.deDatabaseMirror clamav.power-netz.deDatabaseMirror clamav.savework.deDatabaseMirror fuxhausen.tiscali.deDatabaseMirror clamav.ftpproxy.orgDatabaseMirror clamav.kgt.org## GreeceDatabaseMirror clamav.forthnet.grDatabaseMirror clamav.uoc.gr## Hong KongDatabaseMirror clamav.meiwing.comDatabaseMirror clamavdb.hostlink.com.hkDatabaseMirror clamav.cpss.edu.hk## HungaryDatabaseMirror clamav.crysys.huDatabaseMirror clamav.dc.huDatabaseMirror clamav.fisher.huDatabaseMirror clamavdb.ikk.sztaki.hu## IndonesiaDatabaseMirror clamav.cbn.net.idDatabaseMirror db.clamav.or.id## IrelandDatabaseMirror clamavdb.heanet.ie## ItalyDatabaseMirror clamav.oltrelinux.comDatabaseMirror clamav.mirror.garr.itDatabaseMirror clamav.linux.itDatabaseMirror idea.sec.dico.unimi.it## JapanDatabaseMirror clamav.nara.wide.ad.jpDatabaseMirror clamav-mirror.wiseknot.co.jpDatabaseMirror clamavdb.ml-club.jpDatabaseMirror clamav.mtcnet.jpDatabaseMirror clamav.begi.netDatabaseMirror clamavdb.osj.netDatabaseMirror clamav.s-lines.netDatabaseMirror clamav.yukiguni.netDatabaseMirror clamavdb.mithril-linux.org#Republic of KoreaDatabaseMirror clamav.hanbiro.com## LithuaniaDatabaseMirror clamav.vtu.lt## MexicoDatabaseMirror clamav.mpsnet.com.mx## NetherlandsDatabaseMirror clamav.essentkabel.comDatabaseMirror clamav.fx-services.comDatabaseMirror clamav.prolocation.netDatabaseMirror clamav.mirror.transip.nlDatabaseMirror clamav.unnet.nlDatabaseMirror clamav.xs4all.nlDatabaseMirror clamav.packetstorm.nu## PolandDatabaseMirror database.clamav.ps.pl## PortugalDatabaseMirror clamav.linux.pt#v# RomaniaDatabaseMirror clamav.iasi.roedu.net## Russian FederationDatabaseMirror clamav.citrin.ruDatabaseMirror clamav.eastweb.ruDatabaseMirror clamav.unix.su## SingaporeDatabaseMirror clamav.acnova.com## SlovakiaDatabaseMirror clamav.hq.alert.sk## SpainDatabaseMirror clamav.talika.eii.us.es## SwedenDatabaseMirror clamav.kratern.seDatabaseMirror clamav.df.lth.seDatabaseMirror clamav.mainloop.se## SwitzerlandDatabaseMirror switch.clamav.net## TaiwanDatabaseMirror clamav.cs.pu.edu.twDatabaseMirror clamav.stu.edu.tw## TurkeyDatabaseMirror clamav.enderunix.orgDatabaseMirror clamav.ubak.gov.tr## UkraineDatabaseMirror clamav.intercom.net.ua## United KingdomDatabaseMirror clamav.mirror.camelnetwork.comDatabaseMirror clamav.dbplc.comDatabaseMirror clamav.spod.orgDatabaseMirror clamav.public-internet.co.uk## United StatesDatabaseMirror clamav.catt.comDatabaseMirror clamav.clearfield.comDatabaseMirror clamav.devolution.comDatabaseMirror clamav.edebris.comDatabaseMirror clamav.edgescape.comDatabaseMirror clamav.infotex.comDatabaseMirror clamav.irontec.comDatabaseMirror clamav.liquidweb.comDatabaseMirror clamav.pathlink.comDatabaseMirror avmirror2.prod.rxgsys.comDatabaseMirror clamav.theshell.comDatabaseMirror clamav-du.viaverio.comDatabaseMirror clamav-sj.viaverio.comDatabaseMirror clamav.walkertek.comDatabaseMirror clamav.westlinks.comDatabaseMirror clamav.xyxx.comDatabaseMirror clamav.pinna.cxDatabaseMirror clamav.unet.brandeis.eduDatabaseMirror clamav.bridgeband.netDatabaseMirror clamav.inoc.netDatabaseMirror clamav-000.mirrors.nks.netDatabaseMirror clamav-001.mirrors.nks.netDatabaseMirror clamav-002.mirrors.nks.netDatabaseMirror clamav-003.mirrors.nks.netDatabaseMirror clamav-004.mirrors.nks.netDatabaseMirror clamav-005.mirrors.nks.netDatabaseMirror clamav.oc1.mirrors.redwire.netDatabaseMirror clamav.securityminded.netDatabaseMirror clamav.securitywonks.netDatabaseMirror clamav.sonic.net## MalwareDatabaseCustomURL https://cdn.malware.expert/malware.expert.ndbDatabaseCustomURL https://cdn.malware.expert/malware.expert.hdbDatabaseCustomURL https://cdn.malware.expert/malware.expert.ldbDatabaseCustomURL https://cdn.malware.expert/malware.expert.fp## Sanesecurity: malware, spam, phishing, lottery, etcDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/sigwhitelist.ign2DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/sanesecurity.ftmDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/MiscreantPunch099-INFO-Low.ldbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/MiscreantPunch099-Low.ldbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/Sanesecurity_BlackEnergy.yaraDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/Sanesecurity_sigtest.yaraDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/Sanesecurity_spam.yaraDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/badmacro.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/blurl.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/hackingteam.hsbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/junk.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/jurlbl.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/jurlbla.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/lott.ndb## BofhlandDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/bofhland_cracked_URL.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/bofhland_malware_URL.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/bofhland_malware_attach.hdbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/bofhland_phishing_URL.ndb## FoxholeDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_all.cdbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_all.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_filename.cdbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_generic.cdbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_js.cdbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_js.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_links.ldbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_mail.cdb## Malware.expertDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/malware.expert.fpDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/malware.expert.hdbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/malware.expert.ldbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/malware.expert.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/malwarehash.hsbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/phish.ndb## PorcupineDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/phishtank.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/porcupine.hsbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/porcupine.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/rogue.hdb## SpamDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/scam.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/scamnailer.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/shelter.ldbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/spam.ldbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/spamattach.hdbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/spamimg.hdbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/spear.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/spearl.ndb## WinnowDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow.attachments.hdbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow.complex.patterns.ldbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_bad_cw.hdbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_extended_malware.hdbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_extended_malware_links.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_malware.hdbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_malware_links.ndb## DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_phish_complete.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_phish_complete_url.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_spam_complete.ndb## MaldetDatabaseCustomURL https://www.rfxn.com/downloads/rfxn.ndbDatabaseCustomURL https://www.rfxn.com/downloads/rfxn.hdb## Phishing, scams and other junk, hashes of spam documents and imagesDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/crdfam.clamav.hdbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/doppelstern-phishtank.ndbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/doppelstern.hdbDatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/doppelstern.ndb
Salve e saia.


CLAMD.CONF
sudo vim /etc/clamd.conf
Comente ou remova a linha ~8:
# Comment or remove the line below.
# Example ... <<< Linha 8

   Vá descomentando e configurando os parâmetros abaixo (ou deixe tudo comentado e acrescente no final).

   Obs.: Tenha o cuidado de verificar se o usuário do ClamAV na tua distribuição é clamav ou _clamav e mude abaixo na linha User. E no lugar de "seu_usuario" coloque o nome do teu usuário (OnAccessIncludePath /home/seu_usuario/Downloads).

Verifique a linha 269 (User _clamav) e comente ela se for acrescentar tudo abaixo.
#LogFile /var/log/clamd.logLogFileMaxSize 0LogTime yesLogRotate noExtendedDetectionInfo yesDatabaseDirectory /var/lib/_clamavLocalSocket /var/run/clamav/clamd.ctlLocalSocketGroup _clamavLocalSocketMode 660MaxThreads 15ReadTimeout 180SelfCheck 3600 # 60 MinutosVirusEvent /usr/local/bin/notificar-virus.shUser _clamavExitOnOOM yesMaxRecursion 27AlertExceedsMax yes ## On-access Scan Settings## Escaneia somente arquivos ate 100 megas.# Ajuste para tuas necessidades.OnAccessMaxFileSize 100MOnAccessDisableDDD yes##OnAccessIncludePath /home#OnAccessIncludePath /home/usuarioOnAccessIncludePath /home/usuario/Downloads#OnAccessExcludePath /sysOnAccessExcludePath /devOnAccessExcludePath /procOnAccessExcludePath /runOnAccessExcludePath /var/runOnAccessExcludePath /etc/svOnAccessExcludePath /etc/runit#OnAccessPrevention yes#OnAccessExcludeUname _clamav
Salve e saia.

   Obs.: Caso decida habilitar o Clamonacc depois, aconselho a não habilitar #OnAccessIncludePath /home e #OnAccessIncludePath /home/usuario porque pode acontecer de dar umas travadas quando for abrir essas pastas graficamente (clicando com o mouse) e pode acontecer de abrir a pasta de usuário e sumirem os ícones de pastas e de arquivos dando a impressão de que tudo foi apagado. Caso isso acontecer basta desligar o Clamonacc (sudo sv stop clamonacc). O Clamonacc (Proteção em Tempo Real) exerce um poder muito grande sobre os diretórios e arquivos configurados.

   O inotify tem um número limitado de pontos de controle disponíveis para uso por um processo a qualquer momento. Para aumentar o número de inotifywatch-points disponíveis para uso pelo ClamAV, execute:

Para testar:
sudo echo 104857600 | sudo tee -a /proc/sys/fs/inotify/max_user_watches
Saída: 104857600


Permanente:
sudo echo 'fs.inotify.max_user_watches=104857600' | sudo tee /etc/sysctl.d/99-inotify.conf
Saída: fs.inotify.max_user_watches=104857600


AVISO
   O número ali são 100M convertidos em bytes. Esse número deve ser o mesmo do parâmetro OnAccessMaxFileSize. Caso você mudar o número do parâmetro OnAccessMaxFileSize deve executar esse comando novamente com o novo número.


   O ClamAV não tem um arquivo de quarentena por padrão, então vamos criá-lo e configurá-lo.

Criando diretório e arquivo e permissionando:
sudo mkdir -p /var/opt/clamav-quarentena
sudo touch /var/opt/clamav-quarentena/quarentena.log
sudo chown -R _clamav:_clamav /var/opt/clamav-quarentena
sudo chmod 700 /var/opt/clamav-quarentena
sudo chmod 664 /var/opt/clamav-quarentena/quarentena.log

Desativando a Execução de Arquivos (Montagem Segura)

   A maior ameaça de uma quarentena é um usuário ou script executar acidentalmente um binário infectado que está lá dentro.

   A forma mais robusta de impedir isso no Linux é isolar o diretório em uma montagem separada (ou usando um loop device) com a flag noexec.

Vamos aplicar um "bind mount" no /etc/fstab.
sudo vim /etc/fstab
      Adicione a seguinte linha no final para aplicar restrições estritas de segurança (noexec, nosuid e nodev impedem a execução de programas, binários SUID e criação de dispositivos):
...
/var/opt/clamav-quarentena /var/opt/clamav-quarentena none bind,noexec,nosuid,nodev 0 0

Montando imediatamente:
sudo mount -a
   Criando um script de limpeza que preserva os arquivos quarentena.log e os logrotate e limpa os demais:
sudo vim /usr/local/bin/limpar-quarentena.sh
Coloque dentro:
#!/bin/sh# Script para remover arquivos da quarentena do ClamAV com mais de 30 diasPASTA_GERAL="/var/opt/clamav-quarentena"DIAS_LIMITE=30 # Verifica se o diretório existe antes de tentar limparif [ -d "$PASTA_GERAL" ]; then# Procura por arquivos comuns (-type f) modificados há mais de 30 dias (-mtime +30) e os remove, EXCETO o log, os compactados (.gz) e arquivos ocultos do script    find "$PASTA_GERAL" -type f -mtime +$DIAS_LIMITE \        ! -name "quarentena.log" \        ! -name "quarentena.log.*" \        ! -name ".*" \        -deletefi
Salve e saia.

Permissionando:
sudo chmod +x /usr/local/bin/limpar-quarentena.sh && sudo chown _clamav:_clamav /usr/local/bin/limpar-quarentena.sh

SCRIPT DE MONITORAMENTO E AVISO
sudo vim /usr/local/bin/monitor-quarentena.sh
Coloque dentro (adapte para teu usuário ClamAV):
#!/bin/sh # Configuracoes#PASTA_GERAL="/var/opt/clamav-quarentena"ARQUIVO_ESTADO="$PASTA_GERAL/.ultimo_total"LOG="$PASTA_GERAL/quarentena.log"# EMAIL_DESTINO="seu_email@dominio.com"  #  <- Altere para teu e-mail # Garante que o arquivo de estado existaif [ ! -f "$ARQUIVO_ESTADO" ]; then    runuser -u _clamav -- touch "$ARQUIVO_ESTADO"    echo 0 | runuser -u _clamav -- tee "$ARQUIVO_ESTADO" > /dev/nullfi # Conta quantos arquivos existem atualmente na quarentenatotal_atual=$(find "$PASTA_GERAL" -type f ! -name "quarentena.log" ! -name ".*" | wc -l)total_anterior=$(cat "$ARQUIVO_ESTADO") # Se o numero atual for maior que o anterior, ha novos arquivosif [ "$total_atual" -gt "$total_anterior" ]; then    novos_arquivos=$((total_atual - total_anterior)) # Lista os nomes dos arquivos mais recentes que entraram na quarentena    arquivos_novos=$(find "$PASTA_GERAL" -type f ! -name "quarentena.log" ! -name ".*" -printf "%T@ %f\n" | sort -n | tail -n "$novos_arquivos" | cut -d' ' -f2-) # Monta a estrutura do e-mail com os cabecalhos que o msmtp precisa#    assunto="[ClamAV] ALERTA: Novo(s) malware(s) isolado(s) na quarentena" #   (#   echo "Subject: $assunto"#   echo "To: $EMAIL_DESTINO"#   echo "Content-Type: text/plain; charset=UTF-8"#   echo "" # Linha em branco obrigatoria separando cabecalho do corpo#   echo "Olá,"#   echo ""#   echo "O sistema de monitoramento detectou $novos_arquivos novo(s) arquivo(s) na pasta de quarentena."#   echo ""#   echo "Lista de arquivos detectados:"#   echo "$arquivos_novos"#   echo ""#   echo "Por favor, verifique o servidor."#   echo "Data do evento: $(date '+%d/%m/%Y %H:%M:%S')"#   ) | msmtp -C /etc/msmtprc "$EMAIL_DESTINO" # --- Popup na area de trabalho (Void Linux, sem systemd/loginctl) --- # 1. Descobre o usuario com sessao grafica ativa (registrado no utmp como :0, :1 etc.)    usuario=$(who | awk '/\(:[0-9]+(\.[0-9]+)?\)/ {print $1; exit}')    if [ -n "$usuario" ]; then        display=""        dbus_addr="" # 2. Varre os processos do usuario procurando DISPLAY e DBUS_SESSION_BUS_ADDRESS no environ    for p in /proc/[0-9]*; do        pid=${p#/proc/}        dono=$(stat -c %U "$p" 2>/dev/null)        [ "$dono" != "$usuario" ] && continue         if [ -r "$p/environ" ] && tr '{BARRA}0' '\n' < "$p/environ" 2>/dev/null | grep -q '^DISPLAY='; then            display=$(tr '{BARRA}0' '\n' < "$p/environ" | grep '^DISPLAY=' | head -n1 | cut -d= -f2-)            dbus_addr=$(tr '{BARRA}0' '\n' < "$p/environ" | grep '^DBUS_SESSION_BUS_ADDRESS=' | head -n1 | cut -d= -f2-)            [ -n "$display" ] && [ -n "$dbus_addr" ] && break        fi    done # Fallbacks, caso a varredura nao encontre nada        [ -z "$display" ] && display=":0"        if [ -z "$dbus_addr" ]; then            uid_usuario=$(id -u "$usuario")            socket_dbus=$(find /run/user/"$uid_usuario"/dbus-1 -type s -name 'bus' 2>/dev/null | head -n1)            if [ -n "$socket_dbus" ]; then                dbus_addr="unix:path=$socket_dbus"            fi        fi # Mensagem com Zenity# if [ -n "$dbus_addr" ]; then#       runuser -u "$usuario" -- env DISPLAY="$display" DBUS_SESSION_BUS_ADDRESS="$dbus_addr" \#           zenity --error --title="ClamAV - Quarentena" --width=450 \#           --text="<span foreground='red' size='large'><b>AVISO: ClamAV - Quarentena!</b></span>\n\n$novos_arquivos novo(s) arquivo(s) detectado(s).\nVerifique o e-mail ou o log." \#           2>/dev/null &#  fi # Mensagem com notify-send        if [ -n "$dbus_addr" ]; then            runuser -u "$usuario" -- env DISPLAY="$display" DBUS_SESSION_BUS_ADDRESS="$dbus_addr" \                notify-send -u critical -i /usr/share/icons/icone-alerta.png \                "ClamAV - Quarentena" \                "<b>AVISO: $novos_arquivos novo(s) arquivo(s) detectado(s).\nVerifique e-mail e /var/opt/clamav-quarentena/quarentena.log.</b>" &        fi    fi     mensagem="ALERTA: $novos_arquivos novo(s) arquivo(s) isolado(s):\n$arquivos_novos" # 1. Monta a linha com a data atual    linha_log="$(date '+%Y-%m-%d %H:%M:%S') -> $mensagem" # 2. Grava no arquivo de log com o usuário _clamav e exibe mensagem no terminal# echo "$linha_log" | runuser -u _clamav -- tee -a "$LOG"# Grava no arquivo de log e não exibe mensagem no terminal    echo "$linha_log" | runuser -u _clamav -- sh -c 'cat >> "$1"' _ "$LOG"fi # Atualiza o arquivo de estadoecho "$total_atual" | runuser -u _clamav -- tee "$ARQUIVO_ESTADO" > /dev/null
Salve e saia.

   Este script de avisos é somente um exemplo, cabe a você adaptar para o teu provedor de e-mail e tuas configurações, pois não é o escopo do artigo.

As linhas:

EMAIL_DESTINO

e da linha assunto=

até

) | msmtp

estão comentadas para fins de teste sem precisar configurar envio de e-mail, somente dará o popup de aviso na tela que permanecerá até clicar em cima dele.

Permissionando:
sudo chmod +x /usr/local/bin/monitor-quarentena.sh && sudo chown _clamav:_clamav /usr/local/bin/monitor-quarentena.sh
Vamos testar criando um arquivo "suspeito" dentro do diretório de quarentena:
sudo touch /var/opt/clamav-quarentena/teste.txt
Resete o arquivo de estado para ZERO para forçar o alerta:
sudo echo 0 | sudo runuser -u _clamav -- tee /var/opt/clamav-quarentena/.ultimo_total
Executando o script manualmente:
sudo /usr/local/bin/monitor-quarentena.sh
E vemos a mensagem de alerta com o Zenity.


Vemos a mensagem de alerta com o Notify-send e XFCE.


Mensagem de alerta com Cinnamon e Notify-send.


   Eu prefero o Notify-send porque ele fica na tela até clicar em cima do aviso e não minimiza se clicar fora dele, como o Zenity.

Caso quiser o Zenity, instale:
sudo xbps-install zenity
Verifique também:
sudo cat /var/opt/clamav-quarentena/quarentena.log
Saída:2026-09-18 11:14:53 -> ALERTA: 1 novo(s) arquivo(s) isolado(s): teste.txt

Deletando o arquivo:
sudo rm /var/opt/clamav-quarentena/teste.txt
Vendo se tudo continuou igual:
sudo ls -la /var/opt/clamav-quarentena
total 4
drwx------ 1 _clamav _clamav 54 set 23 09:05 .
drwxr-xr-x 1 root root 34 set 23 09:02 ..
-rw-r--r-- 1 _clamav _clamav 2 set 23 09:10 .ultimo_total
-rw-r--r-- 1 _clamav _clamav 0 set 23 09:02 quarentena.log


   Tem de ter 4 arquivos e esse é o único que deve estar como root:

drwxr-xr-x 1 root root 34 21 09:02 ..

   Os outros tem que estar com o usuário _clamav como dono.

   Caso o ClamAV detectar um malware num escaneamento e movê-lo para a quarentena, esses arquivos poderão estar com outro dono, porém, os 4 arquivos básicos tem de estar nesse padrão.


Para ver as últimas 10 linhas quando o arquivo estiver maior:
sudo tail -n 10 /var/opt/clamav-quarentena/quarentena.log
No XFCE, caso quiser incrementar o layout do alerta com o notify-send, execute:
sudo xfce4-notifyd-config
E depois reinicie:
sudo pkill xfce4-notifyd
   As opções são poucas, mas a vantagem é que o alerta fica na tela até você clicar em cima dele.

   Com o Zenity, o alerta dá para fazer um layout melhor, mas ao clicar fora, ele minimiza e pode acontecer de você esquecer, desligar a máquina e não verificar o e-mail nem o log.

   Vai de você escolher a melhor opção para seu gosto: notify-send ou zenity.

   No Cinnamon o caminho é: Menu > Configurações do sistema > na seção "Preferências", clique em Notificações.

No terminal:
cinnamon-settings notifications

Criando arquivo de gravação do log da quarentena
sudo vim /usr/local/bin/notificar-virus.sh
#!/bin/sh# Recebe as variaveis nativas do ClamAVPASTA_GERAL="/var/opt/clamav-quarentena"LOG_ARQUIVO="$PASTA_GERAL/quarentena.log" mensagem="ALERTA EM TEMPO REAL (/usr/local/bin/notificar-virus.sh): Arquivo suspeito '$CLAM_VIRUSEVENT_FILENAME' detectado e isolado (Vírus: $CLAM_VIRUSEVENT_VIRUSNAME)." # Grava imediatamente no log com o usuario _clamavecho "$(date '+%Y-%m-%d %H:%M:%S') -> $mensagem" | runuser -u _clamav -- tee -a "$LOG_ARQUIVO"
Salve e saia.
sudo chmod +x /usr/local/bin/notificar-virus.sh && sudo chown _clamav:_clamav /usr/local/bin/notificar-virus.sh
   Este arquivo está nas configurações do /etc/clamd.conf (VirusEvent /usr/local/bin/notificar-virus.sh).

   Como o script periódico /usr/local/bin/monitor-quarentena.sh configurado no Cron lê a quantidade de arquivos na pasta e compara com o estado anterior (.ultimo_total), ele também vai perceber que um novo arquivo chegou (movido pelo Clamonacc) e disparará o aviso caso o número mude.


Fazendo o LOGROTATE

Instalando:
sudo xbps-install -S logrotate
Criando o arquivo:
sudo vim /etc/logrotate.d/clamav-quarentena
Coloque dentro:
/var/opt/clamav-quarentena/quarentena.log {    monthly    rotate 6    compress    delaycompress    missingok    notifempty    create 0640 _clamav _clamav    su _clamav _clamav    copytruncate}
Salve e saia.

   Assim o arquivo não crescerá demais.

Verificando:
sudo logrotate -d /etc/logrotate.d/clamav-quarentena
warning: logrotate in debug mode does nothing except printing debug messages!  Consider using verbose mode (-v) instead if this is not what you want.

reading config file /etc/logrotate.d/clamav-quarentena
Reading state from file: /var/lib/logrotate.status
Allocating hash table for state file, size 64 entries
Creating new state
Creating new state
Creating new state

Handling 1 logs

rotating pattern: /var/opt/clamav-quarentena/quarentena.log monthly empty log files are not rotated, (6 rotations), old logs are removed
switching euid from 0 to 989 and egid from 0 to 988 (pid 10363)
considering log /var/opt/clamav-quarentena/quarentena.log
Creating new state
  Now: 2026-09-23 22:35
  Last rotated at 2026-09-23 22:00
  log does not need rotating (log has already been rotated)
switching euid from 989 to 0 and egid from 988 to 0 (pid 10363)
A saída indica que tudo está correto.


Criando logrotate para o Freshclam e Clamd:
sudo vim /etc/logrotate.d/clamav
Coloque dentro:
/var/log/clamd.log /var/log/freshclam.log {<br/>    monthly<br/>    rotate 6<br/>    compress<br/>    delaycompress<br/>    missingok<br/>    notifempty<br/>    create 0640 _clamav _clamav<br/>    sharedscripts<br/>    postrotate<br/>        vsv reload clamd >/dev/null 2>&1 || true<br/>        vsv reload freshclam >/dev/null 2>&1 || true<br/>    endscript<br/>}
Verificando:
sudo logrotate -d /etc/logrotate.d/clamav

Parâmetros

  • monthly: O arquivo de log será rotacionado uma vez por mês (geralmente no primeiro dia do mês).
  • rotate 6: O sistema vai guardar no máximo 6 arquivos antigos de log. Quando o 7º mês chegar, o log mais antigo de todos será deletado permanentemente.
  • compress: Compacta os logs antigos no formato .gz para economizar espaço em disco.
  • delaycompress: Adia a compactação do log anterior para o próximo ciclo de rotação. Na prática, o log do mês atual estará ativo, o do mês passado estará rotacionado mas em texto puro (.1), e apenas do retrasado em diante estarão compactados (.2.gz, .3.gz). Isso é útil se algum programa ainda precisar escrever ou ler o log logo após a virada.
  • missingok: Se o arquivo quarentena.log não existir por algum motivo (ex: foi deletado manualmente), o logrotate não vai gerar nenhum erro e passará para o próximo serviço silenciosamente.
  • notifempty: Não rotaciona o log se ele estiver vazio. Se o ClamAV não pegou nenhuma ameaça no mês e o arquivo estiver com 0 bytes, o logrotate ignora o ciclo e economiza processamento.
  • create 0640 _clamav _clamav: Logo após rotacionar (mover) o arquivo antigo, o logrotate cria um arquivo quarentena.log novinho em folha com as permissões 0640 (leitura/escrita para o dono, leitura para o grupo) e define o dono como usuário _clamav e grupo _clamav.
  • sharedscripts: Garante que o bloco postrotate (os comandos de recarregamento) seja executado apenas uma vez no final, em vez de disparar uma vez para cada arquivo.
  • vsv reload: No Void Linux, o utilitário vsv (ou sv reload) envia um sinal HUP controlado para o runit. Isso força o ClamAV e o Freshclam a fecharem o descritor de arquivo antigo e começarem a gravar no novo arquivo zerado que o create 0640 acabou de gerar.

   Agora precisamos atualizar o banco de dados, o que pode demorar alguns minutos.

   Dependendo de como você instalou e da versão do ClamAV que você está usando, pode encontrar erros na primeira vez que executar o Freshclam.

   Ao executar o Freshclam, o programa tentará buscar uma atualização no endereço especificado na linha DatabaseMirror; caso não encontre, ele passará para o endereço subsequente, até encontrar e baixar as atualizações. Depois, ele executará todas as DatabaseCustomURL.

   Porém, primeiro temos que rodar o comando que habilita o serviço do Clamd e integra ao runit, assim ele será iniciado junto com o sistema:
sudo ln -s /etc/sv/clamd /var/service/
Tentando iniciar o Clamd:
sudo sv start clamd
Saída:
timeout: down: clamd: 0s, normally up, want up

   Provavelmente dará "down" porque é um bug em que, mesmo o Clamd não iniciando, faz-se necessário rodar o comando antes de atualizar o banco de dados para não dar o WARNING de que o Clamd não foi notificado.

   Para rodar o Freshclam do jeito certo, sempre execute-o invocando o usuário do ClamAV:
sudo -u _clamav freshclam
ou
sudo -u clamav freshclam
...
Wed Sep 23 22:44:45 2026 -> Database test passed.
Wed Sep 23 22:44:45 2026 -> doppelstern.ndb updated (version: custom database, sigs: 1)
Wed Sep 23 22:44:45 2026 -> fc_download_url_database: doppelstern.ndb updated.
Wed Sep 23 22:44:45 2026 -> Database update completed successfully.
Wed Sep 23 22:44:45 2026 -> Clamd successfully notified about the update.

   Terminará sem erros com essas últimas linhas acima.

   Caso apareça um WARNING como esse no final:
WARNING: Wed Sep 16 12:02:53 2026 -> Clamd was NOT notified: Can't connect to Clamd through /var/run/clamav/clamd.ctl: No such file or directory
não se preocupe, falta iniciar o Clamd.

Caso dê erro, veja qual é o erro e repare. Por exemplo:
ERROR: Fri Sep 4 15:48:00 2026 -> NotifyClamd: No communication socket specified in /etc/clamd.conf
ERROR: Fri Sep 4 15:48:00 2026 -> Can't send to clamd: Socket operation on non-socket
Esse erro significa que alguma configuração no arquivo /etc/clamd.conf está em desacordo.

Caso apareça um WARNING como esse no final:
WARNING: Tue Sep 8 09:56:06 2026 -> Clamd was NOT notified: Can't connect to Clamd through /var/run/clamav/clamd.ctl: Permission denied

confira essas linhas:
LocalSocket /var/run/clamav/clamd.ctl
FixStaleSocket true
LocalSocketGroup clamav
LocalSocketMode 666

   E rode o comando sudo -u _clamav freshclam (ou sudo -u clamav freshclam) novamente. E, caso as linhas estejam corretas, não se preocupe: depois, ao iniciar o Clamd, esse aviso desaparece.

   Para outros erros, veja este link que aborda a maioria dos erros ao executar o Freshclam pela primeira vez:

https://docs.clamav.net/faq/faq-freshclam.html

   Ou copie e cole o comando com o erro e jogue no Google ou em alguma IA.


Iniciando o Serviço CLAMD no Void
sudo sv start clamd
ok: run: clamd: (pid 21883) 34s

Caso queira, pode executar novamente:
sudo -u _clamav freshclam
Depois, pode sempre verificar com:
sudo sv status clamd
run: clamd: (pid 19534) 3s; run: log: (pid 18660) 259s


Verificando com Htop.
$ sudo htop


Verificando com ClamdTop.
$ sudo clamdtop

E quando quiser parar ou reiniciar:
sudo sv stop clamd
sudo sv restart clamd

Para outros sistemas, veja:

https://www.vivaolinux.com.br/artigo/Antivirus-ClamAV-com-protecao-em-tempo-real/

https://www.vivaolinux.com.br/artigo/ClamAV-o-kit-de-ferramentas-antivirus/


Vendo as últimas 10 linhas para verificar se os logs estão funcionando:
sudo tail -n 10 /var/log/freshclam.log
Mon Sep 21 09:22:18 2026 -> download_complete_callback: fc_context->bTestDatabases : 1
Mon Sep 21 09:22:18 2026 -> download_complete_callback: fc_context->bBytecodeEnabled : 1
Mon Sep 21 09:22:18 2026 -> Testing database: '/var/lib/_clamav/tmp.9f45e86cf8/clamav-4821cfa51c2c06a78e61b54f2a22520a.tmp-doppelstern.ndb' ...
Mon Sep 21 09:22:18 2026 -> Loading signatures from /var/lib/_clamav/tmp.9f45e86cf8/clamav-4821cfa51c2c06a78e61b54f2a22520a.tmp-doppelstern.ndb
Mon Sep 21 09:22:18 2026 -> Properly loaded 1 signatures from /var/lib/_clamav/tmp.9f45e86cf8/clamav-4821cfa51c2c06a78e61b54f2a22520a.tmp-doppelstern.ndb
Mon Sep 21 09:22:18 2026 -> Database test passed.
Mon Sep 21 09:22:18 2026 -> doppelstern.ndb updated (version: custom database, sigs: 1)
Mon Sep 21 09:22:18 2026 -> fc_download_url_database: doppelstern.ndb updated.
Mon Sep 21 09:22:18 2026 -> Database update completed successfully.
Mon Sep 21 09:22:18 2026 -> Clamd successfully notified about the update.

sudo tail -n 10 /var/log/clamd.log
Mon Sep 21 09:39:28 2026 -> ELF support enabled.
Mon Sep 21 09:39:28 2026 -> Mail files support enabled.
Mon Sep 21 09:39:28 2026 -> OLE2 support enabled.
Mon Sep 21 09:39:28 2026 -> PDF support enabled.
Mon Sep 21 09:39:28 2026 -> SWF support enabled.
Mon Sep 21 09:39:28 2026 -> HTML support enabled.
Mon Sep 21 09:39:28 2026 -> XMLDOCS support enabled.
Mon Sep 21 09:39:28 2026 -> HWP3 support enabled.
Mon Sep 21 09:39:28 2026 -> OneNote support enabled.
Mon Sep 21 09:39:28 2026 -> Self checking every 3600 seconds.

Para ver em tempo real:
sudo tail -f /var/log/clamd.log
Mon Sep 21 09:39:28 2026 -> ELF support enabled.
Mon Sep 21 09:39:28 2026 -> Mail files support enabled.
Mon Sep 21 09:39:28 2026 -> OLE2 support enabled.
Mon Sep 21 09:39:28 2026 -> PDF support enabled.
Mon Sep 21 09:39:28 2026 -> SWF support enabled.
Mon Sep 21 09:39:28 2026 -> HTML support enabled.
Mon Sep 21 09:39:28 2026 -> XMLDOCS support enabled.
Mon Sep 21 09:39:28 2026 -> HWP3 support enabled.
Mon Sep 21 09:39:28 2026 -> OneNote support enabled.
Mon Sep 21 09:39:28 2026 -> Self checking every 3600 seconds.

Ctrl+c para sair.

Verifique se o clamd.ctl foi criado em /var/run/clamav:
sudo ls -la /var/run/clamav/
total 0
drwxr-x--- 2 _clamav _clamav 60 set 23 22:36 .
drwxr-xr-x 23 root root 620 set 23 22:07 ..
srw-rw---- 1 _clamav _clamav 0 set 23 22:36 clamd.ctl



On-Access Scanning

   Agora vamos habilitar o Clamonacc, conhecido também como Proteção em Tempo Real.

   O ClamAV não tem aquela proteção que fica o tempo todo escaneando o computador; ele somente escaneia o diretório e/ou o arquivo quando é acessado. O cliente Clamonacc para o daemon de varredura Clamd fornece varredura no acesso em versões modernas do Linux, incluindo um recurso opcional para bloquear o acesso ao arquivo até que ele seja verificado.


IMPORTANTE
   Caso o fanotify não esteja habilitado no kernel, não adianta fazer esse procedimento sem antes habilitá-lo.

Para configurar o Clamonacc, basta ajustar o arquivo /etc/clamd.conf.

Como as configurações já estão no arquivo, deixo aqui os passos básicos:
    • Abra o arquivo /etc/clamd.conf;
    • Especifique o(s) caminho(s) que você gostaria de monitorar definindo a opção OnAccessIncludePath;
    • Defina OnAccessPrevention para yes;
    • Verifique qual nome de usuário está sendo usado para executar o comando, clamav ou _clamav;
    • Defina OnAccessExcludeUname para o nome de usuário correspondente;
    • Salve seu trabalho e feche o clamd.conf.

Criando o Clamonacc no Void
sudo mkdir -p /etc/sv/clamonacc
sudo vim /etc/sv/clamonacc/run
Coloque dentro:
#!/bin/shsv check clamd >/dev/null 2>&1 || exit 1exec sudo clamonacc --fdpass --move=/var/opt/clamav-quarentena -F
Salve e saia.
sudo chmod +x /etc/sv/clamonacc/run
sudo ln -s /etc/sv/clamonacc /var/service/
sudo sv start clamonacc
ok: run: clamonacc: (pid 12570) 7s

sudo sv restart clamonacc
ok: run: clamonacc: (pid 12716) 1s

sudo sv status clamonacc
run: clamonacc: (pid 12716) 42s


Para verificar melhor, pode usar o htop:

htop



TESTES


   O padrão mundial para testar antivírus sem usar código malicioso real é o EICAR Standard Anti-Virus Test File. Qualquer antivírus atualizado, incluindo o ClamAV, vai identificá-lo imediatamente como uma ameaça chamada Win.Test.EICAR_HBR-1 ou similar.

   Códigos de retorno do ClamAV: 0 = limpo, 1 = infectado, 2 = erro

   Coloque a opção OnAccessIncludePath /home/seu_usuario/Downloads no arquivo:
sudo vim /etc/clamd.conf
##OnAccessIncludePath /home
##OnAccessIncludePath /home/seu_usuario
OnAccessIncludePath /home/seu_usuario/Downloads

Reinicie os serviços:
sudo sv restart clamd
ok: run: clamd: (pid 15652) 0s

sudo sv restart clamonacc
ok: run: clamonacc: (pid 15702) 1s

Tentando criar o arquivo:
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com
bash: /home/usuario/Downloads/eicar.com: Operação não permitida

  Isso deve acontecer porque no arquivo /etc/clamd.conf o caminho /home/seu_usuario/Downloads está no OnAccessIncludePath.


AVISO IMPORTANTE
   Em algumas interfaces gráficas, como o Cinnamon, não haverá aviso no terminal, mas a proteção está funcionando. Após dar o echo, basta verificar a pasta ~/Downloads e ver que o arquivo não está lá e verificar o diretório /var/opt/clamav-quarentena:
sudo ls -la /var/opt/clamav-quarentena
Faremos com sudo:
sudo echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com
Tentando ler o arquivo:
cat ~/Downloads/eicar.com
cat: /home/usuario/Downloads/eicar.com: Operação não permitida

No XFCE o Clamonacc não deixa acessar o arquivo e depois move para a quarentena.
cat ~/Downloads/eicar.com
cat: /home/kluster/Downloads/eicar.com: Arquivo ou diretório inexistente

   No Cinnamon o arquivo é movido para a quarentena antes de qualquer processo sequer conseguir ler.

   O comportamento diferente ocorre porque o Cinnamon e o XFCE gerenciam de formas distintas os erros de sistema originados por chamadas do kernel e as notificações para o usuário.

   Quando damos o echo, o bash consegue criar o arquivo temporariamente na memória, mas no milissegundo seguinte o indexador do Cinnamon tenta ler o arquivo para gerar um ID/miniatura. Isso dispara o gatilho do ClamAV, que bloqueia o acesso e move o arquivo imediatamente.

   Códigos de retorno do ClamAV: 0 = limpo, 1 = infectado, 2 = erro

Tentaremos com sudo:

sudo cat ~/Downloads/eicar.com
cat: /home/usuario/Downloads/eicar.com: Arquivo ou diretório inexistente

   Perceba que o arquivo foi movido para a quarentena porque colocamos no arquivo /etc/sc/clamonacc/run a opção --move=/var/opt/clamav-quarentena e foi registrado no log porque colocamos no arquivo /etc/clamd.conf a opção VirusEvent /usr/local/bin/notificar-virus.sh:
sudo ls -la /var/opt/clamav-quarentena
total 12
drwx------ 1 _clamav _clamav 160 set 21 09:51 .
drwxr-xr-x 1 root root 34 set 21 09:02 ..
-rw------- 1 root root 0 set 21 09:45 .clamav-quarantine-lock.12718.0
-rw-r--r-- 1 _clamav _clamav 2 set 21 09:50 .ultimo_total
-rw------- 1 root root 69 set 14 15:55 eicar.com
-rw------- 1 root root 69 set 21 09:48 eicar.com.001
-rw-r--r-- 1 _clamav _clamav 0 set 21 09:02 quarentena.log

   O arquivo eicar.com.001 é um arquivo de controle que o ClamAV cria automaticamente.

Testando novamente com sudo nos dois comandos:
sudo echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com
sudo cat ~/Downloads/eicar.com
cat: /home/usuario/Downloads/eicar.com: Operação não permitida

sudo cat ~/Downloads/eicar.com
cat: /home/usuario/Downloads/eicar.com: Arquivo ou diretório inexistente
sudo ls -la /var/opt/clamav-quarentena
total 16
drwx------ 1 _clamav _clamav 186 set 21 09:58 .
drwxr-xr-x 1 root root 34 set 21 09:02 ..
-rw------- 1 root root 0 set 21 09:45 .clamav-quarantine-lock.12718.0
-rw-r--r-- 1 _clamav _clamav 2 set 21 09:56 .ultimo_total
-rw------- 1 root root 69 set 14 15:55 eicar.com
-rw------- 1 root root 69 set 21 09:48 eicar.com.001
-rw------- 1 root root 69 set 21 09:57 eicar.com.002
-rw-r--r-- 1 _clamav _clamav 0 set 21 09:02 quarentena.log

sudo cat /var/opt/clamav-quarentena/quarentena.log
2026-09-21 09:03:32 -> ALERTA EM TEMPO REAL: Arquivo suspeito '/home/seu_usuario/Downloads/eicar.com' detectado e isolado (Vírus: {HEX}test.test.eicar.1040.UNOFFICIAL)


Testando Escaneamento

   Lembrando que o Clamscan não utiliza arquivo de configurações, mas parâmetros próprios no binário; porém, logo faremos um wrapper para ele, pois o utilizaremos para as varreduras com o cron.
sudo clamscan ~/Downloads
Loading: 6s, ETA: 0s [========================>] 3.80M/3.80M sigs
Compiling: 2s, ETA: 0s [========================>] 42/42 tasks

/home/seu_usuario/Downloads/grub-void.html: OK
/home/seu_usuario/Downloads/vkpurge.html: OK
/home/seu_usuario/Downloads/zram-zswap.mhtml: OK
/home/seu_usuario/Downloads/linux-7.1.2.tar.xz: OK
/home/seu_usuario/Downloads/apache-netbeans.svg: OK
/home/seu_usuario/Downloads/wgcf-master.zip: OK
/home/seu_usuario/Downloads/wgcf-account.toml: OK

----------- SCAN SUMMARY -----------
Known viruses: 3797093
Engine version: 1.5.3
Scanned directories: 1
Scanned files: 7
Infected files: 0
Data scanned: 16.27 MiB
Data read: 159.41 MiB (ratio 0.10:1)
Time: 19.103 sec (0 m 19 s)
Start Date: 2026:09:23 23:41:10
End Date: 2026:09:23 23:41:29

sudo clamscan ~/Downloads/eicar.com
Loading: 10s, ETA: 0s [========================>] 3.80M/3.80M sigs
Compiling: 2s, ETA: 0s [========================>] 42/42 tasks

WARNING: Can't open file /home/usuario/Downloads/eicar.com: Operation not permitted

----------- SCAN SUMMARY -----------
Known viruses: 3796968
Engine version: 1.5.3
Scanned directories: 0
Scanned files: 0
Infected files: 0
Total errors: 1
Data scanned: 0 B
Data read: 69 B (ratio 0.00:1)
Time: 12.426 sec (0 m 12 s)
Start Date: 2026:09:21 12:54:17
End Date: 2026:09:21 12:54:30

sudo echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com
   O Clamdscan utiliza os parâmetros do arquivo /etc/clamd.conf nas varreduras, bem como o Clamonacc na proteção.
sudo clamdscan --stream ~/Downloads
/home/kluster/Downloads: OK

----------- SCAN SUMMARY -----------
Infected files: 0
Time: 148.057 sec (2 m 28 s)
Start Date: 2026:09:24 00:07:13
End Date: 2026:09:24 00:09:41

sudo clamdscan --stream ~/Downloads/eicar.com
/home/usuario/Downloads/eicar.com: Failed to open file. ERROR

----------- SCAN SUMMARY -----------
Infected files: 0
Total errors: 1
Time: 0.019 sec (0 m 0 s)
Start Date: 2026:09:21 12:56:14
End Date: 2026:09:21 12:56:14
   Podemos ver que o Clamonacc no XFCE não deixa nem o Clamscan e nem o Clamdscan acessarem o arquivo virulento, nem com sudo e nem com o próprio usuário _clamav.

   Porém, ao escanear ~/Downloads ele permite somente com o Clamscan e bloqueia com Clamdscan, porque o Clamd e o Clamonacc utilizam o mesmo arquivo /etc/clamd.conf, enquanto o Clamscan é independente.

https://docs.clamav.net/manual/Usage/Scanning.html#clamdscan

https://docs.clamav.net/manual/Usage/Scanning.html#clamscan


Vamos comentar o diretório /home/seu_usuario/Downloads no arquivo:
sudo vim /etc/clamd.conf
Comente:
#OnAccessIncludePath /home/seu_usuario/Downloads

Salve e saia.
sudo sv restart clamd
ok: run: clamd: (pid 31196) 0s

sudo sv restart clamonacc
ok: run: clamonacc: (pid 31276) 0s

sudo echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com
clamscan ~/Downloads/eicar.com
Loading: 9s, ETA: 0s [========================>] 3.80M/3.80M sigs
Compiling: 2s, ETA: 0s [========================>] 42/42 tasks

/home/usuario/Downloads/eicar.com: {HEX}test.test.eicar.1040.UNOFFICIAL FOUND

----------- SCAN SUMMARY -----------
Known viruses: 3796968
Engine version: 1.5.3
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 69 B
Data read: 69 B (ratio 1.00:1)
Time: 12.357 sec (0 m 12 s)
Start Date: 2026:09:21 12:58:58
End Date: 2026:09:21 12:59:10

cat ~/Downloads/eicar.com
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

   Vemos que o arquivo foi lido.

   Obs.: para o arquivo ser movido para a quarentena, o parâmetro --move=/caminho/quarentena deve ser passado no comando.

   Primeiro utilizei o Clamscan porque tem uma saída mais completa, mas demora mais porque carrega todo o banco de dados na memória RAM cada vez.

   O resultado mostra que o motor do ClamAV está totalmente operacional e atualizado com mais de 3,7 milhões de assinaturas conhecidas. Ele identificou o arquivo instantaneamente como FOUND.

   Porém, o comando demorou 12.357 segundos para escanear um único arquivo de apenas 69 bytes. Isso acontece porque o Clamscan precisa carregar todas as assinaturas de vírus na memória RAM do zero toda vez que é executado.

   Vamos fazer esse mesmo escaneamento em fração de milissegundos usando o comando clamdscan com a flag --stream para enviar o arquivo ao daemon local (Clamd) que já está rodando em segundo plano com a base de dados pré-carregada na RAM.
sudo echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com
sudo clamdscan --stream ~/Downloads/eicar.com
/home/usuario/Downloads/eicar.com: {HEX}test.test.eicar.1040.UNOFFICIAL FOUND

----------- SCAN SUMMARY -----------
Infected files: 1
Time: 0.024 sec (0 m 0 s)
Start Date: 2026:09:21 13:01:34
End Date: 2026:09:21 13:01:34

   Observe que o tempo de escaneamento caiu de 12.357 segundos para apenas 0.024 segundos.


Testando
clamscan ~/Downloads/
Loading: 10s, ETA: 0s [========================>] 3.80M/3.80M sigs
Compiling: 2s, ETA: 0s [========================>] 42/42 tasks

/home/usuario/Downloads/images.jpeg: OK
/home/usuario/Downloads/26055.txt: OK
/home/usuario/Downloads/18153.txt: OK
/home/usuario/Downloads/5174256.png: OK
/home/usuario/Downloads/calvin-midia.webp: OK
/home/usuario/Downloads/biblia-terminal-main.zip: Sanesecurity.Foxhole.Zip_exe.UNOFFICIAL FOUND
/home/usuario/Downloads/0x0.webp: OK
/home/usuario/Downloads/demolition.webp: OK
/home/usuario/Downloads/idiocracia.webp: OK
/home/usuario/Downloads/celine-nietzsche.pdf: OK
/home/usuario/Downloads/Ardil-22 - Joseph Heller.pdf: OK
/home/usuario/Downloads/eicar.com: {HEX}test.test.eicar.1040.UNOFFICIAL FOUND
...

----------- SCAN SUMMARY -----------
Known viruses: 3797062
Engine version: 1.5.3
Scanned directories: 1
Scanned files: 54
Infected files: 2
Total errors: 1
Data scanned: 530.29 MiB
Data read: 742.51 MiB (ratio 0.71:1)
Time: 439.155 sec (7 m 19 s)
Start Date: 2026:09:24 07:51:59
End Date: 2026:09:24 07:59:19
   Observem que ele acusou dois vírus: o arquivo eicar.com e o arquivo biblia-terminal-main.zip como Sanesecurity.Foxhole.Zip_exe.UNOFFICIAL FOUND. Este talvez seja um falso positivo, mas, por via das dúvidas, foi para a quarentena.

https://sanesecurity.com/foxhole-databases/



Definições:
  • Known viruses: 3797062 - Banco de dados com 3.797.062 tipos de malwares conhecidos
  • Engine version: 1.5.3 - Versão do ClamAV
  • Scanned directories: 1 - Diretórios escaneados
  • Scanned files: 54 - Arquivos escaneados
  • Infected files: 2 - Arquivos infectados
  • Total errors: 1 - Total de erros
  • Data scanned: 530.29 MiB - Total de dados escaneados
  • Data read: 742.51 MiB (ratio 0.71:1) - Total de dados lidos
  • Time: 439.155 sec (7 m 19 s) - Duração do escaneamento
  • Start Date: 2026:09:24 07:51:59 - Data/horário de início
  • End Date: 2026:09:24 07:59:19 - Data/horário do fim

Movendo com Clamscan e Clamdscan

   O Clamonacc, dependendo das configurações, pode bloquear o Clamscan e o Clamdscan, então, por via das dúvidas, é de bom tom parar o Clamonacc para a varredura e iniciar logo após:
sudo sv stop clamonacc
ok: down: clamonacc: 0s, normally up

   Para o Clamscan e o Clamdscan moverem os arquivos para a quarentena, o parâmetro --move=/caminho/quarentena deve ser passado no comando para varreduras manuais e também colocado no Cron para varreduras automáticas:
sudo clamdscan --stream --move=/var/opt/clamav-quarentena ~/Downloads/eicar.com
Senha:
/home/usuario/Downloads/eicar.com: {HEX}test.test.eicar.1040.UNOFFICIAL FOUND
/home/usuario/Downloads/eicar.com: moved to '/var/opt/clamav-quarentena/eicar.com.008'

----------- SCAN SUMMARY -----------
Infected files: 1
Time: 0.010 sec (0 m 0 s)
Start Date: 2026:09:21 13:34:29
End Date: 2026:09:21 13:34:29

cat ~/Downloads/eicar.com
cat: /home/usuario/Downloads/eicar.com: Arquivo ou diretório inexistente

sudo echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com
sudo clamscan --move=/var/opt/clamav-quarentena ~/Downloads/eicar.com
Loading: 9s, ETA: 0s [========================>] 3.80M/3.80M sigs
Compiling: 3s, ETA: 0s [========================>] 42/42 tasks

/home/usuario/Downloads/eicar.com: {HEX}test.test.eicar.1040.UNOFFICIAL FOUND
/home/usuario/Downloads/eicar.com: moved to '/var/opt/clamav-quarentena/eicar.com.009'

----------- SCAN SUMMARY -----------
Known viruses: 3796968
Engine version: 1.5.3
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 69 B
Data read: 69 B (ratio 1.00:1)
Time: 12.660 sec (0 m 12 s)
Start Date: 2026:09:21 13:41:29
End Date: 2026:09:21 13:41:41

cat ~/Downloads/eicar.com
cat: /home/usuario/Downloads/eicar.com: Arquivo ou diretório inexistente

Códigos de retorno do ClamAV: 0 = limpo, 1 = infectado, 2 = erro
sudo sv start clamonacc
ok: run: clamonacc: (pid 15645) 0s


Sobre o Clamonacc

   Recomendo utilizar o Clamonacc somente em algumas pastas como /home/usuario/Downloads, /tmp, /var/tmp e /dev/shm e mesmo assim, com cautela, pois pode acontecer de processos perderem o acesso aos arquivos necessários para seu funcionamento caso forem detectados como falsos positivos. Daí você terá de movê-los manualmente para a lista.

   O Clamonacc exige privilégios elevados (root) para interagir com a API fanotify do Kernel.

   Dar permissão de leitura global (o+rx) na pasta /home/usuario permite que outros usuários locais vejam a lista de arquivos públicos na sua home, isso não é recomendado, pois é uma preocupação de privacidade e segurança. A alternativa seria adicionar o usuário _clamav ao grupo de usuário pessoal e ajustar a opção AllowSupplementaryGroups no clamd.conf.

   De acordo com os testes mostrados, vimos que como o Clamonacc, dependendo das configurações, pode bloquear o Clamscan e o Clamdscan, então, por via das dúvidas, pararamos o Clamonacc para a varredura e iniciamos logo após.


Diferenças entre Clamscan e Clamdscan

   Clamd/Clamonacc: Usam obrigatoriamente o /etc/clamd.conf. O daemon fica rodando em segundo plano na memória, mantendo o banco de dados carregado para responder instantaneamente. É ideal para o monitoramento leve em tempo real em pastas específicas.

   Como o banco de dados de vírus já está carregado na RAM pelo daemon (Clamd), o Clamdscan é imensamente mais rápido para iniciar e consome muito menos CPU a cada execução. Ele apenas envia o caminho do arquivo para o daemon analisar e devolve o resultado.

   O Clamdscan é mais recomendado para varreduras manuais em arquivos e diretórios específicos.

   Por exemplo, quando tiver um arquivo muito grande para escanear, altere o /etc/clamd.conf em OnAccessMaxFileSize XXXM e depois rode o echo 'fs.inotify.max_user_watches=xxxxxxxxx' | sudo tee /etc/sysctl.d/99-inotify.conf com o mesmo tamanho convertido em bytes. Depois retorne ao tamanho padrão das tuas necessidades para o Clamonacc não interferir no sistema. No meu caso eu deixo em 100 megas (100M).

   Clamscan: É um utilitário avulso. Ele lê o banco de dados de assinaturas diretamente do disco a cada execução. Como ele varre sob demanda (via cron ou manualmente), ele não interfere no comportamento do Clamonacc e não exige que altere o arquivo /etc/clamd.conf.

   A cada execução, ele precisa ler todos os arquivos de assinatura do banco de dados diretamente do disco e alocar tudo na RAM novamente, o que consome bastante tempo e picos de processamento.

   Porém, em uma varredura automática pelo Cron de madrugada no sistema inteiro, o Clamscan é o ideal.


  Wrapper é uma função, classe ou biblioteca que envolve um código existente para simplificar sua interface, adicionar novas funcionalidades ou adaptar sua comunicação.

  Arquivo configurado para fazer a varredura com o Clamscan, que depois será utilizado no Cron.
sudo vim /usr/local/bin/varredura.sh
Coloque dentro:
#!/usr/bin/env bash# /usr/local/bin/varredura.sh# Varredura completa com Clamscan, independente do Clamd/Clamonacc.# Uso: rodar como root via Cron. set -euo pipefail # -------------## Configuracao# -------------#ALVOS=(#  "/"#  "/home"#  "/var/www"#  "/etc"    "/home/seu_usuario/Downloads"#  Adicione mais diretorios aqui ou coloque para varrer o raiz (/) e adicione mais --exclude-dir abaixo) LOG="/var/log/varredura.log"QUARENTENA="/var/opt/clamav-quarentena"LOCKFILE="/var/run/clamscan.lock" # Evita rodar duas varreduras simultaneas se a anterior atrasarexec 200>"$LOCKFILE"if ! flock -n 200; then    echo "$(date '+%F %T') - Varredura anterior ainda em execução. Abortando." >> "$LOG"    exit 1fi echo "=================================================" >> "$LOG"echo "$(date '+%F %T') - Início da varredura" >> "$LOG" # --------------## Execucao# --------------#sudo sv stop clamonacc &&set +eclamscan \  --recursive \  --alert-broken \  --infected \  --log="$LOG" \  --move="$QUARENTENA" \  --exclude-dir='^/(proc|sys|dev|run|/var/run|/etc/sv|/etc/runit)' \  --exclude-dir='^/var/lib/_clamav' \  --exclude-dir='^/var/log' \  --max-filesize=500M \  --max-scansize=1000M \  --max-scantime=0 \  --cross-fs=no \  --alert-exceeds-max=yes \  --alert-broken=yes \  --alert-encrypted=yes \  --alert-macros=yes \  --detect-pua=yes \  "${ALVOS[@]}"STATUS=$?;set -e;sudo sv start clamonacc echo "$(date '+%F %T') - Fim da varredura (Código de saída: $STATUS)" >> "$LOG"# Codigos de retorno do ClamAV: 0 = limpo, 1 = infectado, 2 = erroexit $STATUS
Salve e saia.

   De acordo com os testes mostrados, vimos que como o Clamonacc bloqueia até o Clamscan e o Clamdscan, então temos que parar o Clamonacc para a varredura e iniciá-lo logo após, como está no script.
sudo chmod +x /usr/local/bin/varredura.sh
sudo chown _clamav:_clamav /usr/local/bin/varredura.sh

Arquivo lock:
sudo touch /var/run/clamscan.lock
sudo chown _clamav:_clamav /var/run/clamscan.lock
sudo chmod 750 /var/run/clamscan.lock

Crie o arquivo de log das varreduras:
sudo touch /var/log/varredura.log
sudo chown _clamav:_clamav /var/log/varredura.log
sudo chmod 640 /var/log/varredura.log

L
ogrotate
sudo vim /etc/logrotate.d/clamav
Acrescente /var/log/varredura.log:
/var/log/clamd.log /var/log/freshclam.log /var/log/varredura.log {    monthly    rotate 6    compress    delaycompress    missingok    notifempty    create 0640 _clamav _clamav    sharedscripts    postrotate        vsv reload clamd >/dev/null 2>&1 || true        vsv reload freshclam >/dev/null 2>&1 || true    endscript}
Salve e saia.

Verificando:
sudo logrotate -d /etc/logrotate.d/clamav
warning: logrotate in debug mode does nothing except printing debug messages! Consider using verbose mode (-v) instead if this is not what you want.

reading config file /etc/logrotate.d/clamav
Reading state from file: /var/lib/logrotate.status
Allocating hash table for state file, size 64 entries
Creating new state
Creating new state
Creating new state

Handling 1 logs

rotating pattern: /var/log/clamd.log /var/log/freshclam.log /var/log/varredura.log monthly empty log files are not rotated, (6 rotations), old logs are removed
considering log /var/log/clamd.log
Creating new state
Now: 2026-09-24 00:26
Last rotated at 2026-09-24 00:00
log does not need rotating (log has already been rotated)
considering log /var/log/freshclam.log
Creating new state
Now: 2026-09-24 00:26
Last rotated at 2026-09-24 00:00
log does not need rotating (log has already been rotated)
considering log /var/log/varredura.log
Creating new state
Now: 2026-09-24 00:26
Last rotated at 2026-09-24 00:00
log does not need rotating (log has already been rotated)
not running postrotate script, since no logs were rotated

   O parâmetro -d (modo debug) apenas imprime na tela tudo o que ele faria se estivesse rodando de verdade.

   Se você quer forçar a rotação dos logs agora mesmo, substitua o -d pelo parâmetro -f (force):
sudo logrotate -f /etc/logrotate.d/clamav
   Se você quer ver o que ele está fazendo em tempo real enquanto executa de verdade, use o modo detalhado -v (verbose):
sudo logrotate -v /etc/logrotate.d/clamav
Testando o arquivo no diretório /home/seu_usuario/Downloads:
sudo /usr/local/bin/varredura.sh
ok: down: clamonacc: 1894s, normally up

Em outro terminal execute:
ps aux | grep clamscan
root 1927 99.0 3.3 1294288 1100592 pts/1 R+ 00:30 0:12 clamscan --recursive --alert-broken --infected --log=/var/log/varredura.log --move=/var/opt/clamav-quarentena --exclude-dir=^/(proc|sys|dev|run|/var/run|/etc/sv|/etc/runit) --exclude-dir=^/var/lib/_clamav --exclude-dir=^/var/log --max-filesize=500M --max-scansize=1000M --max-scantime=0 --cross-fs=no --alert-exceeds-max=yes --alert-broken=yes --alert-encrypted=yes --alert-macros=yes --detect-pua=yes /home/kluster/Downloads
seu_usuario 1982 0.0 0.0 6704 2628 pts/2 S+ 00:30 0:00 grep clamscan
   A linha root indica que o escaneamento está ocorrendo com todos os parâmetros configurados no arquivo.
   Para parar tecle Ctrl+c.

   Agora vamos testar um único diretório para comprovar. Tenho um diretório ~/teste que sei que não tem vírus, vamos colocar o eicar para incrementar o teste:
sudo echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/teste/eicar.com
sudo vim /usr/local/bin/varredura.sh
Deixei essa parte assim, adapte para você:
# -------------------#
# Configuracao
# -------------------#
ALVOS=(
# "/"
# "/home"
# "/var/www"
# "/etc"
"/home/seu_usuario/teste"
# adicione mais diretorios aqui ou coloque para varrer o raiz (/) e adicione mais --exclude-dir abaixo
)

Salve e saia.
sudo /usr/local/bin/varredura.sh
ok: down: clamonacc: 1s, normally up
/home/kluster/teste/eicar.com: {HEX}test.test.eicar.1040.UNOFFICIAL FOUND
/home/kluster/teste/eicar.com: moved to '/var/opt/clamav-quarentena/eicar.com'

----------- SCAN SUMMARY -----------
Known viruses: 3811649
Engine version: 1.5.3
Scanned directories: 45
Scanned files: 576
Infected files: 1
Data scanned: 6.92 MiB
Data read: 5.87 MiB (ratio 1.18:1)
Time: 15.432 sec (0 m 15 s)
Start Date: 2026:09:23 15:12:44
End Date: 2026:09:23 15:12:59
ok: run: clamonacc: (pid 17328) 1s

cat ~/teste/eicar.com
cat: /home/usuario/teste/eicar.com: Arquivo ou diretório inexistente

Caso quiser dê um:
cat /var/log/varredura.log
ou
tail -n 10 /var/log/varredura.log
   E, para encerrar, confirme que o Clamonacc iniciou (apesar de a saída mostrar isso no final):
sudo sv status clamonacc
run: clamonacc: (pid 17328) 62s

Vemos que o teste final correu tudo bem.

   Escaneou os arquivos e pegou o eicar.com movendo-o para a quarentena e "ligando" o Clamonacc.

   Lembrando que é necessário desabilitar o Clamonacc durante as varreduras porque, como vimos, ele não deixa nem o Clamdscan e nem o Clamscan atuarem nos arquivos e diretórios protegidos.

   Pode deixar o Clamonacc habilitado durante as varreduras que somente não serão escaneados os diretórios e arquivos protegidos pelo Clamonacc, porém, eu prefiro desabilitar para evitar conflitos e possíveis problemas de travamentos porque, como vimos, o Clamonacc atua direto no Kernel.

   Depois, lembre de configurar ALVOS para raiz (/) no arquivo /usr/local/bin/varredura.sh e acrescente quantas exclusões quiser com o parâmetro --exclude-dir.

Códigos de retorno do ClamAV: 0 = limpo, 1 = infectado, 2 = erro


Abrindo o Cron:
sudo -E crontab -e
ou
sudo EDITOR=vim crontab -e
ou
sudo EDITOR=nano crontab -e
ou
configure o ~/.bashrc permanentemente, senão o comando "sudo crontab -e" abrirá o vi por padrão no Void e você nunca mais sairá dele.

Coloque dentro:

# === ClamAV === # 1. Atualiza o banco de dados as 03:22 todos os dias# Opcional porque o /etc/freshclam.conf está configurado para atualizar duas vezes ao dia: Checks 222 03 * * * runuser -u _clamav /usr/bin/freshclam # 2. Escaneia o sistema as 03:44 no domingo (0) e na quarta-feira (3)# 44 03 * * 0,3 sudo sv stop clamonacc && /usr/bin/clamdscan --stream --recursive --fdpass --exclude-dir="^/sys|^/dev|^/proc|^/etc/sv|^/etc/runit|/\.config/google-chrome" /; sudo sv start clamonacc # 3. Escaneia o sistema as 03:44 no domingo e na quarta44 03 * * 0,3 /usr/local/bin/varredura.sh >> /var/log/varredura.log 2>&1 # 4. Roda a cada 5 minutos (ou no intervalo que preferir)*/5 * * * * /usr/local/bin/monitor-quarentena.sh # 5. Limpa arquivos com mais de 30 dias na quarentena todo Sabado as 00:0000 00 * * 6 /usr/local/bin/limpar_quarentena.sh # === CLamAV Final ===
Salve e saia.

  Configure os dias e horários para quando o computador/servidor estiver ligado, ou seja, configure de acordo com as tuas necessidades.


TESTANDO O CRON
sudo -E crontab -e
Coloque uma linha assim:
25 15 * * * /usr/local/bin/varredura.sh >> /var/log/varredura.log 2>&1

   Ajuste para um horário perto, ali está para iniciar a varredura às 15:25 hs. Não dará mensagem nenhuma no terminal.

Aguarde terminar e veja o log:
sudo tail -n 5 /var/log/varredura.log
Time: 15.479 sec (0 m 15 s)
Start Date: 2026:09:23 15:25:00
End Date: 2026:09:23 15:25:16
ok: run: clamonacc: (pid 19885) 0s 2026-09-23 15:25:16 - Fim da varredura (código de saída: 1)


   Veja que iniciou às 15:25:00.
   E se você configurou também o monitor-quarentena.sh no Cron, deverá ver a mensagem na tela (Notify-send ou Zenity).



Para remover completamente:

$ sudo sv stop clamd
$ sudo sv stop clamonacc
$ sudo xbps-remove clamav
$ sudo userdel _clamav
$ sudo groupdel _clamav
$ sudo umount /var/opt/clamav-quarentena
$ sudo rm -rf /var/opt/clamav-quarentena
Não esqueça de comentar ou apagar a linha no /etc/fstab:
$ sudo vim /etc/fstab
$ sudo rm -rf /var/log/freshclam.log
$ sudo rm -rf /var/log/clamd.log
$ sudo rm -rf /var/run/clamav
$ sudo rm /var/service/clamd
$ sudo rm -rf /etc/sv/clamd
$ sudo rm /var/service/clamonacc
$ sudo rm -rf /etc/sv/clamonacc
$ sudo rm -rf /etc/logrotate.d/clamav-quarentena
$ sudo rm -rf /run/runit/supervise.clamd
$ sudo rm -rf /run/runit/supervise.clamd-log

Opcional:
$ sudo rm -rf /etc/freshclam.conf
$ sudo rm -rf /etc/clamd.conf
$ sudo rm -rf /etc/clamav-milter.conf
$ sudo rm -rf /usr/local/bin/limpar-quarentena.sh
$ sudo rm -rf /usr/local/bin/monitor-quarentena.sh


AVISO IMPORTANTE
   Não utilize proteção recursiva com o Clamonacc (proteção em tempo real), pois ele praticamente deixará o sistema lento, podendo travar o sistema.

Pode ter múltiplos parâmetros OnAccessIncludePath:
OnAccessPrevention yes
OnAccessDisableDDD yes
OnAccessIncludePath /home
OnAccessIncludePath /home/usuario
OnAccessIncludePath /home/usuario/Downloads
OnAccessIncludePath /home/usuario/Downloads/pasta
   A configuração acima resultará na proteção não recursiva em tempo real dos diretórios, ou seja, o parâmetro "OnAccessIncludePath /home/usuario" somente protegerá em tempo real os arquivos que ali estiverem, mas não protegerá os diretórios (pastas) dentro de /home/usuario. Quaisquer tentativas de acesso detectadas pelo Clamonacc em arquivos maliciosos dentro de /home/usuario serão bloqueadas pelo Kernel através do fanotify, como veremos nos testes mais adiante.

   Para o tipo de proteção com bloqueio automático, os parâmetros básicos a serem habilitados são os seguintes:
OnAccessIncludePath /home/usuario/pasta
OnAccessExcludeUname clamav
OnAccessPrevention yes
OnAccessDisableDDD yes
   Com "OnAccessPrevention yes", ao tentar acessar um arquivo malicioso com, por exemplo, cat eicar.com, o ClamAV através do fanotify do Kernel emitirá uma notificação:
cat eicar.com
cat: eicar.com: Operação não permitida

   Com "OnAccessPrevention no", ao tentar acessar um arquivo malicioso, o acesso será permitido.

   Coloquei "OnAccessDisableDDD yes" porque o DDD falha em aplicar as marcações do Kernel recursivamente para diretórios que já existiam antes do serviço iniciar, então, para evitar conflitos, é melhor desabilitar e colocar as pastas que você quer que tenham bloqueio imediato.

   De qualquer maneira, você deverá ter um script para mover os arquivos infectados para a quarentena ou utilizar o parâmetro "--move=/caminho/quarentena", pois o ClamAV não faz esse tipo de controle.

   Clamscan, Clamonacc e Clamdscan incluem a opção "--remove" para excluir qualquer arquivo que gere alertas durante uma verificação. Isso geralmente é uma péssima ideia, a menos que você esteja monitorando um diretório de uploads/downloads. Falsos positivos acontecem! Você não quer que o arquivo errado seja excluído acidentalmente. Em vez disso, considere usar o parâmetro "--move" ou talvez apenas "--copy" e configure um script com o recurso "VirusEvent" para notificá-lo quando algo for detectado.


CASO 0x0


   Caso o usuário precise monitorar todo o sistema de arquivos, mas bloquear tentativas de acesso maliciosas não é uma preocupação:
OnAccessMountPath /
OnAccessExcludeRootUID yes
OnAccessExcludeUname clamav

   Essa configuração ativará o On-Access Scanner notify-only (apenas notificação). Ela também garantirá que apenas processos de usuário que não sejam root nem clamav, acionem verificações no sistema de arquivos. Os processos iniciados pelo root e pelo usuário do ClamAV (_clamav ou clamav) não acionarão verificações e, por conseguinte, notificações, ou seja, o ClamAV fará nada. Muitas vezes isso é necessário para evitar um loop em processos do root e/ou do usuário do ClamAV.

   Para mover os arquivos infectados para a quarentena e limpar a quarentena depois de um certo tempo, faz-se necessário um script, como veremos.

   O parâmetro OnAccessMountPath utiliza uma configuração de API fanotify diferente, o que o torna incompatível com OnAccessIncludePath e com o sistema DDD. Isso também significa que as seguintes opções não podem ser usadas em conjunto com OnAccessMountPath:

    • OnAccessExtraScanning - é construído em torno da captura de eventos inotify.
    • OnAccessExcludePath - é baseado no Sistema DDD.
    • OnAccessPrevention - trava o sistema se fosse selecionado para OnAccessMountPath.

   Se você precisar de OnAccessPrevention yes, use OnAccessIncludePath e OnAccessExcludePath.


CASO 0x1

   Caso o administrador do sistema precise monitorar o diretório pessoal de vários usuários, mas não de todos e não é necessário bloquear tentativas de acesso, mas somente notificar:
OnAccessIncludePath /home
OnAccessExcludePath /home/usario2
OnAccessExcludePath /home/usuario4
OnAccessExcludeUname clamav
   Com essa configuração, o On-Access Scanner monitorará recursivamente todo o diretório /home no modo notify-only, ou seja, somente notificação. Os diretórios /home/usuario2 e /home/usuario4 ficarão recursivamente fora da verificação.

   Para mover os arquivos infectados para a quarentena e limpar a quarentena depois de um certo tempo, faz-se necessário um script, como vimos.

Observação:
"OnAccessIncludePath /", ou seja, "OnAccessIncludePath" na raiz, NÃO é aceito como um parâmetro válido!



ClamAV no Linux

Verificando a configuração do kernel para a presença do fanotify:
cat /boot/config-`uname -r` | grep FANOTIFY
Atualizando e instalando:
sudo xbps-install -Syu
sudo xbps-install clamav
Verifique se o usuário e o grupo do ClamAV foram criados:
cut -d: -f1 /etc/passwd
cut -d: -f1 /etc/group
   Caso não tenha sido criado na tua distribuição, crie o usuário (no Void, ao instalar o ClamAV, o usuário e o grupo _clamav são criados automaticamente, então pode pular esses dois comandos):
sudo groupadd _clamav
sudo useradd -g _clamav -s /bin/false -c "Clam Antivirus" _clamav
   Se o seu sistema operacional não tiver os utilitários groupadd e useradd, instale-os.

Vamos remover a extensão do arquivo:
cd /etcsudo mv clamav-milter.conf.sample clamav-milter.confcd
Criando diretório para o soquete local e permissionando (verifique o nome correto de usuário):
sudo mkdir -p /var/run/clamav
sudo chown -R _clamav:_clamav /var/run/clamav && sudo chmod -R 750 /var/run/clamav

Fazendo Arquivos de Log

Para o Freshclam:
sudo touch /var/log/freshclam.logsudo chown _clamav:_clamav /var/log/freshclam.logsudo chmod 640 /var/log/freshclam.log
Para o Clamd:
sudo touch /var/log/clamd.log && sudo chown _clamav:_clamav /var/log/clamd.log && sudo chmod 640 /var/log/clamd.log
Colocando o diretório database com o dono correto (verifique se é _clamav ou clamav):
sudo chown -R _clamav:_clamav /var/lib/_clamav
sudo vim /etc/freshclam.conf
Veja artigo.
sudo vim /etc/clamd.conf
Veja artigo.
sudo echo 'fs.inotify.max_user_watches=104857600' | sudo tee /etc/sysctl.d/99-inotify.conf

AVISO
   O número ali são 100M convertidos em bytes. Esse número deve ser o mesmo do parâmetro OnAccessMaxFileSize. Caso você mudar o número do parâmetro OnAccessMaxFileSize deve executar esse comando novamente com o novo número.


QUARENTENA

Criando diretório e arquivo e permissionando:
sudo mkdir -p /var/opt/clamav-quarentenasudo touch /var/opt/clamav-quarentena/quarentena.logsudo chown -R _clamav:_clamav /var/opt/clamav-quarentenasudo chmod 700 /var/opt/clamav-quarentenasudo chmod 664 /var/opt/clamav-quarentena/quarentena.log
sudo vim /etc/fstab
   Adicione a seguinte linha no final para aplicar restrições estritas de segurança (noexec, nosuid e nodev impedem a execução de programas, binários SUID e criação de dispositivos):

...
/var/opt/clamav-quarentena /var/opt/clamav-quarentena none bind,noexec,nosuid,nodev 0 0

Montando imediatamente:
sudo mount -a
sudo vim /usr/local/bin/limpar-quarentena.sh
Veja artigo.

Permissionando:

sudo chmod +x /usr/local/bin/limpar-quarentena.sh && sudo chown _clamav:_clamav /usr/local/bin/limpar-quarentena.sh
sudo vim /usr/local/bin/monitor-quarentena.sh
Veja artigo.

Permissionando:

sudo chmod +x /usr/local/bin/monitor-quarentena.sh && sudo chown _clamav:_clamav /usr/local/bin/monitor-quarentena.sh
sudo ls -la /var/opt/clamav-quarentena
sudo vim /usr/local/bin/notificar-virus.sh
Veja artigo.
sudo chmod +x /usr/local/bin/notificar-virus.sh && sudo chown _clamav:_clamav /usr/local/bin/notificar-virus.sh

Logrotate
sudo xbps-install -S logrotatesudo vim /etc/logrotate.d/clamav-quarentena
Veja artigo.
sudo logrotate -d /etc/logrotate.d/clamav-quarentena
sudo vim /etc/logrotate.d/clamav
Veja artigo.
sudo logrotate -d /etc/logrotate.d/clamav

Atualizando banco de dados:
sudo ln -s /etc/sv/clamd /var/service/
sudo sv start clamd
sudo -u _clamav freshclam
ou
sudo -u clamav freshclam
sudo sv start clamd
Caso quiser pode executar novamente:
sudo -u _clamav freshclam
sudo ls -la /var/run/clamav/

Clamonacc
sudo mkdir -p /etc/sv/clamonaccsudo vim /etc/sv/clamonacc/run
Veja artigo.
sudo chmod +x /etc/sv/clamonacc/runsudo ln -s /etc/sv/clamonacc /var/service/sudo sv start clamonacc
Testando
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com
bash: /home/usuario/Downloads/eicar.com: Operação não permitida

   Isso deve acontecer porque no arquivo /etc/clamd.conf o caminho /home/usuario/Downloads está no OnAccessIncludePath.

Faremos com sudo:
sudo echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com
Tentando ler o arquivo:
cat ~/Downloads/eicar.com
cat: /home/usuario/Downloads/eicar.com: Operação não permitida
sudo cat ~/Downloads/eicar.com
cat: /home/usuario/Downloads/eicar.com: Arquivo ou diretório inexistente

Perceba que o arquivo foi movido para a quarentena:
sudo ls -la /var/opt/clamav-quarentena
sudo echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com
sudo cat ~/Downloads/eicar.com
cat: /home/usuario/Downloads/eicar.com: Operação não permitida
sudo cat ~/Downloads/eicar.com
cat: /home/usuario/Downloads/eicar.com: Arquivo ou diretório inexistente
sudo ls -la /var/opt/clamav-quarentena
sudo cat /var/opt/clamav-quarentena/quarentena.log

Testando Escaneamento
sudo echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com
sudo clamscan ~/Downloads/eicar.com
sudo echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com
sudo clamdscan --stream ~/Downloads/eicar.com
   Podemos ver que o clamonacc (Proteção em Tempo Real) não deixa nem o clascam e nem o clamdscan acessarem o arquivo virulento, nem com sudo e nem com o próprio usuário _clamav (ou clamav).

   Vamos comentar o diretório /home/usuario/Downloads no arquivo:
sudo vim /etc/clamd.conf

Comente

#OnAccessIncludePath /home/usuario/Downloads

sudo sv restart clamd
sudo sv restart clamonacc
sudo echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com
sudo clamscan ~/Downloads/eicar.com
cat ~/Downloads/eicar.com
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

   Obs.: Para o arquivo ser movido para a quarentena, o parâmetro "--move=/caminho/quarentena" deve ser passado no comando, como veremos logo adiante.
sudo echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com
sudo clamdscan --stream ~/Downloads/eicar.com
sudo clamscan ~/Downloads/
sudo clamdscan --stream --move=/var/opt/clamav-quarentena ~/Downloads/eicar.com
cat ~/Downloads/eicar.com
cat: /home/usuario/Downloads/eicar.com: Arquivo ou diretório inexistente
sudo echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com
sudo clamscan --move=/var/opt/clamav-quarentena ~/Downloads/eicar.com
cat ~/Downloads/eicar.com

cat: /home/usuario/Downloads/eicar.com: Arquivo ou diretório inexistente


Wrapper Clamscan

sudo vim /usr/local/bin/varredura.sh
Veja artigo.
sudo chown -R _clamav:_clamav /usr/local/bin/varredura.sh
Crie o arquivo de log das varreduras:
sudo touch /var/log/varredura.log
sudo chown _clamav:_clamav /var/log/varredura.log
sudo vim /etc/logrotate.d/clamav
Veja artigo.

Verificando:
sudo logrotate -d /etc/logrotate.d/clamav
   O parâmetro -d (modo debug) apenas imprime na tela tudo o que ele faria se estivesse rodando de verdade.

   Se você quer forçar a rotação dos logs agora mesmo, substitua o -d pelo parâmetro -f (force):
sudo logrotate -f /etc/logrotate.d/clamav
Se você quer ver o que ele está fazendo em tempo real enquanto executa de verdade, use o modo detalhado -v (verbose):
sudo logrotate -v /etc/logrotate.d/clamav
Testando o arquivo:
sudo /usr/local/bin/varredura.sh
ok: down: clamonacc: 1894s, normally up

Em outro terminal execute:
ps aux | grep clamscan

   Agora vamos testar um único diretório para comprovar.

   Tenho um diretório em ~/teste que sei que não tem vírus, vamos colocar o eicar para incrementar o teste:
sudo echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/teste/eicar.com
sudo vim /usr/local/bin/varredura.sh
Deixei essa parte assim, adapte para você:
# -------------------#
# Configuracao
# -------------------#
ALVOS=(
# "/"
# "/home"
# "/var/www"
# "/etc"
"/home/seu_usuario/teste"
# adicione mais diretorios aqui ou coloque para varrer o raiz (/) e adicione mais --exclude-dir abaixo
)

sudo /usr/local/bin/varredura.sh
cat ~/teste/eicar.com
cat: /home/usuario/teste/eicar.com: Arquivo ou diretório inexistente

Caso quiser dê:
cat /var/log/varredura.log
tail -n 10 /var/log/varredura.log


CRON
sudo -E crontab -e
ou
sudo EDITOR=vim crontab -e
ou
sudo EDITOR=nano crontab -e
ou
configure o ~/.bashrc permanentemente, senão o comando sudo crontab -e abrirá o vi por padrão no Void e você nunca mais sairá dele.


Para remover completamente:
sudo sv stop clamdsudo sv stop clamonaccsudo xbps-remove clamavsudo userdel _clamavsudo groupdel _clamavsudo umount /var/opt/clamav-quarentenasudo rm -rf /var/opt/clamav-quarentena
Não esqueça de comentar ou apagar a linha no /etc/fstab:
sudo vim /etc/fstab
sudo rm -rf /var/log/freshclam.logsudo rm -rf /var/log/clamd.logsudo rm -rf /var/run/clamavsudo rm /var/service/clamdsudo rm -rf /etc/sv/clamdsudo rm /var/service/clamonaccsudo rm -rf /etc/sv/clamonaccsudo rm -rf /etc/logrotate.d/clamav-quarentenasudo rm -rf /run/runit/supervise.clamdsudo rm -rf /run/runit/supervise.clamd-log
Opcional:
sudo rm -rf /etc/freshclam.confsudo rm -rf /etc/clamd.confsudo rm -rf /etc/clamav-milter.confsudo rm -rf /usr/local/bin/limpar-quarentena.shsudo rm -rf /usr/local/bin/monitor-quarentena.sh


Como vimos, não é difícil, mas é trabalhoso.

Em pouco tempo pega-se o jeito.

HTOP

Basta pressionar a tecla Shift + O e digitar COMMAND=clamonacc para filtrar apenas pelo processo, ou procurar por clamonacc na lista.


Comandos Úteis:
sudo find /var/opt/clamav-quarentena/ -type f -name ".clamav-quarantine-lock.*" -delete
tail -f /var/log/clamd.logsudo ls -la /var/run/clamav/sudo ls -la /var/log/clamav-quarentenasudo ss -lpx | grep clamdsudo ss -lpt | grep clamdgrep -E "^LocalSocket|^TCPSocket" /etc/clamd.confecho 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/Downloads/eicar.com; echo "Status: $?"
cut -d: -f1 /etc/passwdcut -d: -f1 /etc/groupgetent passwd | awk -F: '{print $1 " (UID: " $3 ") -> " $6}'
Para ver se a base de dados está na versão mais recente:
sigtool --info /var/lib/_clamav/main.cvd
File: /var/lib/_clamav/main.cvd
Build time: 16 Dec 2025 23:18 +0000
Version: 63
Signatures: 3287027
Functionality level: 90
Builder: tomjudge
MD5: 9c353a6b32555186a45a61c6441f38c0
Digital signature: gI9w3cezaElJbedEoiykyQeX1f6j9Xbs3a+cf9U/kH5QScGMe2mRz1K2JlYOrqfBuOUMbiKmvkVvAquOsMeDp/ejLVDx5WulC6klZVhLOfBHda29OjaLZwEGR9GPIHDr0mXriv7pivuMH60/loxpASIJHLOszyj95pxVK+EaTCh
Verification OK.

Ou
sudo sigtool --info /var/lib/_clamav/daily.cld
File: /var/lib/_clamav/daily.cld
Build time: 23 Sep 2026 06:24 +0000
Version: 28132
Signatures: 355666
Functionality level: 90
Builder: svc.clamav-publisher
Verification OK.


   O arquivo main.cvd é a base principal de assinaturas estáveis do ClamAV e é atualizado muito raramente (geralmente uma ou duas vezes por ano). A versão atual e mais recente globalmente é justamente a Versão 63, gerada pelo desenvolvedor tomjudge em 16 de dezembro de 2025 contendo as 3.287.027 assinaturas listadas na saída.

   O main.cvd continuará estático na versão 63 por algum tempo, enquanto o daily.cld mudará de versão e trará a data do dia atual toda vez que se rodar o Freshclam.

   O script de quarentena está operando sobre uma base de dados totalmente atualizada.

   Lembrando que as atualizações do Freshclam ocorrem automaticamente 2 vezes por dia conforme o parâmetro Checks 2 no arquivo /etc/freshclam.conf e uma terceira vez no dia se tu colocou no Cron.

   Quando ocorrem atualizações diárias, o Freshclam modifica apenas o arquivo daily.cvd (ou daily.cld).


Principais arquivos de banco de dados:

  • main.cvd: O banco estático principal.
  • daily.cvd (ou daily.cld): Este sim muda múltiplas vezes ao dia para incluir ameaças recentes (Ransomwares, Phishing e malwares novos).
  • bytecode.cvd: Atualizado esporadicamente para novas lógicas do motor de varredura.

Diretórios Temporários: (Os alvos nº 1) Estes são os locais mais comuns porque qualquer usuário do sistema (ou serviço web vulnerável, como um site em WordPress ou uma aplicação PHP) tem permissão total para gravar arquivos neles.
/tmp: O diretório temporário global. Praticamente 90% dos scripts automatizados de ataque (como mineradores de criptomoedas e bots de DDoS) fazem o download de seus binários aqui antes de executá-los.
/var/tmp: Semelhante ao /tmp, mas os arquivos aqui não são apagados quando o sistema reinicia. Atacantes usam este local para tentar manter persistência no servidor.
/dev/shm: Este é o diretório de memória compartilhada (Shared Memory). Arquivos colocados aqui rodam direto na memória RAM, o que os torna extremamente rápidos e, muitas vezes, invisíveis para ferramentas tradicionais de monitoramento de disco.

2)
Diretórios de Serviços Web e Uploads: Se o seu Linux roda um servidor web (Apache, Nginx) ou bancos de dados, o atacante explorará falhas na aplicação para injetar arquivos (geralmente Web Shells em PHP, Python ou Perl).
/var/www/html/ (ou subpastas de uploads como wp-content/uploads no WordPress): Onde códigos maliciosos são injetados para que o atacante possa controlar o servidor remotamente pelo navegador.
/var/spool/samba/ ou pastas de compartilhamento de rede: Se o Samba estiver mal configurado, malwares de Windows (como Ransomwares) podem ser depositados ali para infectar outros computadores da rede.

3)
Diretórios Ocultos nos Perfis de Usuários (/home): Quando o ataque visa especificamente a conta de um usuário (via roubo de senha SSH ou chave privada), os binários maliciosos costumam ser escondidos dentro de pastas ocultas na /home para evitar detecção visual simples (comandos ls comuns não as mostram).
/home/usuario/.config/ ou /home/usuario/.local/: Pastas legítimas onde malwares se disfarçam de arquivos de configuração do sistema.
/home/usuario/.ssh/: Embora não coloquem o malware aqui, os atacantes injetam chaves públicas no arquivo authorized_keys desta pasta para garantir que possam reentrar no sistema quando quiserem, sem precisar de senha.

Nenhum comentário:

Postar um comentário