我想做一个encryption的目录与服务器的实时同步,使服务器只能看到encryption的数据。
假设我把底层ecryptfs数据放在:
/home/user/.Private
我将这个目录挂载在:
/home/user/unlocked
我可以更新.Private的文件(例如使用rsync)并期望unlocked以反映更改吗? 或者这会把事情弄糟? 是否有更好的替代scheme来实现encryption数据的同步?
更新澄清:
我只想将encryption的数据传输到服务器 – 服务器不受信任。 所以我想看看:
client <-- encrypted data --> server
可能有多个客户端更新(解密)文件; 因此生活同步的愿望:
client1 \ \--- encrypted data --\ \ server / /--- encrypted data --/ / client2
所以客户端有一个包含encryption文件的目录 – 分块的方式ecryptfs这样做:
/home/client1/.Private/ |--- ECRYPTFS_FNEK_ENCRYPTED.Fabcde.../ | |--- ECRYPTFS_FNEK_... | |--- ECRYPTFS_FNEK_ENCRYPTED.Flaksd.../ |--- ...
这是安装ecryptfs:
/home/client1/unlocked/ |--- secret_file_1 |--- secret_file_2
现在,client1正在忙于更改unlocked文件。 当客户端进行更改时, .Private的底层encryption文件也会更改。 所以一个本地inotify或者一些这样的注意到的变化和rsyncs被encryption的基础文件在私人服务器。 服务器知道client2也在监听,通知client2它应该改变。
所以我担心的是:如果客户端2将底层的encryptfs分块文件拆分成.Private,而它被挂载在unlocked ,我怀疑这会导致问题,不是吗? 这将需要client2在同步之前卸载unlocked ,这打败了整个“现场同步”的想法。
如果是这样,有效的同步encryption树的差异是什么好的替代技术?
根据Tyler Hicks(eCryptfs的维护者之一),修改底层文件系统(eCryptfs术语中较低的文件系统)目前是不安全的:
如果eCryptfs可以检测到较低的文件数据更改并更新caching以查看更新的文件,那将是一件好事。
即使我们可以检测到他们,我们将如何调解他们反对肮脏的eCryptfs页面? 我们如何知道最新的数据是什么?
不幸的是,直接修改较低的文件系统是不支持的。 如果修改不通过eCryptfs挂载点,我们不能期望由于eCryptfs架构而知道它。
来源: https : //bugs.launchpad.net/bugs/689030
要更新ecryptfs文件系统中的文件,您需要在安装点更新它们 – 在encryption的文件系统中,您需要立即更新整个文件,因为它没有文件或目录的概念 – 它只是一大块数据。
是的,您可以使用rsync将数据备份到某处,但为了读取或写入特定的文件,您需要装入它。
你可以从不同的地方安装它(可能最好不要同时尝试:-)为什么不使用shell脚本挂载rsync的相关文件,并在相关文件更新时卸载?
这里有用的信息