我打算build立一个用于encryption的ecryptfs的NAS。 我想知道是否ecryptfs会告诉我,如果一个文件已被无声地损坏(例如,一个错误的硬盘),或者如果我仍然依赖底层文件系统来为我做数据校验?
我可能会使用btrfs作为基础文件系统来获取快照function,但是我仍然有兴趣知道ext4 + ecryptfs是否能像普通的btrfs(或btrfs + ecrypts)那样再次提供相同的保证来隐藏文件损坏,因为btrfs的校验和function。
上面的答案是不正确的。 eCryptFS的实际实现默认情况下不是校验和数据。 简单的演示:
$ mkdir /tmp/front /tmp/back $ sudo mount -o key=passphrase:passwd=Test,ecryptfs_hmac,ecryptfs_enable_filename_crypto=no,ecryptfs_passthrough=no,ecryptfs_unlink_sigs,ecryptfs_key_bytes=16,ecryptfs_cipher=aes -t ecryptfs /tmp/back/ /tmp/front/ $ echo HelloWorld > /tmp/front/HelloWorld.txt $ cat /tmp/front/HelloWorld.txt HelloWorld $ sudo umount /tmp/front $ printf "deadbeaf" | dd of=/tmp/back/HelloWorld.txt bs=1 seek=8192 count=8 conv=notrunc $ sudo mount -o key=passphrase:passwd=Test,ecryptfs_hmac,ecryptfs_enable_filename_crypto=no,ecryptfs_passthrough=no,ecryptfs_unlink_sigs,ecryptfs_key_bytes=16,ecryptfs_cipher=aes -t ecryptfs /tmp/back/ /tmp/front/ $ cat /tmp/front/HelloWorld.txt <garbage>
也:
$ ecryptfs-stat /tmp/back/HelloWorld.txt File version: [3] Decrypted file size: [11] Number of header bytes at front of file: [8192] Metadata in the header region Encrypted HMAC disabled
eCryptfs不会给出读取错误或任何错误的迹象。 请注意,这甚至与ecryptfs_hmac选项,这应该启用校验和,但显然不。 ecryptfs的实际源代码包含HMAC代码,所以我不知道为什么这是行不通的。 快速Googlesearch表明HMAC代码可能不完整。 还没有深入研究。
eCryptFS执行校验和数据。 有一篇文章描述了eCryptFS是如何工作的 。 eCryptFS所做的一件事是防止对手篡改文件,并且这样做会计算HMAC并将其与encryption文件一起存储。 作为奖励,这显然也防止意外的“篡改”,如宇宙射线,电子噪声或简单的磨损(统称为“ 比特腐蚀” )。
但是, btrfs还有一件额外的事情,我确信eCryptFS不会这样做:镜像/复制和奇偶校验。 使用镜像(RAID1)或奇偶校验(RAID5或RAID6),btrfs能够自动find一个文件的一个好副本,如果它检测到正在读取的文件损坏。 Ars Technica就腐败和如何最好地利用btrfs或ZFS的function保持数据安全有非常好的文章 。
如果你使用ext4和eCryptFS ,最好你只知道有东西被破坏或篡改,但你必须手动干预来处理这个问题。 我build议坚持使用btrfs和eCryptFS ,它们既提供校验和(只要不禁用写时复制),也可以保持冗余数据副本(使用RAID1,RAID5,RAID6或RAID10)。