Às vezes, há a necessidade de excluir um arquivo em um sistema de arquivos e garantir que o arquivo realmente se foi. Um arquivo que contém senhas confidenciais, por exemplo, deve ser completamente apagado do disco.
A emissão de um simples rm
em um sistema de arquivos típico exclui o inode ("ponteiro") para o arquivo, mas não exclui o conteúdo do arquivo no disco físico - eles são deixados lá até serem substituídos quando o sistema de arquivos precisar de espaço livre.
Em muitos sistemas de arquivos, o programa shred permite essa exclusão segura. No entanto, em um sistema de arquivos CoW como o btrfs, essa abordagem é inútil . O problema é exacerbado pelo fato de o arquivo estar presente nas capturas instantâneas de volume.
Existe uma maneira de excluir com segurança um arquivo em um sistema de arquivos btrfs? É suficiente excluir todos os ponteiros (em todos os volumes) e preencher o espaço livre com zeros ?
fonte
Respostas:
Exclusão segura é uma proposta difícil em qualquer sistema de arquivos. A menos que o sistema de arquivos seja muito peculiar e garanta que não haja outras cópias do arquivo, você precisará limpar todo o espaço livre no dispositivo. Embora seja mais provável que você encontre muitos bits do arquivo em sistemas de arquivos copiar na gravação, ainda mais sistemas de arquivos "estáticos" não têm essa garantia na prática, porque muitos arquivos são editados, portanto, há pouco nas versões anteriores do arquivo deitado por aí.
Observe que apagar com zeros é tão bom quanto apagar com bytes aleatórios e você não precisa de várias passagens. Apagar com zeros deixou dados residuais que poderiam ser parcialmente recuperados em condições de laboratório com as tecnologias de disco rígido dos anos 80; isso não é mais aplicável hoje. Consulte Por que escrever zeros (ou dados aleatórios) em um disco rígido várias vezes melhor do que apenas fazer uma vez?
Você pode se livrar dos dados confidenciais de texto não criptografado criptografando tudo no disco. Configure um volume ecryptfs sobre esse sistema de arquivos e mova todos os seus arquivos (confidenciais) para ele. Em seguida, substitua todo o espaço não utilizado do sistema de arquivos. Você pode apagar a maior parte preenchendo o sistema de arquivos
cat /dev/zero >zero
. Ainda pode haver algumas informações deixadas em blocos incompletos (blocos que contêm o último pedaço de um arquivo, seguido por algum lixo - que pode ser sobra de um arquivo confidencial). Para garantir que não haja blocos incompletos, mova tudo no sistema de arquivos para ecryptfs (os arquivos do ecryptfs usam blocos inteiros, pelo menos em configurações típicas em que os blocos têm 4kB). Certifique-se de aplicar isso a todos os volumes e de apagar todos os instantâneos que contêm dados confidenciais em texto sem formatação.Ainda pode haver algumas informações no diário. Eu não sei como esfregar isso.
No SSD, devido à realocação de blocos, pode haver dados que não podem ser lidos por meios normais de software, mas podem ser recuperados invadindo o firmware ou com acesso físico. Lá, seu único recurso é uma limpeza completa do SSD.
fonte
0
seja bom, e não sujeito a TRIMing, diria que escrever todos1
é? Ou algumas unidades usam compressão em tudo?Hmmm, o btrfs parece derrotar todos os métodos usuais de trituração ...
nodatacow
mas que parece não afetar os arquivos já existentes.debugfs
. É apenas para sistemas de arquivos ext, mas há um patch para ele que pode funcionar. Você pode usá-lo para descobrir os endereços de bloco afetados e substituí-los diretamente em / dev / sdXY. Mas isso é muito perigoso e pode não funcionar (especialmente se houver mais instantâneos do arquivo)A tentativa mais limpa (para dados realmente muito sensíveis) seria:
Essa pode não ser a abordagem mais barata, mas, considerando os baixos custos de armazenamento atuais e o problema que você teria com as outras opções, ela pode ser a mais barata (em termos de horas de trabalho).
fonte
nodatacow
define o status padrão doC
sinalizador para arquivos recém-criados . Certamente alguém poderia apenaschattr +C ~/.browser/logins.sqlite
e depoisshred
?Existe
shred(1)
para Unix / Linux (deve estar nos pacotes da sua distribuição). Eu sou o que o FEP recomenda .fonte