Remover arquivos faz parte da rotina diária de qualquer usuário de um sistema operacional, não é mesmo? Provavelmente você deve fazer isso algumas dezenas de vezes ao longo de um dia de trabalho em frente ao computador. Caso um arquivo qualquer (como uma ISO de um sistema operacional, por exemplo) esteja sendo apagado simplesmente para liberar espaço em seus meios de armazenamento, que mal há utilizar o bom e velho “rm”? Por outro lado, tenho a impressão de que você não gostaria de saber que aquele script que contém todas as suas regras de firewall, por exemplo, ou qualquer outro arquivo com alguma informação sensível pode cair em mãos erradas se você confiar no apenas no “rm”.
Bem, primeiramente, permita que eu me desculpe por ‘descortinar’ essa verdade caso você ainda achasse, até o parágrafo anterior, que um “rm -f” era um comando forte e com tanta ‘personalidade’ ao ponto de mandar pro espaço qualquer arquivo ou diretório. O fato é que ao remover um arquivo com esse comando o sistema operacional, em poucas palavras, simplesmente retira os “ponteiros” para os blocos de dados que formavam o arquivo. Por outro lado, esses blocos estão lá em seu HD e podem, com a ajuda de algumas ferramentas, ser recuperados. Provavelmente esses blocos irão ser sobrescritos apenas quando novos arquivos forem utilizando aqueles mesmos espaços e isso pode demorar um tempo bastante considerável principalmente se o computador em questão não tiver operações um fluxo de gravação de arquivos muito intenso.
E, antes que você se pergunte, mas quem pode ter acesso ao meu HD? Bem, fácil. Seu computador pode ser invadido através da Internet, você pode perdê-lo, você pode ser roubado, você pode vendê-lo ou você pode mandá-lo para uma assistência técnica para consertar um problema, por exemplo. Enfim, são muitas as possibilidade, não é verdade? Pior ainda quando se está falando dos pequenos e portáteis pen drives que carregamos conosco o tempo todo para todo lugar. Quando é possível, pode-se utilizar os sistemas de arquivos criptografados. Entretanto, em situações onde não é possível utilizar essas soluções, é preciso tomar cuidado para garantir que arquivos sensíveis foram, de fato, removidos.
A notícia boa é que existe um “irmão” do rm que pode ser utilizado para fazer a remoção de arquivos cujo conteúdo você deseja manter longe das mãos dos curiosos. Trata-se do shred. E sabe o qué melhor? Provavelmente ele já encontra-se instalado em seu sistema GNU/Linux mesmo que você nunca o tenha utilizado. Vamos, então, dar uma olhada nesse comando?
Suponnha que você tenha um arquivo com algum dado sensível:
$ echo "Esse arquivo possui dados secretos." > /tmp/segredo.txt
$ cat /tmp/segredo.txt
Esse arquivo possui dados secretos.
Em seguida, utilize o comando shred simplesmente indicando o arquivo recém-criado:
$ shred /tmp/segredo.txt
E agora, tente dar uma olhada no conteúdo do arquivo utilizando o comando cat:
$ cat /tmp/segredo.txt
E aí, surpreso com o que você viu?
Caso você deseje que o shred remova o arquivo após “bagunçar” seus dados você pode utilizar a opção “-u”. E ainda, se quiser acompanhar de perto o que o shred está fazendo durante seu período de execução basta acrescentar, como em muitos outros comandos dos sistemas Unix, o parâmetro “-v”. Então, experimente executar o shred com a seguinte sintaxe:
$ shred -u -v /tmp/segredo.txt
shred: /tmp/segredo.txt: pass 1/3 (random)...
shred: /tmp/segredo.txt: pass 2/3 (random)...
shred: /tmp/segredo.txt: pass 3/3 (random)...
shred: /tmp/segredo.txt: removing
shred: /tmp/segredo.txt: renamed to /tmp/00000000000
shred: /tmp/00000000000: renamed to /tmp/0000000000
shred: /tmp/0000000000: renamed to /tmp/000000000
shred: /tmp/000000000: renamed to /tmp/00000000
shred: /tmp/00000000: renamed to /tmp/0000000
shred: /tmp/0000000: renamed to /tmp/000000
shred: /tmp/000000: renamed to /tmp/00000
shred: /tmp/00000: renamed to /tmp/0000
shred: /tmp/0000: renamed to /tmp/000
shred: /tmp/000: renamed to /tmp/00
shred: /tmp/00: renamed to /tmp/0
shred: /tmp/segredo.txt: removed
É interessante notar que durante sua execução, o shred preencheu o conteúdo do arquivo três vezes com dados aleatórios e depois, antes de removê-lo, o comando renomeou o arquivo 11 vezes.
Para promover um processo um pouco mais seguro, você pode ainda selecionar o número de interações que o shred irá fazer substituindo o conteúdo do arquivo utilizando o parâmetro “-n ”. Por exemplo:
$ shred -n 25 -u -v /tmp/segredo.txt
Observe que, nesse caso, alternou o processo de substituição do conteúdo com alguns padrões fixos e dados aleatórios. Outra opção interessante até para “esconder” a ação do shred é solicitar que depois de todas as interações, ele substitua os dados do arquivo com zeros. Isso pode ser feito por meio da adição do parâmetro “-z”:
$ shred -n 25 -u -v -z /tmp/segredo.txt
Como “tudo” em sistemas GNU/Linux (Unix, na verdade) é representado por meio de arquivos, você pode utilizar o shred como uma ferramenta para apagar HDs ou outros dispositivos de armazenamento inteiros. Isso pode ser útil quando você vai repassar esse equipamento para outra pessoa. Para isso, basta passar como argumento o arquivo que representa o seu dispositivo de armazenamento. Por exemplo:
# shred -n 30 -v -z /dev/sda
Duas observações importantes aqui: primeiro, essa operação, salvo alguma configuração prévia, requer privilégios de root (observe o prompt como “#” no exemplo anterior). Segundo, tome muito cuidado para não passar o dispositivo errado e apagar coisas erradas! Ou seja, esse comando não é recomendado se você não estiver em paz e bem tranquilo!
Sim, é certo que com algum investimento em tecnologias mais avançadas de hardware e software, é possível recuperar dados mesmo que eles tenham sido sobrescritos diversas vezes.