在保留 Windows 文件系统权限的同时进行加密备份的最佳方法

在保留 Windows 文件系统权限的同时进行加密备份的最佳方法

对于我的家庭网络,我想购买一个支持磁盘加密和 NFS 的 NAS,因为对我来说,备份加密很重要,而且它保留所有者、组和权限(因此是 NFS)。这样我想我可以使用类似的东西rsnapshot或者rBackup备份我的数据并获取多个快照。不幸的是我没有找到任何同时支持NFS和加密的NAS。所以我想知道是否有可能使用没有 NFS 的 NAS(例如使用 CIFS 而不是 NFS)来获得此功能。所以我正在寻找一种满足以下要求的备份解决方案:

  • 备份到本地网络中的 NAS(即我不想使用本地 USB 驱动器)
  • 它应该保留所有者、组和权限以及符号链接
  • 它应该被加密
  • 应该有多个可用快照,例如rsnapshotrBackup
  • 访问快照文件应该很容易
  • 应该不会太慢

有什么想法可以详细地做到这一点吗?

编辑: 我只是尝试总结到目前为止的答案,并想提出一些额外的问题来澄清一些观点。使用容器、FUSE 或其他不依赖于目标设备的“伪造”文件系统似乎是最灵活的选择。在这种方法中,我可以使用任何我喜欢的备份脚本,并且加密由客户端 CPU 完成。可能性是:

  • 编码文件系统
  • 真密码
  • dmcrypt/luks
  • S3QL

我不确定是否可以通过 S3QL 从两个客户端同时读取和写入 NAS。这对于其他方法来说没有问题,对吗?关于权限,无论如何我都必须确保它能够与 NFS 一起使用。例如,我可以制作备份脚本来保存数值uid/gid 并在 NAS 上根本不设置任何用户。

EncFS 似乎是迄今为止最简单的解决方案。在Truecrypt和dmcrypt/luks中,我必须提前选择容器大小,这似乎不像EncFS或Truecrypt那么灵活。然而,这些解决方案在读/写性能和稳定性方面是否存在显着差异?

到目前为止提到的另一个有趣的方法是用作备份脚本,它通过自身duplicity进行加密。gpg

答案1

我也会检查S3QL。它为网络备份提供了许多有趣的功能。它主要用于云备份,但您也可以将其用于本地网络,例如,使用 NFS 或SSHFS

至于如何用这个软件进行备份,这取决于你自己,S3QL只是一个带有一些额外功能的远程文件系统。

无论如何,S3QL 包包含一个示例脚本了解如何做到这一点。他们基本上做的是,利用软件的重复数据删除功能,以日期为名称备份远程目录,然后,每次完成备份时,都会完成前一个备份的副本并重命名到备份的当前日期,这样只需使用 rsync 将差异上传到新目录。您最终会得到运行备份的所有日期的一堆目录,仅使用所需的最小存储空间,因为数据不会重复。

编辑:(作为附加问题的答案)

S3QL 文件系统一次只能从一个客户端挂载,但是,我认为这一限制也适用于 EncFS 和 dmcrypt/luks。无论如何,这不符合您的要求,对吗?如果这是一个新的要求,那么您可能会坚持使用 NFS 或 CIFS 以及一些为您在客户端上进行加密的备份软件,例如口是心非。

答案2

有可能在 NAS 盒子上安装 debian并对整个硬盘进行加密。问题在于,大多数 NAS 盒中的处理器(特别是该文章中的 DNS-323 中的处理器)非常慢,并且本地磁盘加密使它们极其缓慢且无响应。

另一种解决方案是在任何未加密的 NFS 共享上托管加密的 truecrypt 容器。然后,您可以将其安装在客户端计算机上,并在加密容器内使用您喜欢的任何备份方法。这样服务器就不必进行加密计算。

第三种选择是使用表里不一对未加密的文件系统进行加密增量备份,并保留权限和符号链接。它的工作方式很像 rsync,但数据是使用 PGP 加密的。缺点是备份的存储方式不太透明,因此访问特定文件的先前版本有点不简单。

我个人使用运行 Debian 且未加密 RAID 的 D-Link DNS-323,并以口是心非的方式进行备份。这不是完美的解决方案,但它是我发现的最好的解决方案,无需运行完整的 PC 作为备份服务器。我在 truecrypt 方面有不错的经验,但很难像口是心非一样轻松地自动化该过程,因为每次都必须安装一个单独的容器。

答案3

您可以使用编码文件系统在 NFS 之上

encfs /encrypted_place_at_nfs /mnt/place_to_access_it_unencrypted

答案4

由于您使用的是 Linux,因此可以使用 dmcrypt/luks。

在类似 Red-Hat 的系统上(包括 Fedora)

yum install cryptsetup-luks luks-tools

这会给你一些 luks 命令。

现在您需要在 NAS 设备上创建一个容器(假设它以读写方式安装在 /mnt 上):

# Create a sparse file
dd if=/dev/zero of=/mnt/cryptdisk.dat seek=2G bs=1 count=1
# Create a key
dd if=/dev/urandom of=/root/crypt.key bs=1 count=2048
# Assign a device
losetup -a /dev/loop0 /mnt/cryptdisk.dat
# Encrypt device
cryptsetup luksFormat /dev/loop0 /root/crypt.key
# Create mapping to an encrypted device
cryptsetup luksOpen /dev/loop0 cryptdev -d /root/crypt.key

现在你有一个/dev/mapper/cryptdev您可以像分区一样使用它(例如,使用 ext3 格式化它,安装它,...)

将安装的分区用于您的目的...

进一步阅读:man cryptsetup, man losetup.

相关内容