Método de passagem no nível do kernel para alterar hashes de arquivos

0

Estou procurando por qualquer mecanismo no nível do kernel que seja pass-through e que altere hashes de arquivos, criptografando o conteúdo do arquivo ou acrescentando dados. A solução mais óbvia é a criptografia, mas não consigo encontrar nenhum método de criptografia apropriado (por exemplo, somente kernel, não ecryptfs, nada FUSE powered, etc).

Especificamente, eu tenho um grande número de arquivos em /foo que eu gostaria de aparecer também em /foobar de qualquer maneira que ofusque o MD5 original dos arquivos, sem duplicando o arquivo bruto dados. Eu não estou preocupado se os arquivos em /foobar são inutilizados por adições - estou feliz em adicionar alguns bytes aleatórios para cada arquivo e deixar que quebrar muitos dos formatos de arquivo, mas eu não sei como fazer isso com algum tipo de montagem de bind

    
por Hamy 03.09.2014 / 07:14

1 resposta

1

Se você estiver procurando por uma sobreposição de sistema de arquivos personalizada, o FUSE é a direção certa. Existem vários sistemas de arquivos personalizados escritos usando FUSE (sshfs, ntfs-3g, wikipediafs ...), incluindo sobreposições simples como bindfs .

Pode-se usar o código-fonte bindfs e modificá-lo para, digamos, o primeiro byte com alguns dados aleatórios sempre que ele processar uma operação de leitura.

Para uma opção de kernel puro, você pode modificar overlayfs ou unionfs drivers de maneira semelhante.

Outra alternativa é usar o Samba, gravar um módulo Samba vfs para corromper arquivos, compartilhar o diretório de origem e montá-lo na mesma máquina usando o driver cifs do Linux. (O mesmo também é possível usando o driver 9p e o daemon u9fs , ou com o daemon nfs e algum daemon do servidor NFS.)

Se você não se importa com o conteúdo, crie arquivos esparsos com o tamanho desejado; eles não ocuparão espaço algum:

$ truncate -s 1G largefile
$ du -h --apparent largefile
1G  largefile
$ du -h largefile
0   largefile

Faça um loop em uma árvore assim:

cd /foo
find -type d | while read -r file; do
    mkdir -p "/foobar/$file"
done
find -type f | while read -r file; do
    truncate -r "$file" "/foobar/$file"
done
    
por 03.09.2014 / 07:37