shred
do GNU coreutils
foi projetado especificamente para essa finalidade.
De man shred
:
Substitua o (s) ARQUIVO (S) especificado (s) repetidamente, a fim de tornar mais difícil para até mesmo hardware muito caro sondar para recuperar os dados.
shred
lê bytes aleatórios de /dev/urandom
e sobrescreve o conteúdo dos arquivos com aqueles que, no final, sobrescreve o conteúdo por zeros (de /dev/zero
). Então, se você quiser reinventar a roda, você pode fazer isso manualmente, mas é melhor usar shred
, que já está otimizado para a tarefa.
Por exemplo, para qualquer arquivo my_secured_file.txt
, você pode fazer:
shred my_secured_file.txt
Aqui:
-
-v
para verbosidade -
-z
para sobrescrever o arquivo com zeros depois, para ocultar a destruição -
-n 5
é para o número de iterações, o padrão é 3
Você pode aumentar o número de iterações se quiser, embora o padrão seja suficiente ou até mesmo remover o arquivo ( -u
, --remove
).
Verifique man shred
.
Como shred
opera em arquivos, para executar a operação em todos os arquivos de um diretório (recursivamente), por exemplo, my_secret_dir
:
shopt -s globstar
for f in my_secret_dir/**/*; do shred -vzn 5 -- "$f"; done
Ou find
:
find my_secret_dir -type f -exec shred -vzn 5 -- {} +
Nota:
shred
tem a ressalva de que não pode funcionar corretamente nos sistemas de arquivos compactados, com armazenamento em diário, armazenamento em cache, RAID. Citando man shred
:
CUIDADO: Observe que o fragmento depende de uma suposição muito importante: que o sistema de arquivos sobrescreve os dados no lugar. Isto é o maneira tradicional de fazer as coisas, mas muitos projetos modernos de sistemas de arquivos não satisfaz esta suposição. A seguir, exemplos de sistemas de arquivos nos quais o shred não é efetivo, ou não é garantido que seja eficaz em todos os modos do sistema de arquivos:
sistemas de arquivos com registro de log ou diário, como aqueles fornecidos com o AIX e Solaris (e JFS, ReiserFS, XFS, Ext3, etc.)
sistemas de arquivos que gravam dados redundantes e continuam mesmo se algumas gravações falharem, como sistemas de arquivos baseados em RAID
sistemas de arquivos que fazem instantâneos, como o servidor NFS do Network Appliance
sistemas de arquivos que armazenam em cache em locais temporários, como clientes do NFS versão 3
sistemas de arquivos compactados
No caso dos sistemas de arquivos ext3, o aviso de isenção acima se aplica (e o fragmento é, portanto, de eficácia limitada) somente em data = journal modo, que os diários arquivam dados além de apenas metadados. Em ambos os modos data = ordered (default) e data = writeback, O shred funciona como de costume. Os modos de registro no diário Ext3 podem ser alterados adicionando a opção data = something às opções de montagem de um determinado sistema de arquivos no arquivo / etc / fstab, conforme documentado no mountman página (homem montar).
Além disso, os backups do sistema de arquivos e os espelhos remotos podem conter cópias do arquivo que não podem ser removidas e que permitirão arquivo triturado para ser recuperado mais tarde.
No Ubuntu, se você estiver usando ext4
filesystem que também é um sistema de arquivos de registro no diário, o modo de diário é o padrão para metadados, não para dados ( data=ordered
é o padrão), então você deve obter o resultado esperado shred
-ing a menos que você tenha alterado o padrão.
Como nota lateral, você pode encontrar as opções padrão do sistema de arquivos:
sudo dumpe2fs -h /partition |& grep 'Filesystem features'
Exemplo:
% sudo dumpe2fs -h /dev/sda3 |& grep 'Filesystem features'
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
O has_journal
indica que este é um FS de diário e as opções de diário padrão são:
% sudo dumpe2fs -h /dev/sda3 |& grep 'Journal features'
Journal features: journal_incompat_revoke
Ambos de uma vez:
% sudo dumpe2fs -h /dev/sda3 |& grep 'features'
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Journal features: journal_incompat_revoke