Método de passagem em nível de kernel para alterar hashes de arquivo

Método de passagem em nível de kernel para alterar hashes de arquivo

Estou procurando por qualquer mecanismo de nível de kernel que seja de passagem e altere os hashes dos arquivos criptografando o conteúdo do arquivo ou anexando dados. A solução mais óbvia é a criptografia, mas não consigo encontrar nenhum método de criptografia apropriado (por exemplo, totalmente somente kernel, sem ecryptfs, nada com FUSE, etc.).

Especificamente, tenho um grande número de arquivos e /foogostaria que também aparecessem de /foobarqualquer maneira que ofuscasse o MD5 original dos arquivos,semduplicando os dados brutos. Não estou preocupado se os arquivos /foobarse tornarem inúteis devido a adições - fico feliz em acrescentar alguns bytes aleatórios a cada arquivo e deixar isso quebrar muitos formatos de arquivo, mas não sei como fazer isso com alguns uma espécie de montagem vinculada

Responder1

Se você está procurando 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 comobindfs.

Poderíamos pegar o código-fonte do bindfs e modificá-lo para, digamos, XOR o primeiro byte com alguns dados aleatórios sempre que ele processasse uma operação de leitura.

Para uma opção de kernel puro, você pode modificar overlayfsos unionfsdrivers de maneira semelhante.

Outra alternativa é pegar o Samba, escrever um módulo VFS do Samba para corromper arquivos, compartilhar o diretório de origem e montá-lo na mesma máquina usando o cifsdriver Linux. (O mesmo também é possível usando o 9pdriver e o u9fsdaemon, ou com o nfsdriver e algum ou outro 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 sobre 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

informação relacionada