Windows BackupRead / BackupWrite和ACL

时间:2010-11-27 19:34:52

标签: security winapi backup usability acl

我一直在努力了解使用BackupRead和BackupWrite备份计算机上的数据的正确方法,尤其是关于可靠地恢复数据的方法。

现在我了解如何使用API​​并取得了成功。然而,有一件事困扰着我。 您可以在文件内容本身旁边备份任何备用数据流以及安全信息(ACL)。

现在,如果我将ACL数据存储起来进行备份,那么以后,一旦需要在另一台机器或新设置的机器上恢复数据,我应该如何处理与ACL相关的SID? SID很可能不再对机器有效,应如何选择正确的用户? 现在我在更大规模上看这个,让我们说这是一台拥有多个用户的计算机以及数百或数千个具有不同设置的对象,这将使得通过再次应用安全设置恢复数据变得一团糟。

如果软件的用户希望备份安全设置,用户必须对自己采取什么措施并相应地更新它们或者是什么?

此外,BackupRead和BackupWrite将为我提供这些项目的原始二进制数据,这些数据并不是很难使用,但显然这个API甚至不打算面对这个问题。

任何人都知道备份应用程序应该如何处理这种情况?您对此特定主题的指导意见或指示有何看法?

非常感谢。

2 个答案:

答案 0 :(得分:2)

我相信Backup * API主要用于在同一台计算机上进行备份和还原,这会导致SID问题无关紧要。但是,假设您需要在新安装上恢复备份,这是我对解决方案的看法。

对于众所周知的SID,例如Everyone,Creator Owner等,实际上没有任何问题。

对于依赖于域的SID,您可以按原样存储它们,并且在还原时,您可以根据需要修复域部分。您可能也应该存储此类SID的域名。

对于本地用户和组,您至少应存储每个SID的用户/组名称。恢复修复可以基于这些名称或手动(假设应用程序的用户界面)部分自动,您询问用户是否希望将此用户映射到新的本地用户,将这些SID转换为众所周知的SID ,或保持原样。

与此类SID相关的大多数问题都可以(并且通常可能)自动处理。我当然感谢一个足够聪明的备份应用程序来进行恢复我要求它并且弄清楚旧机器上的“Erik”也必须是新机器上的“Erik”。

还有一个注意事项,如果你决定采用这样的解决方案,请记住开始一夜之间的数据传输是多么令人讨厌,只是为了回到5%的阻塞弹出窗口就可以轻松推迟: )

答案 1 :(得分:2)

我认为您正确理解备份和恢复数据的问题。我认为正确理解问题只是解决问题的一半。我想你就像stackoverflow网站的大多数用户一样,大多数是软件开发人员,而不是大型网络的管理员。所以你从软件开发人员的另一方面看问题,而不是从管理员那边看。管理员知道ACL备份和恢复的限制,并且已经使用它。

通常,您应该了解备份的主要目的是保存数据并在以后在同一台计算机或服务器上恢复数据。另一个标准情况是:在更换硬件后,从一台服务器到另一台服务器进行一次恢复备份。在旧服务器不再存在的情况下。主要是一个备份服务器并组织在客户端上工作,因此,没有重要数据将保存在客户端计算机上。

在大多数情况下,备份数据具有安全描述符中BUILTIN域中的域组SID,域用户SID,well-known SIDs或SID别名。在这种情况下,根本不需要改变SID。如果管理员确实会对ACL进行一些更改,他可以使用不同的现有实用程序,如SubInACL.exe

如果您使用安全信息编写要用于移动数据的备份/还原软件,则可以在备份中包含一些有关所用帐户/组的本地SID的其他元信息。保存的安全描述符。在还原软件中,您可以提供从已保存的安全描述符中替换SID的可能性。许多年前,我为一个大客户写了一些实用程序,用于在域迁移后清除文件系统,注册表和服务中的SD中的SID。它并不复杂。所以我建议你可以在备份/恢复软件中实现相同的功能。