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 /foo
gostaria que também aparecessem de /foobar
qualquer maneira que ofuscasse o MD5 original dos arquivos,semduplicando os dados brutos. Não estou preocupado se os arquivos /foobar
se 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 overlayfs
os unionfs
drivers 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 cifs
driver Linux. (O mesmo também é possível usando o 9p
driver e o u9fs
daemon, ou com o nfs
driver 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