Como garantir a integridade de um arquivo?

Bom dia a todos.

Apenas para definirmos a nomenclatura: Em arquivologia, um arquivo é basicamente uma coleção de documentos( isso que a gente chama de arquivo no computador).

Ou seja, minha coleção de documentos está na /home. Nela existem as pastas “Documentos”, “Músicas”, “Vídeos”, etc.

Agora imaginem o seguinte cenário

Regularmente eu faço backup de todo o meu arquivo( pastas em negrito citadas anteriormente). Mas nesse arquivo há milhares de documentos, então não tem como ficar conferindo manualmente um por um.

Imagine que estamos na situação inicial( sem backups). Todos os documentos na /home estão íntegros. Então faço o backup número 1.

Continuo com a rotina de backups…

Agora imagine que antes de fazer o backup número 10, um conjunto de 5 documentos na /home foi corrompido.

Nessa situação eu troquei o backup 9 (100% íntegro) por o backup 10, com 5 arquivos corrompidos.

Espero que até agora tenha sido o máximo preciso sem ser massante.

Agora imagine um cenário pior, no qual o computador tenha sido infectado e, digamos, 500 documentos tenham sido criptografados ou corrompidos…

A questão que fica é:

Como eu mantenho a integridade de todos os documentos ( do meu arquivo) ?

Espero ter sido claro.

Obrigado.

2 curtidas

Analisando sua questão, tem duas formas de fazer isso isso, e obviamente tem um trade off no meio:

  • Backup Integral com imagem somente leitura em um mundo Linux, você pode fazer isso com squashfs e cpio, esse processo se feito de forma offline (sem que processos do sistema saibam, ex rodando via sandbox permissivo) é o meio mais seguro, você tem uma cópia exatq dos dados, se por ventura corromper basta montar o backup do arquivo e extrair o funcional, a desvantagem é que isso gera arquivos gigantes

  • Backup Diferencial com arquivos integrais nesse caso você gera tags pra identificar o dia (por exemplo a data do backup) o ostree é uma boa ferramenta pra isso, você tem backups menores porém não são readonly pra essa aplicação

2 curtidas

Escrevendo um programinha em shell script bash para fazer a verificação da integridade para você antes do backup.
Existe uma ferramenta que faz isso

$ man md5sum

Exemplo de script bash para verificar e criar a integridade:

#!/usr/bin/env bash

# Cria e verifica integridade
select md5 in Criar Verificar
do
    if [[ "$md5" == "Criar" ]]
    then
        md5sum ./Imagens/* ./Documentos/* ./Música/* ./Vídeos/* >./md5sum.txt >./md5sum.txt || echo "Falha ao criar!"; exit 1
    elif [[ "$md5" == "Verificar" ]]
    then
        md5sum -c --quiet ./md5sum.txt
        if [[ "$?" == 0 ]]
        then
            echo "Integridade OK!"
        else
            echo "Integridade falhou!"
        fi
    fi
done

É um script bem simples mas só para mostrar que é possível verificar integridade com shell script bash.

Eu aprende shell script bash e comandos assistindo curso no yutube, este curso é muito bom:

Você não vai precisar mais do que é ensinado neste curso para criar seu programinha em bash para criar e verificar a integridade dos seus arquivos.

2 curtidas

Na minha empresa, eu uso uma combinação de ZIP e MD5sum, o zip é interessante, porque se ocorrer uma corrupção de 1 bit no arquivo, ele não descompacta por padrão, nós criamos um software que certifica arquivo por arquivo com o Md5, e armazena no Banco de Dados os códigos, em seguida ele gera pacotes de arquivos ZIP, e armazena tudo em uma HD de Backup, quando e se o arquivo for necessário, o programa vai descompactar e verificar o md5 antes de colocar o arquivo no local indicado.
Um detalhe, é que isso é simples e se tornou muito eficiente, vc pode fazer isso manualmente ou mesmo criar um script para automatizar.

2 curtidas

Legal né ^^.
Seria legal alguém desenvolver um script bash para essa finalidade com licença livre para a comunidade usar.

Obrigado pelas respostas. Deixe-me ver se eu entendi.

Quando falei em “integridade” não só falei na questão da palavra propriamente dita mas também do fato dele ter sido, digamos, criptografado. Integridade eu defino aqui da seguinte forma: um documento que seja exatamente da forma que eu deixei salvo e que também seja acessível ( não criptografado por terceiros).

Eu entendo pouco dessas coisas, mas uma forma que pensei seria ter que aplicar um hash para cada documento individual e depois compará-lo, mas aí teria grandes problemas já que eu teria que ficar rastreando a minha própria atividade no arquivo.

@ving2004 A sua solução realmente é excelente. Mas imagino que seja complexa. Eu falo num contexto de uso pessoal: documentos de texto, planilhas, etc.

Mas md5sum detecta mudança a nível binário pó a detecção de mais baixo nível.
Mas o md5sum ele tem 128-bit, tem outros hash mais preciso como o sha512sum.
Este é mais preciso que o md5sum o problema é que ele demora bem mais tempo para calcular o hash.
Diferente do md5sum que usar 128 o sha512sum usa 512-bit o que da bem mais precisão.
São justamente um hash.
Você marca as pastas que você quer que ele cria o hash e ele cria.

Exemplo de comando em bash usando o sha512sum:

select md5 in Criar Verificar; do if [[ "$md5" == "Criar" ]]; then sha512sum ./Imagens/* ./Documentos/* ./Música/* ./Vídeos/* >./md5sum.txt; if [[ $? != 0 ]]; then echo "Falha ao criar!"; exit 1; fi; elif [[ "$md5" == "Verificar" ]]; then sha512sum -c --quiet ./md5sum.txt; if [[ "$?" == 0 ]]; then echo "Integridade OK!"; else echo "Integridade falhou!"; fi; fi; done
2 curtidas

Eu uso hash já em algumas situações, mas para arquivos estáticos.

Imagine a estrutura do meu arquivo:

/Documentos
/Pasta 1
Documento 1
Documento 2
Documento 3
Documento 4
Documento 5
.
.
.
Documento n

Imagine que hoje, 20210424 eu faça um hash de cada um e coloque numa tabela.

→ Tabela de hashs de todos os documentos foi gerada.
→ backup da pasta Documentos foi feito

Agora imagine que eu faço modificações nos documentos de 1 a 10.

→ Gero novamente a tabela de hashs de todos os documentos.

O problema agora é que, or definição, os documentos de 1 a 10 terão hashs diferentes.

Eu teria que rastrear quais os documentos eu realmente editei.

Não sei se eu estou querendo criar problema onde não deve… Não sei se também fui claro no que eu quero ou até mesmo o que eu queira não faça sentido.

Mas eu gostaria de ter uma certa segurança de que os documentos de 11 a n não estão com algum tipo de problema (encriptados por algum malware ou com alguma falha) e eu vá fazendo backup de tudo e quando um dia precisar abrir um determinado, tenha uma má surpresa.

Vê se consegui ser claro o suficiente.

Mas cara pensa só, como o algorítimo vai saber se quem criptografo foi você ou foi um bot?
A maquina não é humana para saber o que você modifico não pó, maquina é maquina.
A maquina pode perceber se o arquivo foi criptografado/modificado, mas ela não tem como saber se foi uma ação humana ou não, na verdade tem mas o método atual da tecnologia da informação é inviável para o que você quer implementar a tecnologia para isso esta caminhando.
Você já viu aquelas caixinhas para você clicar escrito “Eu não sou um robo” então isso ainda esta caminhando.

Essa auditoria tem que ser feita por um humano capacitado mesmo, não tem como.
Isso que você quer é tipo ficção cientifica.

@aguamole eu acho que ainda não fui claro.

Eu não queria encriptar o arquivo, essa forma seria apenas um alerta para saber se foi ou não encriptado, entende?

Acho que temos então duas coisas distintas.

(1) Um mecanismo de proteção para ver se eu estou fazendo backup de algo que tenha sido encriptado.

(2) Um mecanismo de verificação de integridade dos documentos.

O erro foi meu. Eu me compliquei na formulação do problema.

@anon87583602 já pensou em usar o git como um sistema de backup? A cada “novo backup” o git só enviaria as diferenças dos arquivos. No caso de um arquivo ser modificado sem autorização você poderia fazer um rollback no arquivo mantendo sua integridade.
Há um projeto chamado bup que é um sistema de backup baseado em git.

Um frontend em KDE chamado kup: Kup Backup System - linux-apps.com

Testanto o kup: Looking at Kup - KDE Backup Tool - YouTube

Link do bup: https://bup.github.io

Palestra do bup: 28c3: bup: Git for backups - YouTube

@ailtonbsj Mas vale para qualquer documento?

Sim. Em geral ele funciona melhor com arquivos estruturados como txt, docx, odt, xml, etc. Porém ele faz snapshots de binários também.
Acredito que pra pastas como Documentos, Imagens, Músicas ele funciona legal. Agora o processo é lento no caso de arquivos muitos grandes como a pasta Vídeo, Download ou mesmo pra arquivos compactados.
Nunca utilizei o kup, mas nos comentários do app parece que tem gente que usa faz um tempo.

Interessante. Eu irei testar.

Eu usei uma vez, mas aí era para o disco todo, o Clonezilla. Lembro que tinha uma etapa que ele checava a ‘integridade’ do arquivo.

Essa integridade que ele se refere é o que, exatamente?

obs: Eu usei “integridade” de forma talvez não precisa aqui no meu post.