对于我的家庭网络,我想购买一个支持磁盘加密和 NFS 的 NAS,因为对我来说,备份加密很重要,而且它保留所有者、组和权限(因此是 NFS)。这样我想我可以使用类似的东西rsnapshot
或者rBackup
备份我的数据并获取多个快照。不幸的是我没有找到任何同时支持NFS和加密的NAS。所以我想知道是否有可能使用没有 NFS 的 NAS(例如使用 CIFS 而不是 NFS)来获得此功能。所以我正在寻找一种满足以下要求的备份解决方案:
- 备份到本地网络中的 NAS(即我不想使用本地 USB 驱动器)
- 它应该保留所有者、组和权限以及符号链接
- 它应该被加密
- 应该有多个可用快照,例如
rsnapshot
或rBackup
- 访问快照文件应该很容易
- 应该不会太慢
有什么想法可以详细地做到这一点吗?
编辑: 我只是尝试总结到目前为止的答案,并想提出一些额外的问题来澄清一些观点。使用容器、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
.