考虑一下这种情况:我有一台 Linux 服务器,它每天通过 rsync 或类似的东西自动备份到某个远程位置。一切都很顺利,直到某个坏人获得了服务器的访问权限,找到了我的自动备份脚本,并从备份服务器中删除了所有内容。
我正在尝试寻找一些远程备份实用程序,它只允许远程添加备份,但不允许删除备份。我现在不知道如何使使用 ssh 的任何东西都只写,我试图找到一些不使用 ssh 的东西,但只找到了盒子备份。
我现在知道这是可能的,但我想知道是否有一些规范的方法来实现这一点。
我得到了很多答案,感谢大家!
答案1
最简单的方法可能是采用另一种备份方式,即从备份服务器提取。这就是我使用 rdiff-backup 运行备份的方式。
答案2
如果您进行的只是简单的备份(单一副本,覆盖所有数据),那么就无法实现您想要的效果——攻击者总是可以“备份”一堆空文件(或空文件集),这将导致您的所有数据都丢失。因此,我假设您正在进行正确的存档备份,并且您对备份进行了充分的监控,以至于任何通过发送空备份集来消除备份的尝试都会在造成任何永久性损害之前被发现。
如果您的 rsync-over-(大概)-SSH 使用强制命令rsync
在目标上运行,那么您就几乎可以保证不被删除。由于您只想运行特定命令rsync
,因此您可以对所有参数进行硬编码,然后它唯一能做的就是写入新数据。归档非常简单,只需每次备份到新树并使用硬链接将未更改的文件与上一个备份关联起来,这样可以节省空间和传输时间。
另一种方法是使用拉备份,其中备份服务器启动并管理操作rsync
- 这意味着客户端机器甚至没有运行受限的 rsync 命令的能力,这意味着攻击者无权删除文件。
这一切都假设您的备份服务器是安全的。如果攻击者可以通过其他方式访问它,那么无论您做什么,您都会受到攻击。
答案3
这是我喜欢的功能之一塔斯纳普备份服务。它允许我创建具有读取、写入和/或删除功能的子项。
在我的服务器上,我通常会保留具有读写功能的子密钥。有时,当我需要/想要删除旧的备份档案时,我会使用本地台式电脑上的主密钥来删除。
请注意,Tarsnap 本身是一种存储服务。您不能使用 Tarsnap 软件针对您自己的存储服务器创建备份。
答案4
很久以前提出这个问题时可能还不是这种情况,但现在有不同的备份实用程序直接作为选项或通过简单的脚本/附加设置支持这种情况。
广泛用于指代此功能的术语之一是“仅追加备份”。
Borg backup
具有此功能作为内置选项。Restic
可以设置为与不支持删除操作的远程文件系统对话,或者与rclone
将为 rclone 到 restic 支持的任何后端提供服务的服务器对话,使用 rclone 内置选项以仅追加样式提供服务。
此外,在备份到云时,许多云提供商(AWS、B2、Wasabi 等...)支持拥有不允许删除数据的存储桶,或者通过为所有文件保留永恒的历史记录间接地支持不允许删除它们(此设置有时是根据访问密钥设置的,而不是根据存储桶本身设置的)。
(更新:有人删除了他们所谓的“新创建的产品”的链接。请注意,这些产品都不是新产品,它们已经非常成熟,并且是备份领域最大的产品之一。我与这些产品没有任何关系,它们都是免费和开源。它们和 rsync 或 duplicity 一样新(为了说明一个观点,我有点夸张)。这个问题专门寻找实现这一点的方法,因此有必要提供具体解决方案的链接(而不是泛泛的“某些软件可能有此功能”)。事实上,我也是为了寻找具体的解决方案才想到这个问题的。