segunda-feira, 7 de agosto de 2023

Permissões no Linux

INTRODUÇÃO

Há uma diferença entre o superusuário (root) e o dono de um diretório (que alguns chamam de pasta) e/ou arquivo. Por exemplo, temos o usuário VOL (ou Fabio, ou Clodoaldo, ou Samuel, etc) que é criado ao instalar o sistema operacional Linux (seja ele Debian, Slackware, Kali, Ubuntu, Red Hat, etc) e você escolhe o nome que quiser para o usuário.

Este usuário não é o superusuário (a superusuário é o root [raiz]). O root é uma coisa, o usuário é outra coisa. O root pode ser qualquer pessoa que tenha a senha de root e acesse com "su -", "su", "sudo", etc, no terminal. Já veremos os comandos.

Nos diretórios e arquivos do Linux temos, grosso modo, três níveis: Dono, Grupo e Outros. Quem define, basicamente, as permissões para o Dono, para o Grupo e para os Outros é o root.

Aí surgem duas perguntas:
1. QUEM TEM PRECEDÊNCIA NAS PERMISSÕES: O DONO, O GRUPO OU OS OUTROS?
As permissões de um diretório têm precedência sobre as dos arquivos que ele contém. O Linux não deixa o Dono brigar com o Grupo e com os Outros. As permissões do Usuário/Dono, do Grupo e dos Outros são distintas, separadas, e você, sendo o cara que usa o sistema, tem de estar ciente disso, tem de raciocinar com os três níveis de permissão, principalmente com o Dono e o Grupo.

2. E SE EU SETAR UMAS PERMISSÕES PARA O DONO E OUTRAS DIFERENTES PARA O GRUPO?
O Linux não deixa isso acontecer. Caso você sete permissões somente para o Dono, por exemplo, as permissões para o Grupo continuam as mesmas, caso você setar permissões para o Grupo sem o parâmetro -R (recursivamente, veremos adiante) as permissões para os arquivos dentro do Grupo permanecem as mesmas e o Linux não deixa criar conflito, não deixa o Dono brigar com o Grupo e com os Outros.

Não confunda root com o Dono do diretório e/ou arquivo. O Dono é o dono, é como o Highlander, só pode haver um para diretórios e/ou arquivos. O Grupo é um conjunto de usuários colocados ali pelo root ou pelo proprietário, mas no fim das contas é o tal de root quem decide - como vimos -, e o root pode ser qualquer um que tenha a senha de superusuário (root). Os Outros são os outros, são todos aqueles que não são Dono e não fazem parte da patota do Grupinho decidido pelo root ou pelo dono.

No Linux, um arquivo ou diretório pode ter apenas um proprietário/dono e um grupo proprietário, não sendo possível ter dois proprietários. O proprietário/dono é o usuário que criou o arquivo ou diretório e tem direitos de acesso especiais a ele, como permissão de modificá-lo ou excluí-lo; ou é um usuário que não criou o diretório.

DESENVOLVIMENTO 1

Até aqui, é importantíssimo entender que o root é uma coisa e o Dono de diretórios e arquivos é outra; são distintos.

O root está acima do Dono, do Grupo e dos Outros. O root é o cara! E esse cara pode ser qualquer um (que tenha a senha de root)!

Por exemplo, o usuário lebowski é um cara chamado João Muhammad Wang da Silva (na instalação do sistema ele poderia ter colocado o nome do usuário de João, de Muhammad, de Wang, de Silva, etc, mas preferiu colocar o nome de lebowski). E este usuário lebowski, que é o CPF João Muhammad Wang da Silva, é o Dono lebowski de algum diretório e/ou arquivo e pode fazer parte de um Grupo ou pode ser os Outros em relação a algum diretório e/ou arquivo. Quem decide é o root.

Então, a pessoa João Muhammad Wang da Silva como root pode colocar o usuário lebowski (ele mesmo) como Outros em um determinado diretório e/ou arquivo, bem como pode colocar como Dono ou colocar na patota, no Grupo.

O importante é entender que você como root deve abstrair do mundo e a partir daí enxergar você mesmo como um usuário qualquer, ou seja, neste momento você é o root, é o cara; você não é o lebowski, sequer você é o João Muhammad Wang da Silva... você nem é você mesmo: você é o root.

O lebowski, neste momento, é um usuário que o root manipula como quiser e você é o root... pelo menos até deslogar do root e voltar a ser o lebowski com seus poderes limitados, sem poderes de super-vaca.

No Linux temos R de Read (em Português "Leitura"), W de Write (em Português "Escrita", mas entende-se aqui por Escrita/Gravação) e temos X de Execute (Execução).

Leitura - Concede a capacidade de ler, ou seja, visualizar o conteúdo do arquivo.

Escrita/Gravação - Entende-se aqueles diretórios e arquivos os quais um determinado usuário pode alterar, escrever e gravar no arquivo; concede a capacidade de modificar ou remover o conteúdo do arquivo; é a permissão mais cabulosa das três.

Execução - O usuário com permissões de execução pode executar um arquivo como um programa.

E temos os modos de acesso concernentes às permissões:

Ler
O acesso a um diretório significa que o usuário pode ler o conteúdo. O usuário pode ver os nomes dos arquivos dentro do diretório.

Escrever
Significa que o usuário pode adicionar ou excluir arquivos do diretório e pode modificar o conteúdo de um arquivo.

Executar
A execução de um diretório ou arquivo realmente não faz sentido na forma de acesso ao diretório ou arquivo, então pense nisso como uma permissão de passagem (não passageira, mas de passagem, atravessar). Por exemplo, um usuário deve ter acesso de execução ao diretório bin para executar o comando ls ou cd.

Então não confunda as permissões de forma geral com as permissões dos modos de acesso, isso reflete-se ao que veremos adiante com chown (change owner) e chmod (change mode).

Porém, antes temos o seguinte esquema:

  • 0 Sem permissões --- = 0
  • 1 Permissão de Execução --x = 1
  • 2 Permissão de Escrita -w- = 2
  • 3 Permissão de Escrita e Execução: 1 (execute) + 2 (write) = 3 -wx
  • 4 Permissão de Leitura r-- = 4
  • 5 Permissão de Leitura e Execução: 4 (read) + 1 (execute) = 5 r-x
  • 6 Permissão de Leitura e Escrita: 4 (read) + 2 (write) = 6 rw-
  • 7 Todas as Permissões: 4 (read) + 2 (write) + 1 (execute) = 7 rwx

  • R de Read (Leitura) recebe o valor 4.
  • W de Write (Escrever/Gravar) recebe o valor 2.
  • X de Execution (Execução) recebe o valor 1.

Recebem esses valores (números) porque foram convencionados, apesar de que isso remonta aos primórdios de bits e bytes, mas não vem ao caso.

Neste momento, você, neófito, pode estar se perguntando: "Agora colocaram números no meio da parada?" Mas é simples, é o formato octal (são oito algarismos de 0 a 7). O formato octal é um conjunto de oito números onde cada número define um tipo de acesso diferente.

O hífen (tracinho) indica que uma determinada permissão não está configurada, ou seja, o usuário não tem aquela permissão.

Veremos agora a saída do comando ls -l para vermos algumas permissões como exemplo.

# ls -l

total 52
-rw-r--r-- 1 root root 9644 abr 5 02:54 clamav-milter.conf
-rw-r--r-- 1 root root 26117 abr 5 02:54 clamd.conf
-rw-r--r-- 1 root root 5983 abr 5 02:54 freshclam.conf
drwxr-xr-x 12 root root 4096 mar 13 20:34 nftables
-rw-r--r-- 1 root root 0 mar 13 19:14 packages.txt


Vamos analisar a primeira parte da seguinte linha:

drwxr-xr-x 12 root root 4096 mar 13 20:34 nftables

  • Tem 10 caracteres no começo da linha (drwxr-xr-x).
  • Inicia com "d" que significa que é um diretório, os outros nove são as permissões propriamente ditas, três para cada: Dono, Grupo e Outros. rwx (dono), r-x (grupo) e r-x (outros).
  • O hífen, no caso, não é um separador, ele indica quando uma permissão não está configurada e as permissões aparecem em sequência rwx.


Traduzindo para octal:

  • rwx é 4+2+1 = 7.
  • r-x é 4+1 = 5
  • r-x é 4+1 = 5

Em octal a permissão é 755.

Aí você escolhe se quer trabalhar umas vezes com letras (rwx) e outras com números (421).

Esta linha:
-rw-r--r-- 1 root root 5983 abr 5 02:54 freshclam.conf

Tem os 10 caracteres iniciando com um hífen (traço) que estando no início da linha indica se tratar de um arquivo.

Seguindo o esquema r=4, w=2 e x=1 temos os nove caracteres restantes que são as permissões propriamente ditas:

rw- = 4+2 = 6
r-- = 4
r-- = 4

Permissão 644.

Lembrando que muitas vezes um programa ao ser instalado ele muda as permissões padrões do sistema operacional para suas próprias permissões, mas é para isso mesmo que existem os comandos, principalmente como root, para você alterar tudo e bagunçar todo o sistema.

# ls -l
lista as permissões dos diretórios e arquivos.

Caso queira listar um diretório ou arquivo em específico:
# ls -l nome_do_arquivo ou diretorio

Não me deterei em comandos aqui, pois temos que entender a lógica da coisa antes de ser um mero decorador de comandos. Os comandos você memoriza praticando e os manuais estão aí para auxiliar.

Dando um umask -S no mesmo lugar:
# umask -S u=rwx,g=rx,o=rx

u=usuário=dono, g=grupo e o=outros.

Podemos ver a diferença. A saída do umask refere-se às permissões padrões em relação ao sistema e a saída do ls -l refere-se aos diretórios e arquivos.

Em qualquer lugar (diretório) que você for, a saída do umask -S será sempre a mesma. Vá dando cd /home, cd /usr/src, cd /bin/X11, etc, e dando umask -S e verá que a saída é sempre a mesma.

A saída de ls -l muda de acordo com as permissões de cada diretório e arquivo.

Quando aparecer uma linha assim:
lrwxrwxrwx 1 root root 4 mar 18 17:58 zstdmt -> zstd

O "l" (letra éle) no início dos 10 caracteres indica se tratar de um link simbólico (symlink).

Agora ficou fácil de entender as permissões, a linha aí de cima tem as permissões:
  • rwx - Dono;
  • rwx - Grupo;
  • rwx - Outros.
Permissão 777.

Depois do primeiro caractere à esquerda começam as permissões que são nove caracteres e quando tem hífen nos nove caracteres indica que tal permissão (r, w ou x) não está setada.

No primeiro caractere:

  • d -> indica que é um diretório;
  • hífen(-) -> indica que é um arquivo;
  • l -> indica que é um link simbólico.

  • Vamos ver o significado de toda a linha:

    drwxr-xr-x 12 root root 4096 mar 13 20:34 nftables
    • d = tipo do arquivo (é um diretório)
    • rwxr-xr-x = permissões de acesso ao diretório ou arquivo ou symlink
    • 12 = número total de links para o arquivo ("atalhos") somado com o número de diretórios e arquivos dentro do diretório em questão
    • root = usuário proprietário do arquivo
    • root = grupo do arquivo
    • 4096 = tamanho do arquivo em bytes
    • mar = mês da última modificação
    • 13 = dia da última modificação
    • 20:34 = horário da última modificação
    • nftables = nome do arquivo ou diretório


    ALTERANDO PERMISSÕES

    # chmod 444 diretorio ou arquivo
    ou
    sudo chmod 444 diretorio ou arquivo

    Podemos aplicar uma permissão recursivamente com o parâmetro "-R" de forma que todo o diretório e subdiretórios e arquivos também recebam esta permissão. Exemplo:

    # chmod -R 750 diretorio ou arquivo
    Obs.: A opção -R muda as permissões de TODOS os diretórios e arquivos que estão dentro do diretório. Por exemplo:

    # chmod -R 777 nftables
    mudará as permissões de TODOS os diretórios e arquivos incluindo os arquivos dentro dos diretórios dentro de nftables, TUDO ficará com as permissões 777. Use com cuidado.

    ALTERANDO O DONO

    Sintaxe:
    chown [opções] [novo_proprietário] [:novo_grupo] nomes_arquivos

    Alterar o dono do diretório ou arquivo para o usuário lebowski:
    # chown lebowski diretorio ou arquivo

    Alterar o usuário (dono) e o grupo do diretório ou arquivo para dono lebowski e grupo patota:
    # chown lebowski:patota nome_do_diretorio ou nome_do_arquivo

    Vamos ver um pouco mais na realidade:
    # adduser lebowski www-data
    # cd /var/www
    # chown -Rv www-data:www-data /var/www/
    # chmod -Rv g+rw /var/www/

    O comando adduser foi usado para colocar o usuário lebowski no grupo www-data, a patota do Apache.
    Depois o root entrou (cd, change directory) no diretório /var/www.

    O comando chown (change owner) atribuiu os arquivos contidos em /var/www para o usuário e grupo www-data, ou seja, colocou o usuário www-data como dono e colocou o /var/www no grupo www-data. E atribuiu recursivamente (-R) e verbosamente (v dá informações na saída do comando).

    Pode ter um usuário e um grupo com o mesmo nome, mas não pode ter dois usuários com o mesmo nome e nem dois grupos com o mesmo nome.

    • chown define quem é o proprietário do arquivo ou diretório.
    • chmod define quem tem permissão de fazer outras coisas dentro do arquivo ou diretório.

    O comando chmod (change mode) adicionou permissões de leitura (r) e escrita (w) aos arquivos para os grupos a que pertencem, no caso www-data.

    Percebam que pode ter mais de uma sintaxe:

    # chmod g+rw diretorio ou arquivo
    # chmod 755 diretorio ou arquivo

    • g+rw acrescenta essas permissões, caso não tenham.
    • g-rx tira essas permissões, caso tenham.
    • g=x elimina todas as permissões que tem no grupo e deixa com somente permissão de execução (x).

    A mesma coisa com:
    • u+rwx;
    • u-rx;
    • u=r.

    Lembrando:
    • u = Usuário/Dono;
    • g = Grupo;
    • o = Outros.


    DESENVOLVIMENTO 2

    Em relação ao bit "Set-User-ID" citado anteriormente de passagem (tema de casa para quem tiver interesse), caso der o comando abaixo:


    # chmod us arquivo.txt
    ativa o bit SUID e faz com que qualquer um que tente acessar esse arquivo o fará como sendo o proprietário do arquivo.


    E se der o comando abaixo:
    # chmod a=rw arquivo.txt

    dará permissão de leitura e escrita para todos ao arquivo.txt (a de all, todos em Português).


    Testando algumas coisas


    No diretório root crie um diretório:
    # mkdir teste

    e dê um ls -l

    # ls -l teste
    total 0

    Entre no teste:
    # cd teste

    Crie um arquivo dentro do diretório teste:
    # vim teste1

    Usei o vim, use teu editor de texto preferido.

    Digite qualquer coisa dentro do arquivo. Salve e saia.

    Volte ao root:
    # cd

    Dê um ls -l:
    # ls -l teste
    total 4
    -rw-r--r-- 1 root root 6 abr 15 20:50 teste1


    E vemos que o arquivo teste1 foi criado com as permissões padrões do umask para arquivos txt.

    Vamos criar um diretório dentro de teste:
    # cd teste
    # mkdir teste2

    Entrando no diretório teste2:
    # cd /teste/teste2

    Vamos criar um arquivo dentro de teste2:
    # vim teste3

    Digite qualquer coisa dentro, salve e saia.

    Volte ao root:
    # cd

    Dê um ls -l no diretório teste:
    # ls -l teste
    total 8
    -rw-r--rr-- 1 root root 6 abr 15 20:50 teste1
    drwxr-xr-x 2 root root 4096 abr 15 20:58 teste2

    O comando não exibiu o arquivo dentro de teste2 porque não estamos no diretório teste2.

    Percebam que as permissões padrões criadas para o diretório teste2 são diferentes das permissões do arquivo teste1, isso acontece porque o Linux cria permissões padrões diferentes para diretórios e arquivos.

    Os diretórios, dentro da estrutura Linux, recebem umas permissões padrões e os arquivos outras, dependendo se o arquivo é texto ou binário.

    A umask (user mask, máscara do usuário, grosso modo) é somente um padrão que pode ser alterado pelo root. Um diretório tem permissão de execução para que se possa entrar nele. Além disso, as permissões de um diretório tem precedência sobre as dos arquivos que ele contém.

    Caso você alterar as permissões do diretório teste2 sem o parâmetro -R (recursivamente), as permissões do arquivo teste3 permanecerão as mesmas.

    Caso você der um chmod 0 teste2:
    # chmod 0 teste2

    verá que o diretório teste2 ficará sem permissão nenhuma, mas o arquivo dentro continuará com as permissões anteriormente definidas.


    Mas vamos entender mais um pouco.

    # ls -l
    -rw-r--rr-- 1 root root 6 abr 15 20:50 teste1
    d--------- 2 root root 4096 abr 15 20:58 teste2

    Agora vamos dar um:

    # ls -l teste2

    A saída será:
    total 4
    -rw-r--r-- 1 root root 6 abr 15 20:50 teste3


    Isso acontece por que o comando "ls -l teste2" mostra somente as permissões do que está dentro do diretório teste2.

    Para vermos as permissões de teste2 devemos digitar o comando ls -l sem parâmetros:
    # ls -l
    -rw-r--rr-- 1 root root 6 abr 15 20:50 teste1
    d--------- 2 root root 4096 abr 15 20:58 teste2

    Também temos o arquivo /etc/sudoers (man sudoers) que em sistemas Debian e derivados, além de alguns outros não derivados do Debian, é o arquivo que determina os privilégios de sudo.

    A man page sudoers (Manual do sudoers) descreve também o grupo wheel.

    Em sistemas Debian e derivados o grupo é chamado de sudo e em outros sistemas como Red Hat e derivados o grupo é chamado de wheel.

    No arquivo /etc/sudoers do Debian, por exemplo, sequer toca no nome da patota do wheel.

    Quando você usa sudo, su, etc, na realidade você está quase como root.

    Para estar como root mesmo - o todo poderoso superusuário com plenos poderes de super-vaca - você precisa logar como root na inicialização do sistema. Porém, isto não é aconselhável e nem é necessário.

    Entendendo um pouco as linhas do /etc/sudoers:

    1. ALL=(ALL:ALL) ALL
    O primeiro ALL representa todos os hosts, o segundo ALL indica todos os usuários e o terceiro ALL indica todos os grupos. O último ALL representa todos os comandos. Dar estes privilégios a um usuário o coloca no grupo sudo e o mesmo não precisa mais digitar a senha antes de um comando específico com sudo. E se não estiver na patota do sudo dará a mensagem: lebowski não está no arquivo sudoers.

    2. ALL=(ALL) ALL
    O primeiro ALL representa todos os hosts, o segundo ALL indica todos os usuários, como não tem o terceiro ALL o usuário colocado com estes privilégios não poderá executar comandos como outros grupos. O último ALL representa todos os comandos.

    Para abrir o arquivo /etc/sudoers com o editor de texto padrão do sistema execute o comando:

    $ sudo visudo

    Senão use o teu editor preferido:

    # vim /etc/sudoers

    Podes colocar o seguinte para teu usuário:
    ALL=(ALL:ALL)     NOPASSWD:   ALL

    Salve e saia. Não precisará mais digitar senha com sudo, exemplo:

    $ sudo apt-get update

    ou qualquer outro comando que precise de privilégios root não pedirá senha nunca.


    CURIOSIDADE IMPORTANTE

    No Debian e derivados se você digitar como usuário su ou su - verá a diferença no terminal:

    $ su

    digitando a senha mudará para:

    #

    As inicias "su" em si significam "Substitute User", substitui o ID do usuário e do grupo, ou seja, você entra temporariamente nessa condição.


    su sem parâmetro mudará para o usuário em que está (no caso acima estava em lebowski). É a mesma coisa que digitar:

    $ su lebowski

    Para mudar de usuário:

    $ su postgres

    $ su usuario etc

    A senha que pedirá é a senha do usuário, não é a senha de root ou do seu usuário, no caso, lebowski.

    Caso der falha de autenticação provavelmente é por que você não cadastrou senha para o usuário, ele só foi criado, mas não tem senha.

    $ sudo passwd usuario

    e digite a senha do seu usuário para logar e depois digite as duas senhas para o usuário.

    Para mudar para outro usuário com ou sem poderes de root depende em qual grupo o usuário foi colocado. Caso estiver no grupo sudo terá privilégios de root.

    Basta digitar su seguido do nome do usuário que se quer.

    O su - (com hífen) sem parâmetro entra no root com o diretório home do usuário que se logou com o su.

    Pode utilizar também o comando usermod para inserir usuários, mudar diretórios, etc.

    Mudando o nome lebowski para grande_lebowski:
    # usermod -l lebowski grande_lebowski


    Para trancar uma conta:
    # usermod -L lebowski

    Utilize a opção -U para destrancar:
    # usermod -U lebowski

    Para criar um usuário e um diretório /home para o novo usuário use a opção -m no comando:
    # useradd -m grande_lebowski


    CONCLUSÃO

    Como vimos, é simples entender as permissões do Linux.

    Procurei fazer uma abordagem geral, mas com certeza faltou alguma coisa, pois o assunto é extenso.

    Muita gente confunde o Dono do diretório ou arquivo com o root, apesar de que o root pode ser (e é) dono de diretórios e arquivos, mas tem essa distinção.

    Considerando o Dono e o Grupo pode-se setar as permissões ou restrições de acordo com o que você quer. Por exemplo, em relação ao Samba sempre há aquela dúvida entre as permissões do Samba e as permissões do sistema em si, porém, você entendendo isso agora as coisas ficam mais claras.

    O root é o superusuário, é o cara.

    Aquele usuário que você dá o nome durante a instalação nem é você quando você está como root, nessa hora você é o root.

    É Importante também entender o que significam as permissões de Leitura, Escrita e Execução, como vimos.

    Quando você usa sudo, su, etc, na realidade você está quase como root.

    O aconselhável é usar, por exemplo, o sudo e digitar a senha cada vez que for pedida no terminal, pois assim você tem tempo de pensar antes de fazer bobagem no sistema.

    Em sistemas Debian e derivados o grupo é chamado de sudo e em outros sistemas como Red Hat e derivados o grupo é chamado de wheel.

    Para estar como root mesmo - o todo poderoso superusuário com plenos poderes de super-vaca - você precisa logar como root na inicialização do sistema, porém, isto não é aconselhável e nem é necessário.

    Mais exemplos de como lidar com as permissões no Linux encontramos nos links das referências abaixo:

    sexta-feira, 4 de agosto de 2023

    Antivírus ClamAV com Proteção em Tempo Real e Interface Gráfica

    Instalação e configuração do antivírus ClamAV com arquivos de configurações, On-Access Scanning (proteção em tempo real), várias assinaturas de bancos de dados e interface gráfica (ClamTk).


    INTRODUÇÃO

       Leia todo o artigo antes de sair executando comandos, a não ser que você saiba o que está fazendo!

       Nenhum software se feriu durante a realização do artigo!

       Siga os comandos na sequência apresentada no artigo, pois o ClamAV é sensível e se ofende por qualquer coisa... já grita ERROR ERROR ERROR! Porém, depois de instalado, configurado e funcionando redondo ele é bastante estável e não apresenta erros... até surpreende pela estabilidade.

       O artigo ficou extenso, mas depois de ler e executar uma vez você verá que é simples e rápido instalar e fazer a manutenção do ClamAV, são poucos comandos e você poderá usar também a interface gráfica que, apesar de ser bastante básica, é uma mão na roda.

       ClamAV é um kit de ferramentas antivírus de código aberto (GPLv2) projetado especialmente para verificação de e-mail em gateways 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 é fornecido pela Cisco Systems, Inc.

       Antivirus para Linux ainda não se faz muito necessário, pois o Linux é modular, caso você pegar um vírus ele se restringirá a somente uma pequena parte do sistema. Além disso, poucos tem interesse em fazer vírus para Linux, pois quem faz vírus, ransomware, etc, pretende levar uma vantagem financeira e como o Linux não é muito usado em desktop não há interesse. Em servidores, que são a maioria baseados em UNIX/Linux no mundo todo, conta-se com a proteção do firewall, um bom filtro de pacotes e o sistema de permissões dos diretórios e arquivos que fornecem quase a totalidade da proteção necessária. E mais além disso, no caso de vírus e ransomware, na esmagadora maioria das vezes o principal responsável é o usuário que entra em certos sites duvidosos e clica em cima de links, executa arquivos, etc, sem o menor cuidado, muitas vezes levado por ganância financeira e/ou desejo sexual.

       Porém, um antivírus como o ClamAV fornece uma camada extra de proteção, principalmente para quem gosta de acessar certos sites duvidosos e, neste caso, tanto faz se for Linux, Windows, macOS, etc.

       E, como já foi dito, o ClamAV é projetado especialmente para verificação de e-mail em gateways de e-mail.


    IMPORTANTE

       Para ter On-Access Scanning (proteção em tempo real) requer um sistema executando um kernel Linux versão >= 3.8 com fanotify compilado, sem o fanotify não rola o On-Access Scanning.

       Segundo o que está na página oficial do ClamAV (link ao final do artigo):

       "On-Access Scanning The ClamOnAcc application provides On-Access Scanning for Linux systems. On-Access Scanning is a form of real-time protection that uses ClamD to scan files when they're accessed."

      "Varredura ao acessar O aplicativo ClamOnAcc fornece varredura ao acessar para sistemas Linux. A varredura ao acessar é uma forma de proteção em tempo real que usa o ClamD para verificar os arquivos quando eles são acessados."

       O ClamAV não tem aquela proteção que fica o tempo todo "escaneando" o computador (aliás, antivírus nenhum tem, mas isso é passível de discussão), ele somente escaneia o diretório e/ou o arquivo quando ele é acessado, o que não é muito diferente.

       O cliente ClamOnAcc para o daemon de varredura ClamD fornece varredura no acesso em versões modernas do Linux. Isso inclui um recurso opcional para bloquear o acesso ao arquivo até que um arquivo seja verificado (prevenção no acesso). E o ClamAV é um glutão de memória, ele sozinho consome 3GB de RAM só existindo. Executando processos pode chegar a 5GB de RAM só para ele. Porém, com as configurações aqui presentes consegui reduzir para 2GB ele sozinho e 3GB com processos de escaneamento ocorrendo. Apesar de que isso é relativo atualmente, pois como os softwares gráficos vão se atualizando, cada vez mais faz-se necessário mais memória RAM.

       Caso você não tenha muita memória RAM com seu Linux sugiro não habilitar o On-Access Scanning, faça uma instalação básica do ClamAV (link ao final do artigo), mas ainda assim ele consumirá, no mínimo, 2GB de RAM só para ele.

    root@debina:~# free --mega
                                 total     usada        livre     compart.     buff/cache    disponível
    Mem.:                25183      3054     21201             111             1378           22128
    Swap:                  1999            0       1999


       Vejam que tem 24GB de RAM e 3054MB usados (~3GB), sendo que tem instalado o sistema Debian 12, Apache2, PostgreSQL, PHP, Nftables, Netbeans, Filezilla, Google Chrome, Firefox e o ClamAV, além de outros programas.

     Figura 01 - Pelo htop podemos ver o On-Access Scanning (proteção em tempo real) em ação.


    INSTALAÇÃO

       Aqui será demonstrada a instalação no Debian (e derivados), mas você pode usar o pacman, o dnf, o zypper, etc, sempre verificando os caminhos dos arquivos, pois podem ser diferentes na sua distribuição.

       O ClamAV tem nos repositórios da maioria das distribuições e pode ser instalado pelo gerenciador de pacotes. Quem quiser a versão mais atual do ClamAV visite o site https://www.clamav.net/downloads e baixe a versão correspondente ao teu sistema e faça a instalação manual.

    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, só 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, mas não será mostrado aqui pois demanda tempo e não é o escopo do artigo. Porém, você pode instalar o ClamAV mesmo assim e colocar para escanear o PC duas ou três (ou mais) vezes por dia através do cron.

    Instalando dependências:

    # apt-get install arc arj bzip2 cabextract lhasa lzop nomarch p7zip-full pax rpm tnef unrar-free unzip zip

    Instalando

    # apt-get install clamav clamav-base clamav-daemon clamav-docs clamav-freshclam clamav-milter
    # aptitude install clamav-unofficial-sigs <<< banco de dados não oficial, mas interessante e não prejudica nada.

    Para atualizar manualmente o clamav-unofficial-sigs:
    clamav-unofficial-sigs.sh

       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 muito necessário. Para Desktop não precisa instalar, mas vai do seu gosto.

       Aqui foi instalado o clamav-milter por uma questão de o artigo ficar mais completo, mas você pode escolher não instalá-lo para economizar memória RAM.

    Caso você instalá-lo e depois queira remover:

    # apt-get remove clamav-milter
    # apt autoremove

    Ou nem coloque o clamav-milter no comando abaixo:
    # apt-get install clamav clamav-base clamav-daemon clamav-docs clamav-freshclam clamav-milter

    Deixaremos para instalar o clamTK (interface gráfica) no final.

    Iniciando, habilitando e parando:

    # systemctl start clamav-freshclam && systemctl enable clamav-freshclam && systemctl stop clamav-freshclam
    # systemctl start clamav-daemon && systemctl enable clamav-daemon && systemctl stop clamav-daemon
    # systemctl start clamav-milter && systemctl enable clamav-milter && systemctl stop clamav-milter

     Verifique se os arquivos freshclam.conf, clamd.conf e clamav-milter.conf estão dentro da pasta /etc/clamav:

    # cd /etc/clamav
    # ls


    ARQUIVO FRESHCLAM.CONF

       Os arquivos freshclam.conf e o clamd.conf são os arquivos principais de configurações do ClamAV antivírus. Lembrando que na instalação básica (link ao final do artigo) configura-se somente o freshclam.conf.

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

       Ao executar o freshclam o programa buscará uma atualização no endereço especificado na linha DatabaseMirror e caso não encontre ele passará para o endereço subsequente até encontrar e baixar as atualizações. Depois ele executará todas as DatabaseCustomURL. O arquivo em si ficou gigantesco, mas cada atualização completa demora em média apenas 2 a 3 minutos dependendo do seu PC e da sua banda de internet.

    WARNING

    "The mirrors reserve the right to block your IP address, if you are downloading too many times per hour or are abusing their servers/bandwidth in any way."

    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.

       O arquivo abaixo está configurado para atualizar as assinaturas (banco de dados de porcarias, vírus, malware, etc) duas vezes por dia (parametro Checks 2). O padrão é Checks 24 (24 vezes por dia), mas leva em conta somente as assinaturas do próprio ClamAV.

       Vamos adicionar mais repositórios no freshclam.conf (verifique o caminho onde foi instalado o ClamAV, no Debian é em /etc/clamav).

       Antes faça um backup do arquivo original.

    # mv /etc/clamav/freshclam.conf /etc/clamav/freshclam.conf.bkp

       Segue o arquivo gigantesco com as configurações abaixo (está completo com espelhos de todo lugar para malware, spam, phishing, etc). Nem precisa de tudo isso, mas depois, caso você queira, pesquise e diminua e/ou altere o arquivo de acordo com as tuas necessidades.

    # vim /etc/clamav/freshclam.conf <<< usei o vim use teu editor de texto preferido.


    # INÍCIO DO ARQUIVO
    #    
    # Automatically created by the clamav-freshclam postinst
    # Comments will get lost when you reconfigure the clamav-freshclam package
    #
    DatabaseOwner clamav
    UpdateLogFile /var/log/clamav/freshclam.log
    LogVerbose false
    LogSyslog false
    LogFacility LOG_LOCAL6
    LogFileMaxSize 0
    LogRotate true
    LogTime true
    Foreground false
    Debug false
    MaxAttempts 5
    DatabaseDirectory /var/lib/clamav
    DNSDatabaseInfo current.cvd.clamav.net
    ConnectTimeout 30
    ReceiveTimeout 0
    TestDatabases yes
    ScriptedUpdates yes
    CompressLocalDatabase no
    Bytecode true
    NotifyClamd /etc/clamav/clamd.conf
    # Check for new database 2 times a day
    Checks 2
    DatabaseMirror db.local.clamav.net
    DatabaseMirror database.clamav.net
    #
    DatabaseMirror db.br.clamav.net
    DatabaseMirror db.ar.clamav.net
    DatabaseMirror db.at.clamav.net
    DatabaseMirror db.au.clamav.net
    DatabaseMirror db.be.clamav.net
    DatabaseMirror db.bg.clamav.net
    DatabaseMirror db.ca.clamav.net
    DatabaseMirror db.ch.clamav.net
    DatabaseMirror db.cn.clamav.net
    DatabaseMirror db.cz.clamav.net
    DatabaseMirror db.de.clamav.net
    DatabaseMirror db.dk.clamav.net
    DatabaseMirror db.ec.clamav.net
    DatabaseMirror db.ee.clamav.net
    DatabaseMirror db.es.clamav.net
    DatabaseMirror db.fr.clamav.net
    DatabaseMirror db.gr.clamav.net
    DatabaseMirror db.hk.clamav.net
    DatabaseMirror db.hu.clamav.net
    DatabaseMirror db.id.clamav.net
    DatabaseMirror db.ie.clamav.net
    DatabaseMirror db.it.clamav.net
    DatabaseMirror db.jp.clamav.net
    DatabaseMirror db.kr.clamav.net
    DatabaseMirror db.lt.clamav.net
    DatabaseMirror db.mx.clamav.net
    DatabaseMirror db.nl.clamav.net
    DatabaseMirror db.pl.clamav.net
    DatabaseMirror db.pt.clamav.net
    DatabaseMirror db.ro.clamav.net
    DatabaseMirror db.ru.clamav.net
    DatabaseMirror db.se.clamav.net
    DatabaseMirror db.sg.clamav.net
    DatabaseMirror db.sk.clamav.net
    DatabaseMirror db.tr.clamav.net
    DatabaseMirror db.tw.clamav.net
    DatabaseMirror db.ua.clamav.net
    DatabaseMirror db.uk.clamav.net
    DatabaseMirror db.us.clamav.net
    #
    # Argentina
    DatabaseMirror clamav.md5.com.ar
    #
    # Australia
    DatabaseMirror clamav.island.net.au
    DatabaseMirror clamav.mirror.pacific.net.au
    DatabaseMirror clamavdb.planetmirror.com
    #
    # Austria
    DatabaseMirror clamav.inode.at
    DatabaseMirror xarch.clamav.net
    #
    # Belgium
    DatabaseMirror clamav.edpnet.net
    #
    # Bulgaria
    DatabaseMirror clamav.host.bg
    DatabaseMirror clamav.paralax.org
    #
    # Canada
    DatabaseMirror clamav.mirror.rafal.ca
    DatabaseMirror clamav.gossamer-threads.com
    #
    # China
    DatabaseMirror clamav.ialfa.net
    #
    # Czech Rrepublic
    DatabaseMirror clamav.iol.cz
    DatabaseMirror clamav.skynet.cz
    DatabaseMirror clamav.mirror.vutbr.cz
    #
    # Denmark
    DatabaseMirror clamav.dif.dk
    DatabaseMirror clamav.mirrors.webpartner.dk
    #
    # Ecuador
    DatabaseMirror clamav.ecualinux.com
    #
    # Estonia
    DatabaseMirror clamav.infonet.ee
    #
    # France
    DatabaseMirror clamav.easynet.fr
    DatabaseMirror clamav.inet6.fr
    DatabaseMirror clamav.univ-nantes.fr
    DatabaseMirror clamav.ovh.net
    DatabaseMirror clamav.mirror.waycom.net
    #
    # Germany
    DatabaseMirror clamav.mirror.fizzelpark.com
    DatabaseMirror clamav.informatik.fh-furtwangen.de
    DatabaseMirror clamav.lug-norderstedt.de
    DatabaseMirror clamav.mcs.de
    DatabaseMirror clamav.mirror.myebs.de
    DatabaseMirror clamav.pcn.de
    DatabaseMirror clamav.power-netz.de
    DatabaseMirror clamav.savework.de
    DatabaseMirror fuxhausen.tiscali.de
    DatabaseMirror clamav.ftpproxy.org
    DatabaseMirror clamav.kgt.org
    #
    # Greece
    DatabaseMirror clamav.forthnet.gr
    DatabaseMirror clamav.uoc.gr
    #
    # Hong Kong
    DatabaseMirror clamav.meiwing.com
    DatabaseMirror clamavdb.hostlink.com.hk
    DatabaseMirror clamav.cpss.edu.hk
    #
    # Hungary
    DatabaseMirror clamav.crysys.hu
    DatabaseMirror clamav.dc.hu
    DatabaseMirror clamav.fisher.hu
    DatabaseMirror clamavdb.ikk.sztaki.hu
    #
    # Indonesia
    DatabaseMirror clamav.cbn.net.id
    DatabaseMirror db.clamav.or.id
    #
    # Ireland
    DatabaseMirror clamavdb.heanet.ie
    #
    # Italy
    DatabaseMirror clamav.oltrelinux.com
    DatabaseMirror clamav.mirror.garr.it
    DatabaseMirror clamav.linux.it
    DatabaseMirror idea.sec.dico.unimi.it
    #
    # Japan
    DatabaseMirror clamav.nara.wide.ad.jp
    DatabaseMirror clamav-mirror.wiseknot.co.jp
    DatabaseMirror clamavdb.ml-club.jp
    DatabaseMirror clamav.mtcnet.jp
    DatabaseMirror clamav.begi.net
    DatabaseMirror clamavdb.osj.net
    DatabaseMirror clamav.s-lines.net
    DatabaseMirror clamav.yukiguni.net
    DatabaseMirror clamavdb.mithril-linux.org
    #
    # Republic of Korea
    DatabaseMirror clamav.hanbiro.com
    #
    # Lithuania
    DatabaseMirror clamav.vtu.lt
    #
    # Mexico
    DatabaseMirror clamav.mpsnet.com.mx
    #
    # Netherlands
    DatabaseMirror clamav.essentkabel.com
    DatabaseMirror clamav.fx-services.com
    DatabaseMirror clamav.prolocation.net
    DatabaseMirror clamav.mirror.transip.nl
    DatabaseMirror clamav.unnet.nl
    DatabaseMirror clamav.xs4all.nl
    DatabaseMirror clamav.packetstorm.nu
    #
    # Poland
    DatabaseMirror database.clamav.ps.pl
    #
    # Portugal
    DatabaseMirror clamav.linux.pt
    #
    # Romania
    DatabaseMirror clamav.iasi.roedu.net
    #
    # Russian Federation
    DatabaseMirror clamav.citrin.ru
    DatabaseMirror clamav.eastweb.ru
    DatabaseMirror clamav.unix.su
    #
    # Singapore
    DatabaseMirror clamav.acnova.com
    #
    # Slovakia
    DatabaseMirror clamav.hq.alert.sk
    #
    # Spain
    DatabaseMirror clamav.talika.eii.us.es
    #
    # Sweden
    DatabaseMirror clamav.kratern.se
    DatabaseMirror clamav.df.lth.se
    DatabaseMirror clamav.mainloop.se
    #
    # Switzerland
    DatabaseMirror switch.clamav.net
    #
    # Taiwan
    DatabaseMirror clamav.cs.pu.edu.tw
    DatabaseMirror clamav.stu.edu.tw
    #
    # Turkey
    DatabaseMirror clamav.enderunix.org
    DatabaseMirror clamav.ubak.gov.tr
    #
    # Ukraine
    DatabaseMirror clamav.intercom.net.ua
    #
    # United Kingdom
    DatabaseMirror clamav.mirror.camelnetwork.com
    DatabaseMirror clamav.dbplc.com
    DatabaseMirror clamav.spod.org
    DatabaseMirror clamav.public-internet.co.uk
    #
    # United States
    DatabaseMirror clamav.catt.com
    DatabaseMirror clamav.clearfield.com
    DatabaseMirror clamav.devolution.com
    DatabaseMirror clamav.edebris.com
    DatabaseMirror clamav.edgescape.com
    DatabaseMirror clamav.infotex.com
    DatabaseMirror clamav.irontec.com
    DatabaseMirror clamav.liquidweb.com
    DatabaseMirror clamav.pathlink.com
    DatabaseMirror avmirror2.prod.rxgsys.com
    DatabaseMirror clamav.theshell.com
    DatabaseMirror clamav-du.viaverio.com
    DatabaseMirror clamav-sj.viaverio.com
    DatabaseMirror clamav.walkertek.com
    DatabaseMirror clamav.westlinks.com
    DatabaseMirror clamav.xyxx.com
    DatabaseMirror clamav.pinna.cx
    DatabaseMirror clamav.unet.brandeis.edu
    DatabaseMirror clamav.bridgeband.net
    DatabaseMirror clamav.inoc.net
    DatabaseMirror clamav-000.mirrors.nks.net
    DatabaseMirror clamav-001.mirrors.nks.net
    DatabaseMirror clamav-002.mirrors.nks.net
    DatabaseMirror clamav-003.mirrors.nks.net
    DatabaseMirror clamav-004.mirrors.nks.net
    DatabaseMirror clamav-005.mirrors.nks.net
    DatabaseMirror clamav.oc1.mirrors.redwire.net
    DatabaseMirror clamav.securityminded.net
    DatabaseMirror clamav.securitywonks.net
    DatabaseMirror clamav.sonic.net
    #
    # Malware
    DatabaseCustomURL https://cdn.malware.expert/malware.expert.ndb
    DatabaseCustomURL https://cdn.malware.expert/malware.expert.hdb
    DatabaseCustomURL https://cdn.malware.expert/malware.expert.ldb
    DatabaseCustomURL https://cdn.malware.expert/malware.expert.fp
    #
    # Sanesecurity: malware, spam, phishing, lottery, etc
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/sigwhitelist.ign2
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/sanesecurity.ftm
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/MiscreantPunch099-INFO-Low.ldb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/MiscreantPunch099-Low.ldb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/Sanesecurity_BlackEnergy.yara
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/Sanesecurity_sigtest.yara 
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/Sanesecurity_spam.yara
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/badmacro.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/blurl.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/hackingteam.hsb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/junk.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/jurlbl.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/jurlbla.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/lott.ndb
    #
    # Bofhland
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/bofhland_cracked_URL.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/bofhland_malware_URL.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/bofhland_malware_attach.hdb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/bofhland_phishing_URL.ndb
    #
    # Foxhole
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_all.cdb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_all.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_filename.cdb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_generic.cdb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_js.cdb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_js.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_links.ldb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/foxhole_mail.cdb
    #
    # Malware.expert
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/malware.expert.fp
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/malware.expert.hdb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/malware.expert.ldb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/malware.expert.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/malwarehash.hsb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/phish.ndb
    #
    # Porcupine
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/phishtank.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/porcupine.hsb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/porcupine.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/rogue.hdb
    #
    # Spam
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/scam.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/scamnailer.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/shelter.ldb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/spam.ldb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/spamattach.hdb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/spamimg.hdb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/spear.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/spearl.ndb
    #
    # Winnow
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow.attachments.hdb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow.complex.patterns.ldb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_bad_cw.hdb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_extended_malware.hdb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_extended_malware_links.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_malware.hdb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_malware_links.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_phish_complete.ndb
    # DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_phish_complete_url.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/winnow_spam_complete.ndb
    #
    # Maldet
    DatabaseCustomURL https://www.rfxn.com/downloads/rfxn.ndb
    DatabaseCustomURL https://www.rfxn.com/downloads/rfxn.hdb
    # Phishing, scams and other junk, hashes of spam documents and images
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/crdfam.clamav.hdb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/doppelstern-phishtank.ndb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/doppelstern.hdb
    DatabaseCustomURL https://ftp.swin.edu.au/sanesecurity/doppelstern.ndb
    #
    # FIM DO ARQUIVO

    Salve e saia do arquivo.

    Deixo a título de informação a descrição de algumas assinaturas: 


    Figura 02


    Figura 03


    Note: Only use ONE of the above databases, winnow_phish_complete.ndb or winnow_phish_complete_url.ndb.

    NOTA: Use somente um dos dois, ou um ou outro: winnow_phish_complete.ndb ou winnow_phish_complete_url.ndb.

    No arquivo freshclamav.conf já deixei o winnow_phish_complete.ndb comentado.

    Maiores informações aqui:

    https://ftp.swin.edu.au/sanesecurity/readme.txt


    ATUALIZANDO O FRESHCLAM

       O parâmetro DatabaseDirectory /var/lib/clamav deve ser o mesmo nos arquivos freshclam.conf e clamd.conf. Caso alterar num deve obrigatoriamente alterar no outro. Aconselho a deixar no padrão. 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.

    Atualizando pelo terminal:

    # systemctl stop clamav-freshclam
    # freshclam

       Levará em torno de um a dois minutos atualizando os bancos de dados. Caso der um erro semelhante a esse:

    ERROR: /var/log/clamav/freshclam.log is locked by another process
    ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).
    ERROR: initialize: libfreshclam init failed.
    ERROR: Initialization error!

    Faça o seguinte:

    # lsof /var/log/clamav/freshclam.log

    e veja na saída o número do PID ao final:

    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    freshclam XXXX clamav 3wW REG 8,3 3384 7471195 /var/log/clamav/freshclam.log

    Encerre o processo:

    # kill XXXX <<< no lugar de XXXX terá um número de 4 dígitos

    Atualizando:

    # freshclam

    Abaixo é somente um exemplo, a saída bem maior:

    Mon Jun 20 20:15:41 2023 -> ClamAV update process started at Mon Jun 19 20:15:41 2023
    Mon Jun 20 20:15:41 2023 -> daily.cvd database is up-to-date (version: 26944, sigs: 2037362, f-level: 90, builder: raynman)
    Mon Jun 20 20:15:41 2023 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
    Mon Jun 20 20:15:41 2023 -> bytecode.cvd database is up-to-date (version: 334, sigs: 91, f-level: 90, builder: anvilleg)
    Mon Jun 20 20:15:42 2023 -> malware.expert.ndb is up-to-date (version: custom database)
    Mon Jun 20 20:15:43 2023 -> malware.expert.hdb is up-to-date (version: custom database)
    Time: 1.1s, ETA: 0.0s [========================>] 246B/246B
    Mon Jun 20 20:15:44 2023 -> Testing database: '/var/lib/clamav/tmp.6691514a05/clamav-d170be684bda2d5cf594bdd941ceae65.tmp-malware.expert.ldb' ...
    Mon Jun 20 20:15:44 2023 -> Database test passed.
    Mon Jun 20 20:15:44 2023 -> malware.expert.ldb updated (version: custom database, sigs: 1)

    Deverá terminar com a última linha assim:

    Mon Jun 20 20:16:19 2023 -> Clamd successfully notified about the update.

       Aconselho a colocar no cron para fazer freshclam uma vez por semana (ou mais, a seu gosto) ou use o Programador na interface do ClamTK. Lembrando que o ClamTK é bem básico e abrange somente os aspectos do ClamAV (somente o que está nos arquivos de configurações), por exemplo, as atualizações do clamav-unofficial-sigs você deverá programar no cron ou realizar manualmente.

    # systemctl start clamav-freshclam


    IMPORTANTE

    Sempre antes de executar freshclam deve-se parar o serviço, a sequência é sempre essa:

    # systemctl stop clamav-freshclam
    # freshclam
    # systemctl start clamav-freshclam

    Testando

    Vamos instalar o diretório virulento de testes fornecido pelo clamav:

    # apt-get install clamav-testfiles

    Escaneando

    # clamscan /usr/share/clamav-testfiles/

    Deverá terminar com a lista de arquivos encontrados e ao final terá:

    ----------- SCAN SUMMARY -----------
    Known viruses: 8808129
    Engine version: 1.0.1
    Scanned directories: 1
    Scanned files: 46
    Infected files: 46
    Data scanned: 20.73 MB
    Data read: 6.21 MB (ratio 3.34:1)
    Time: 85.844 sec (1 m 25 s)
    Start Date: 2023:06:19 20:26:40
    End Date:   2023:06:19 20:28:06

    Daí pode remover:
    # apt-get remove clamav-testfiles


    ON-ACCESS SCANNING

    Agora vamos habilitar o On-Access Scanning conhecido também como Proteção em Tempo Real.

     Segundo o que está na página oficial do ClamAV:

    "On-Access Scanning The ClamOnAcc application provides On-Access Scanning for Linux systems. On-Access Scanning is a form of real-time protection that uses ClamD to scan files when they're accessed."

    "Varredura ao acessar O aplicativo ClamOnAcc fornece varredura ao acessar para sistemas Linux. A varredura ao acessar é uma forma de proteção em tempo real que usa o ClamD para verificar os arquivos quando eles são acessados."

       O ClamAV não tem aquela proteção que fica o tempo todo "escaneando" o computador (aliás, antivírus nenhum tem, mas isso é passível de discussão), ele somente escaneia o diretório e/ou o arquivo quando ele é acessado, o que não é muito diferente.

       O cliente ClamOnAcc para o daemon de varredura ClamD fornece varredura no acesso em versões modernas do Linux. Isso inclui um recurso opcional para bloquear o acesso ao arquivo até que um arquivo seja verificado (prevenção no acesso).

    IMPORTANTE

       Caso o fanotify não estiver habilitado no Kernel (página INTRODUÇÃO) não adianta fazer esse procedimento sem antes habilitá-lo.

    Pare o serviço e acesse o arquivo clamd.conf:

    # systemctl stop clamav-daemon
    # cd /etc/clamav
    # vim clamd.conf

    Deixe como está abaixo:

    #Automatically Generated by clamav-daemon postinst
    #To reconfigure clamd run #dpkg-reconfigure clamav-daemon
    #Please read /usr/share/doc/clamav-daemon/README.Debian.gz for details
    #
    LocalSocket /var/run/clamav/clamd.ctl
    FixStaleSocket true
    LocalSocketGroup clamav
    LocalSocketMode 666
    #
    # TemporaryDirectory is not set to its default /tmp here to make overriding
    # the default with environment variables TMPDIR/TMP/TEMP possible
    #
    User clamav
    ScanMail true
    ScanArchive true
    ArchiveBlockEncrypted false
    MaxDirectoryRecursion 15
    FollowDirectorySymlinks false
    FollowFileSymlinks false
    ReadTimeout 180
    MaxThreads 12
    MaxConnectionQueueLength 15
    LogSyslog false
    LogRotate true
    LogFacility LOG_LOCAL6
    LogClean false
    LogVerbose false
    PreludeEnable no
    PreludeAnalyzerName ClamAV
    DatabaseDirectory /var/lib/clamav
    OfficialDatabaseOnly false
    SelfCheck 3600
    Foreground false
    Debug false
    ScanPE true
    MaxEmbeddedPE 10M
    ScanOLE2 true
    ScanPDF true
    ScanHTML true
    MaxHTMLNormalize 10M
    MaxHTMLNoTags 2M
    MaxScriptNormalize 5M
    MaxZipTypeRcg 1M
    ScanSWF true
    ExitOnOOM false
    LeaveTemporaryFiles false
    AlgorithmicDetection true
    ScanELF true
    IdleTimeout 30
    CrossFilesystems true
    PhishingSignatures true
    PhishingScanURLs true
    PhishingAlwaysBlockSSLMismatch false
    PhishingAlwaysBlockCloak false
    PartitionIntersection false
    DetectPUA false
    ScanPartialMessages false
    HeuristicScanPrecedence false
    StructuredDataDetection false
    CommandReadTimeout 30
    SendBufTimeout 200
    MaxQueue 100
    ExtendedDetectionInfo true
    OLE2BlockMacros false
    AllowAllMatchScan true
    ForceToDisk false
    DisableCertCheck false
    DisableCache false
    MaxScanTime 120000
    MaxRecursion 16
    MaxFiles 10000
    MaxPartitions 50
    MaxIconsPE 100
    PCREMatchLimit 10000
    PCRERecMatchLimit 5000
    PCREMaxFileSize 25M
    ScanXMLDOCS true
    ScanHWP3 true
    MaxRecHWP3 16
    StreamMaxLength 25M
    LogFile /var/log/clamav/clamav.log
    LogTime true
    LogFileUnlock false
    LogFileMaxSize 0
    Bytecode true
    BytecodeSecurity TrustSigned
    BytecodeTimeout 60000
    #
    OnAccessMountPath /
    OnAccessExcludePath /sys
    OnAccessIncludePath /
    OnAccessIncludePath /home
    OnAccessPrevention yes
    OnAccessExcludeUname clamav
    OnAccessExtraScanning yes
    OnAccessMaxFileSize 20M
    MaxFileSize 50M
    MaxScanSize 200M
    TCPSocket 3310
    TCPAddr localhost
    AlertExceedsMax yes

    Salve e saia do arquivo.

       Com a configuração acima (OnAccessPrevention yes e as outras após o último #) o fanotify bloqueará qualquer evento acionado permitindo que apenas arquivos limpos sejam abertos ou acessados.

       Essa configuração também alertará imediatamente se um arquivo malicioso for baixado inadvertidamente. 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 (para 524288), execute:

    # echo 20971520 | sudo tee -a /proc/sys/fs/inotify/max_user_watches

    Saída: 20971520

    AVISO

       O número ali são 20M 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.

       Por enquanto somente vamos configurar esses parâmetros, em outra oportunidade disponibilizo um arquivo clamd.conf mais completo com outras configurações.

       Vejam bem, as opções acrescentadas acima estão todas comentadas mais abaixo no arquivo, somente acrescentei elas no início para evitar que tivessem que procurá-la no gigantesco arquivo, então caso você for configurar por conta o arquivo clamd.conf tenha cuidado de não repetir os parâmetros.

       O parâmetro OnAccessIncludePath pode ser utilizado várias vezes, esse parâmetro especifica o(s) diretórios (com arquivos) que serão incluídos no escaneamento no acesso.

       No parâmetro OnAccessExcludePath excluímos do escaneamento o diretório sys para evitar muitos falsos positivos. Tal diretório você deve escanear manualmente.

    Execute:

    # systemctl stop clamav-daemon
    # clamd
    <<< esse comando demora alguns segundos, caso não retornar nada é porque está tudo certo.
    # systemctl start clamav-daemon
    # systemctl start clamav-milter
    # clamonacc

    IMPORTANTE

       Cada vez que se alterar o arquivo clamd.conf deve-se executar os comandos na sequência: parar o serviço, alterar o arquivo e salvar, iniciar o serviço.

    Fig. 04 - Você pode verificar com o comando top ou htop se o clamonacc está rodando.

    # htop

    Descompactando os bancos de dados cvd adicionais:

    # mkdir /tmp/clamav-sigs
    # cd /tmp/clamav-sigs/
    # sigtool --unpack /var/lib/clamav/main.cvd
    # ls

    COPYING main.fp main.hsb main.mdb main.ndb main.crb main.hdb main.info main.msb main.sfp

    # sigtool --unpack /var/lib/clamav/daily.cvd
    # ls

    COPYING daily.ftm daily.idb daily.ldu daily.ndb main.cdb main.info main.sfp daily.cdb daily.hdb daily.ign daily.mdb daily.ndu main.crb main.ldb daily.cfg daily.hdu daily.ign2 daily.mdu daily.pdb main.fp main.mdb daily.crb daily.hsb daily.info daily.msb daily.sfp main.hdb main.msb daily.fp daily.hsu daily.ldb daily.msu daily.wdb main.hsb main.ndb

    Atualizando a base não oficial:

    # clamav-unofficial-sigs


    INSTALANDO O CLAMTK

    # cd
    # apt-get install clamtk

    Fig. 05 - Abra a interface gráfica, aqui está em Aplicativos > Acessórios > ClamTk.


    Fig. 06 - Clique em Configurações.


    Fig. 07 - A opção de escaneamento heurístico prefiro deixar desabilitada para evitar muitos falsos positivos e habilitar somente em escaneamentos manuais.


    Fig. 08 - Clique em voltar e vá em Atualização.


    Fig. 09 - Verifique se as assinaturas estão atualizadas, deverá ter um número diferente de zero ao lado de "Assinaturas do antivirus". Clique em Voltar.


    Fig. 10 - Vá em Assistente de atualização.


    Fig. 11 - Verifique se está marcado para receber atualizações automáticas.
    Lembrando que as atualizações das assinaturas do unofficial.sigs e de outros que não estejam no freshclam.conf você deverá fazer manualmente ou colocar no Cron.


    Fig. 12 - Verifique no top ou no htop ou outro da sua escolha se o clamonacc (proteção em tempo real) está rodando.


       Para finalizar, reinicie o computador e execute um htop novamente para certificar se os serviços estão iniciando com o sistema.

    Para remover:

    # apt-get --purge remove clamav clamav-base clamav-daemon clamav-docs clamav-freshclam clamav-milter clamtk
    # apt autoremove
    # rm -rf /var/lib/clamav/main.cvd
    # rm -rf /var/lib/clamav/daily.cvd

    No caso do cron segue uma sugestão:

    # crontab -e 20 23 * * * root systemctl stop clamav-freshclam && freshclam && systemctl start clamav-freshclam
    # 40 23 * * 0,3 root clamscan --recursive --exclude-dir="^/sys" / --move=/home/clamav/quarentena
    # * 1 * * 0,3 root clamav-unofficial-sigs

    Salve e saia.

       A opção --recursive fará a varredura em todos os subdiretórios abaixo do /root.

       Para um escaneamento manual aconselha-se acrescentar a opção -i que exibirá os arquivos infectados, se houver:

    # clamscan --recursive -i --exclude-dir="^/sys" / --move=/home/clamav/quarentena

       O arquivo quarentena em /home/clamav/quarentena você pode criar (mkdir) em outro lugar de sua escolha.

       O cron acima fará uma atualização todos os dias às 23:20h e uma varredura às 23:40h no domingo e na quarta em todo o sistema com exceção do diretório sys para evitar muitos falsos positivos e chamadas de erros.

       Caso queira, acrescente mais entradas de varreduras em vários horários no Cron de acordo com as suas necessidades. O diretório sys aconselho a escanear sozinho e manualmente para ter mais controle. E no domingo e na quarta fará atualização do clamav-unofficial-sigs à uma hora da madrugada.

       Agende como quiser no crontab quantas varreduras quiser de acordo com as suas necessidades, somente dei uma sugestão.


    Opcional

    Para instalar outras assinaturas adicionais do clamav-unofficial-sigs veja aqui: https://gerenciandoservidor.com/como-instalar-assinaturas-adicionais-para-o-clamav/




    Instalação básica na linha de comando sem o ClamTK:


    Referências

    https://blog.clamav.net/2016/03/configuring-on-access-scanning-in-clamav.html

    https://docs.clamav.net/manual/OnAccess.html

    https://www.vivaolinux.com.br/etc/freshclam.conf-lpareal

    https://www.edivaldobrito.com.br/clamav-no-linux

    https://servidordebian.org/pt/buster/intranet/antivirus/clamav

    https://github.com/extremeshok/clamav-unofficial-sigs

    https://malware.expert/signatures/

    https://ftp.swin.edu.au/sanesecurity/

    https://ftp.swin.edu.au/sanesecurity/readme.txt

    https://www.rfxn.com/

    https://www.rfxn.com/projects/linux-environment-security/

    https://wiki.archlinux.org/title/ClamAV_(Portugu%C3%AAs)