Como fragmentar recursivamente uma árvore de diretórios inteira?

47

Eu tenho uma árvore de diretórios que gostaria de destruir com o utilitário 'shred' do Linux. Infelizmente, o shred não tem -Ropção para o shredding recursivo.

Como posso destruir uma árvore de diretórios inteira recursivamente?

Steve V.
fonte

Respostas:

45

Use o findcomando para executar shredrecursivamente:

find <dir> -type f -exec shred {} \;
jamesallman
fonte
Funciona sem a opção -thpth? Funciona em sistemas de arquivos modernos com registro em diário?
usuário desconhecido
@userunknown Não, o shred não funciona em sistemas de arquivos com registro em diário modernos. Para informações mais precisas, consulte man shred.
FanaticD
Observe também que esse método nem tenta apagar nomes de arquivos ; portanto, quaisquer dados armazenados como esse serão definitivamente deixados para trás ( srmda resposta de @ Cookie, pelo menos, tentará resolver esse problema).
Ntninja 8/08
Use -exec shred {} +para torná-lo mais rápido, pois o shred aceita vários argumentos.
Sumit 16/02
28

Cuidado com o fragmento!

Na página de fragmentos:

CUIDADO: Observe que o shred depende de uma suposição muito importante: que o sistema de arquivos substitua os dados no local. Essa é a maneira tradicional de fazer as coisas, mas muitos projetos modernos de sistemas de arquivos não atendem a essa suposição. A seguir, exemplos de sistemas de arquivos nos quais o shred não é eficaz ou não é garantido que seja eficaz em todos os modos do sistema de arquivos:

  • sistemas de arquivos estruturados em log ou registrados em diário, como os fornecidos com o AIX e Solaris (e JFS, ReiserFS, XFS, Ext3, etc.)

  • sistemas de arquivos que gravam dados redundantes e continuam mesmo que algumas gravações falhem, 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 fazem cache em locais temporários, como clientes NFS versão 3

  • sistemas de arquivos compactados

No caso de sistemas de arquivos ext3, a isenção de responsabilidade acima se aplica (e a fragmentação é, portanto, de eficácia limitada) apenas no modo data = journal, que registra os dados dos arquivos além dos metadados. Nos modos data = ordenado (padrão) e data = write-back, o shred funciona normalmente. Os modos de registro em diário do Ext3 podem ser alterados adicionando a opção data = something às opções de montagem de um sistema de arquivos específico no arquivo / etc / fstab, conforme documentado na página de manual de montagem (montagem de homem).

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 permitem recuperar um arquivo fragmentado posteriormente.

Solução: use um sistema de arquivos criptografado e exclua seus arquivos.

Usuário desconhecido
fonte
+1 para ponteiro no fragmento, eu tive um caso semelhante antes. Não funcionou no NFS da NetApp. A NetApp usa WAFL e que usa a cópia na gravação, incluindo metajournalling, portanto, está certo. Também com o mais recente ZFS da Solaris, há outro caso em que o galpão é destruído.
Nikhil Mulley
6
Esta é uma solução ruim. Um sistema de arquivos criptografados só é seguro enquanto estiver bloqueado (e desmontado). Assim que seu sistema operacional estiver em funcionamento, os dados estarão disponíveis.
Oleks
3
@oleks: O uso shrede a criptografia de dados impedem a leitura dos dados de um dispositivo de armazenamento offline (pense em roubo ou polícia), com a criptografia de dados com o benefício adicional de proteger todos os arquivos, e não apenas os que foram excluídos (corretamente). Depois que o sistema de arquivos é montado, voltamos às boas permissões de unix em ambos os casos e a proteção de dados se torna uma tarefa de segurança do sistema operacional e administração adequada do sistema novamente. A criptografia inicial do sistema de arquivos definitivamente não é pior para proteger os dados em repouso do que o uso estratégico de shred!
Ntninja 8/08
12

Use a exclusão segura.

sudo apt-get install secure-delete
srm -r pathname

Feito. A exclusão segura é muito mais paranóica que a fragmentação, usando 38 passes em vez de 3. Para fazer um único passe rápido, use

srm -rfll pathname

O fll fornece um gerador de dados menos aleatório e apenas uma única passagem.

Biscoito
fonte
Ele resolve o problema mencionado em unix.stackexchange.com/a/27075/18886 ?
Ian Dunn
Como pôde isso? Não
Cookies
Observe que esse método tem o benefício adicional sobre os findmétodos baseados em propostas que tentarão também apagar nomes de arquivos armazenados renomeando arquivos antes de truncá-los e desvinculá-los.
Ntninja 8/08
Os métodos baseados em localização do @ntninja usam shred e o shred renomeia os arquivos antes de terminar de excluí-los. Os mesmos benefícios, certo?
tuxayo 04/07
11

Combinando esta resposta com as opções mais conhecidas para fragmentação usando este link de estouro de pilha ' Excluindo arquivos permanentemente e com segurança no CentOS ':

find <directory> -depth -type f -exec shred -v -n 1 -z -u {} \;

Editar: esteja ciente de que a melhor resposta para fragmentar um único arquivo força uma sincronização que grava alterações na mídia antes de excluir o arquivo, porque alguns ou todos os sistemas de arquivos registrados no diário possuem um buffer.

Se possível, o comando find deve chamar um script de shell no arquivo que é executado:

shred -v -n 1 /path/to/your/file #overwriting with random data
sync #forcing a sync of the buffers to the disk
shred -v -n 0 -z -u /path/to/your/file #overwriting with zeroes and remove the file

em cada arquivo.

im3r3k
fonte
Depois de ler e pesquisar muitas respostas, achei (imho) essa resposta como a mais completa. Gostaria apenas de acrescentar a ele que desde pingo não remove diretórios I anexadas rm -rvf $1ao script shell (onde $ 1 é o / path / to / o arquivo / aprovada na partir da {}expansão da find... -exec)
JoelAZ
4
O shred já faz um fsync (2) após cada passagem. Precisamente porque você precisa forçar as alterações do arquivo para alcançar o disco antes da próxima passagem.
Ángel
O que depthfaz aqui? Também certeza sobre a barra invertida
geneorama
5
find /your/directory -exec shred {} \;

fonte
Votado, mas James venceu você por um minuto para aceitar.
Steve V.
Funciona sem a opção -thpth? Funciona em sistemas de arquivos modernos com registro em diário?
usuário desconhecido
3
find [dirname] -depth -type f -exec shred -n1 {} \;

Isso realiza uma pesquisa profunda dos arquivos no diretório [dirname] e, em seguida, executa o shred -n1comando em cada arquivo. Ao remover arquivos e / ou diretórios, adicionar -depthcomo padrão é um bom hábito, mesmo que não seja estritamente necessário para este caso. Ao executar esse tipo de comando com, em rm -rfvez de shred, -depthé necessário para garantir que os diretórios não sejam excluídos antes que o conteúdo dos diretórios tente ser excluído (causando erros).

Alexander
fonte
3
Você deve usar shred -N 1, porque o padrão, triturando 3 vezes, é o óleo de cobra. Uma vez é suficiente ou 30 vezes não funcionará.
usuário desconhecido
Fornecer um comando simples como resposta não é a melhor maneira de responder a uma pergunta. Eu recomendaria adicionar uma pequena explicação sobre o que a linha está fazendo e as possíveis limitações envolvidas no uso.
n0pe
0

O shredmétodo mais completo que encontrei, que também inclui a remoção de diretório, é findchamar um script para ter shred:

  • sobrescrever o arquivo
  • sincronizar
  • então apague
  • e, finalmente, chame rm para remover os nomes de diretório.

Esse método também lida corretamente com nomes de arquivos com espaços neles.

Primeiro - o shredscript (eu nomeei meu dirShredder.she o armazenei no /rootdiretório:

shred -v -n 1 "$1" #overwriting with random data
sync #forcing a sync of the buffers to the disk
shred -v -n 0 -z -u "$1" #overwriting with zeroes and remove the file
rm -rvf "$1" # call rm to remove the directories

Em seguida, chame o script assim:

find /volume1/pathToShred/ -mindepth 1 -depth -exec /root/dirShredder.sh "{}" \;

Certifique-se de marcar o killit.sharquivo executável ( chmod +x) e, claro, atualize o caminho para o diretório que você deseja destruir e dirShredder.shse o armazenar em outro lugar.

NOTA BENE - shredapresenta problemas nos sistemas de arquivos Copy-on-Write (ZFS, BTRFS, et al) e até nos sistemas de arquivos Journaling. Não existe uma "melhor" maneira realmente aceita de lidar com isso que eu encontrei além de "sistemas de arquivos criptografados", mas não tenho certeza de quão eficaz isso é após o fato.
O mais próximo que você pode chegar é sobrescrever todo o espaço vazio na unidade com dados aleatórios após as operações de fragmentação (não zeros, parece que isso nem sempre é confiável.) Além disso, os SSDs também podem ter outras considerações (como TRIM).

Não vou abordar essas questões aqui, existem outras respostas do Stack (resposta do usuário desconhecido @ nesta pergunta, por exemplo) e muitas discussões em toda a rede que cobrem esses tópicos, então procure-as se precisar desse nível de segurança.

JoelAZ
fonte