如何通过网络使用备份语义(seBackup权限)?

时间:2017-02-28 15:30:52

标签: winapi backup remote-access cifs fileserver

我正在尝试枚举远程文件服务器上的目录。 我想使用备份语义,以便不需要管理员凭据。

在测试服务器上,我创建了一个共享:

  1. 分享权限:每个人都完全掌控
  2. NTFS权限:仅SYSTEM(我删除了所有其他人)
  3. 我目前正在使用此代码:

    static void accessWithBackupSemantics() {
    
            NetResource netResource = new NetResource() {
                Scope = ResourceScope.GlobalNetwork,
                ResourceType = ResourceType.Disk,
                DisplayType = ResourceDisplayType.Share,
                Usage = ResourceUsage.Connectable,
                RemoteName = @"\\target-srv\TargetShare"
            };
    
            // open "net use" connection
            int netResult = Native.WNetAddConnection2(netResource, 
                                                      @"***password***",
                                                      @"DOMAIN\backup_op_user", 
                                                      0);
            if (netResult == 0 || netResult == 1219) {
    
                // enable privileges 
                // (this is taken from AplhaFS)
                using (new PrivilegeEnabler(Privilege.Backup)) {
    
                    try {
    
                        // try open remote directory
                        SafeFileHandle fsHandle = Native.CreateFile(
                            @"\\target-srv\TargetShare",
                            EFileAccess.GenericRead,
                            EFileShare.Read | EFileShare.Write,
                            IntPtr.Zero,
                            ECreationDisposition.OpenExisting,
                            EFileAttributes.BackupSemantics,
                            IntPtr.Zero);
    
                        Console.WriteLine("Handle is valid: " + !fsHandle.IsInvalid);
                    }
                    catch (Exception ex) {}
                    finally {
                        Native.WNetCancelConnection2(netResource.RemoteName, 0, true);
                    }
                }
            }
        }
    

    如果我在用户名中指定“DOMAIN \ Administrator”,但如果我尝试使用属于本地“备份操作员”的成员的域帐户,则无效(错误为5 - 访问被拒绝) target-srv 服务器。

    我还检查了 target-srv 上的安全事件日志,对于使用 WNetAddConnection2 创建的每个连接,都会写入“特殊登录”事件。此事件的详细信息包括登录帐户的权限列表。 在这两种情况下(当我与管理员 backup_op_user 连接时) - 确实列出了 seBackupPrivilege 。 我试图为“备份操作员”提供额外的权限,因此该列表具有管理员拥有的所有权限 - 但它没有做任何更改。

    问题:

    1. 通过网络使用备份语义的正确方法是什么?
    2. 如何使用Administrator而不是“Backup Operators”的成员 - 管理员是否还有其他隐式权限?
    3. 我见过许多本地使用备份语义的例子,但没有一个可以通过网络使用的例子 - 请不要回复本地使用示例的链接。

0 个答案:

没有答案