Existe uma maneira de criptografar um sistema de arquivos montado para backup externo?

1

Eu quero fazer backup de forma eficiente de uma cópia criptografada do meu disco rígido. Atualmente, estou usando o rsync para fazer backup de uma cópia não criptografada, e acho isso bastante eficiente.

Eu observei a duplicidade e o rsyncrypto, mas a duplicidade faz backups incrementais e o rsyncrypto usa uma chave exclusiva para cada arquivo criptografado. Duplicidade também ficou sem memória, e eu precisaria fazer o backup das chaves rsyncrypto em algum lugar. Acho que eles são ineficientes no espaço, então não quero usá-los.

O que eu acho que funcionaria bem seria se eu pudesse fazer loopback / bind mount / e fazer o backup do ponto de montagem criptografado. Eu olhei para eCryptfs e EncFS, mas ambos parecem apenas montar diretórios criptografados, e não permitir a criptografia de um diretório montado. Ambos suportam a criptografia do nome do arquivo, que também é um recurso desejável.

Se eu pudesse ter uma versão criptografada do meu sistema de arquivos, meu backup rsync existente funcionaria de maneira eficiente. Quando muito pouco mudou, apenas os nomes dos arquivos precisam ser criptografados.

Existe uma maneira de criptografar um diretório montado como outro diretório? Alguma outra sugestão?

    
por Jayen 14.01.2012 / 05:55

1 resposta

4

ugh, gastei muito tempo procurando uma resposta antes de postar esta pergunta, e agora eu acho que a opção --reverse para encfs faz o que eu quero. aqui está meu script de backup:

#!/bin/bash
set -e
set -u
CP="/usr/bin/sudo /usr/bin/rsync -aAhHPxX --delete-excluded --del --ignore-errors --rsync-path=\"rsync --fake-super\" $*"
SOURCE='/'
MOUNTPOINT='/tmp/slash'
DEST='backupuser@backuphost:backupdir'

mkdir -p $MOUNTPOINT
mount -t fuse.encfs | grep "^encfs on $MOUNTPOINT type fuse.encfs" || /usr/bin/sudo /usr/bin/encfs --reverse $SOURCE $MOUNTPOINT

#don't cross mount points
EXCLUDE_LIST=$(encfsctl encode $SOURCE '/usr/bin/cut -d\  -f 2 /proc/mounts | /bin/grep -v ^$SOURCE$')
EXCLUDE=''
for EXCLUDE_ITEM in ${EXCLUDE_LIST} ; do
  EXCLUDE="${EXCLUDE} --exclude ${EXCLUDE_ITEM}"
done

/usr/bin/rsync -haxHAXPR $SOURCE/.encfs* $DEST/../
#eval for the quotes in the CP command
eval $CP $EXCLUDE $MOUNTPOINT/ $DEST/

e para recuperar um arquivo:

CP='/usr/bin/sudo /usr/bin/rsync -haxHAXPR --no-implied-dirs --rsync-path="rsync --fake-super"';
SOURCE='/';
DEST='backupuser@backuphost:backupdir';
MOUNTPOINT='/tmp/slash';
ENCRYPTED_NAME=$(encfsctl encode $SOURCE $*);
eval $CP $DEST/./$ENCRYPTED_NAME $MOUNTPOINT
    
por 17.01.2012 / 03:27