Como excluir arquivos e limpar discos com segurança no Linux: comandos dd e dc3dd
Como excluir arquivos e limpar discos com segurança no Linux: comandos dd e dc3dd
Imagine que você precisa excluir alguns arquivos confidenciais de um disco do computador ou de um pendrive conectado.
Ou ainda, precisa limpar todos os dados presentes em um disco para que ele possa ser reaproveitado, reinstalado, doado, vendido ou mesmo descartado.
Como proceder para que nenhuma informação contida nesse disco acabe em mãos erradas?
Neste caso podemos lançar mão de algumas ferramentas muito interessantes disponíveis para o Linux.
Podemos citar algumas ferramentas muito úteis para limpar dados de um disco de forma definitiva:
- dd
- dc3dd
- shred
- wipe
- scrub
Neste artigo aprenderemos a limpar discos e partições com o uso dos utilitários dd e dc3dd.
Utilitário dd
O utilitário dd permite converter, formatar e copiar arquivos, sendo muito utilizado para efetuar backup de partições e discos, ou partes de discos como a área de MBR, por exemplo.
Porém, também podemos limpar totalmente um disco utilizando a ferramenta dd. Suponhamos uma partição em disco, /dev/sdb1, que contenha dados confidenciais e que deva ser apagada totalmente para evitar vazamento dessas informações. Vejamos o conteúdo de um diretório hipotético neste disco, montado no diretório /confidencial:
$ df -h /dev/sdb1 $ ls /confidencial
Temos um arquivo chamado top-secret no disco, e queremos limpá-lo em definitivo. Simplesmente apagar o arquivo provavelmente não irá adiantar, pois existem diversas técnicas que permitem recuperar dados de discos mesmo depois de apagados – e até mesmo depois do disco ter sido formatado!
Na verdade, queremos limpar o disco todo, pois ele pode ter inúmeros arquivos que não devem ser acessados por mais ninguém, mesmo que alguém consiga ter acesso físico ao disco.
Usaremos então a ferramenta dd para limpar totalmente o disco. Podemos usá-la para preencher o disco com zeros e sobrescrever o conteúdo atual. Para isso, basta copiar o conteúdo do arquivo especial /dev/zero para o disco sdb:
$ sudo dd if=/dev/zero of=/dev/sdb
O procedimento é um pouco demorado, pois o disco será totalmente preenchido com zeros. Vejamos seu conteúdo após o término da operação:
Agora o disco está cheio de zeros, e não há nenhum arquivo disponível.
Veja que a partição continua montada e disponível:
$ df -h /dev/sdb
Uma outra maneira seria copiar o conteúdo do arquivo especial /dev/urandom para o disco sdb, o que o preencheria com dados aleatórios (em vez de zeros):
$ sudo dd if=/dev/urandom of=/dev/sdb
Vejamos agora como podemos usar o comando dc3dd para apagar o conteúdo de partições ou discos. Antes disso, desmontarei e formatarei novamente o disco /dev/sdb1, montarei-o no diretório /confidencial e criarei novamente nosso arquivo de testes top-secret.
Utilitário dc3dd
O utilitário dc3dd pode ser usado para copiar e converter arquivos e clonar discos e partições, assim como o comando dd. É, na verdade, uma versão “melhorada” do comando dd.
Vamos primeiramente instalar o utilitário dc3dd:
$ sudo apt-get install dc3dd
E na sequência rodaremos o comando whereis para mostrar que ele foi instalado no sistema:
$ whereis dc3dd
Ferramenta instalada com sucesso. Agora vamos utilizá-la. Um pouco diferente do exemplo anterior, vamos apagar todo o conteúdo da partição sdb1 e preenchê-la com um caractere qualquer, como a letra x para que os dados sejam sobrescritos.
Vejamos o conteúdo atual do disco e de sua partição:
$ df -h /dev/sdb1 $ ls -l /confidencial
Vamos agora apagar todo o seu conteúdo usando o comando dc3dd:
$ sudo dc3dd wipe=/dev/sdb1 tpat=x
Você pode acompanhar o andamento da operação no próprio terminal. Usamos as opções wipe e tpat, que significam:
- wipe=/dev/sdb1: Apagar todo o conteúdo do dispositivo /dev/sdb1 e preenchê-lo com um padrão de caracteres; se um padrão não for fornecido com tpat ou pat, o padrão será preencher o disco ou partição com zeros.
- tpat=x: Usar como padrão de preenchimento o caractere x.
Após algum tempo a operação será finalizada. Veja o resultado reportado:
Vamos ver agora com ficou o conteúdo da partição. Primeiramente rodaremos o comando ls -l para ver se há algum arquivo restante:
$ ls -l /confidencial
Os arquivos sumiram e agora é reportado inclusive um erro de entrada/saída.
Vamos ler o conteúdo dos setores da partição. Para isso copiaremos alguns bytes da partição usando o comando dd com as opções:
- bs=512 (tamanho dos blocos lidos = 512 bytes)
- count=2 (número de blocos a ler = 2)
- if=/dev/sdb1 (partição a ser lida)
- of=/home/fabio/prova (arquivo para onde copiaremos o conteúdo encontrado na partição)
Executando o comando:
# dd if=/dev/sdb1 of=/home/fabio/prova bs=512 count=2
E agora vamos ver o conteúdo do arquivo criado (/home/fabio/prova):
Como previsto, recheado de caracteres “x”, que foi o caractere escolhido para preencher o disco /dev/sdb1.
Portanto, a partição foi totalmente apagada e sobrescrita com um caractere escolhido, usando-se o comando dc3dd.
Mais informações sobre as diversas opções desse comando podem ser obtidas chamando sua ajuda:
$ dc3dd --help
No próximo artigo continuaremos a analisar outras ferramentas úteis para apagar de forma segura partições e também arquivos individuais.
Boa noite Fábio!
Seus ensinamentos tem me ajudado muito!
Parabéns pelo excelente trabalho!
Muito obrigado Diego!