备份文件而不必更改文件的安全性

时间:2013-12-02 23:42:32

标签: windows security backup ntfs

我正在研究基于MS Windows的备份解决方案。对于NTFS文件系统,我们使用BackupRead和BackupWrite API来完成它,并且大部分工作都可以。也有例外。我们知道要调整令牌权限以获取SE_BACKUP_NAME,SE_RESTORE_NAME和SE_CHANGE_NOTIFY_NAME权限。我们知道在打开文件时使用ACCESS_SYSTEM_SECURITY,BACKUP_SEMANTICS和POSIX_SEMANTICS。我们知道在文件中添加WRITE_DAC和WRITE_OWNER以启用BackupWrite。我们偶然发现了所有这些。大多数情况下,我们都很好。

我们遇到的偶然文件会在其安全描述符中明确拒绝Everyone,并且在尝试为BackupRead打开它们时会触发这些文件。特别是,在使用CreateFile打开文件失败后,我们将Access Denied(5)作为GetLastError上的错误代码。我猜测在管理员组允许之前对显式拒绝进行评估。

作为管理员,我们知道我们可以取消所有权,至少是暂时的。这看起来很令人发指,我正在寻找替代方案。我想相信我们不应该修改文件的安全性来备份它。更一般地说,我认为我们只是通过获取SE_BACKUP_NAME权限并在CreateFile调用上使用BackupSemantics来绕过与DACL相关的所有内容......但这似乎并不全局适用。

我刚刚阅读了有关AdjustTokenGroups的内容,我即将调查清除Everyone组的SE_GROUP_ENABLED属性。这似乎也是错误的。我情不自禁地感觉我们正在跑错了兔子洞,所以我正在提出这个问题以寻求建议。我们忽略了一些更简单的东西吗?

我们遇到的问题是XP-to-Vista时间框架引入的交叉点。我们正在尝试备份“只是交汇点”...因为我们已经成功备份了交叉点的目标。我们正在添加FILE_FLAG_OPEN_REPARSE_POINT来完成读取。

1 个答案:

答案 0 :(得分:0)

我想这个问题含糊其辞,是因为我们无法备份磁盘上的某些实体。但是,我做了一个错误的假设。问题不是在CreateFile调用中打开目录...而是在随后的BackupRead调用中。连接点显然不能与BackupRead一起使用。

但是在确定我实际上可以打开结点之后,我有其他方法来记录结点信息。有一个DeviceIOControl调用将从结点获取重组数据。 This给出了一个很好的例子。