Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 如何在网络上使用备份语义(seBackup权限)?_Winapi_Backup_Remote Access_Cifs_Fileserver - Fatal编程技术网

Winapi 如何在网络上使用备份语义(seBackup权限)?

Winapi 如何在网络上使用备份语义(seBackup权限)?,winapi,backup,remote-access,cifs,fileserver,Winapi,Backup,Remote Access,Cifs,Fileserver,我试图枚举远程文件服务器上的目录。 我想使用备份语义,以便不需要管理员凭据 在测试服务器上,我创建了一个共享: 共享权限:所有人完全控制 NTFS权限:仅限系统(我已删除所有其他权限) 我目前正在使用此代码: static void accessWithBackupSemantics() { NetResource netResource = new NetResource() { Scope = ResourceScope.GlobalNetwork,

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

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

  • 共享权限:所有人完全控制
  • NTFS权限:仅限系统(我已删除所有其他权限)
  • 我目前正在使用此代码:

    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);
                    }
                }
            }
        }
    
    • PrivilegeEnabler课程取自
    • 本机win32结构和标志取自
    如果我在用户名中指定了“域\管理员”,则此选项有效,但如果我尝试使用作为目标srv服务器上本地“备份操作员”成员的域帐户,则此选项无效(错误为5-拒绝访问)

    我还检查了目标srv上的安全事件日志,对于使用WNetAddConnection2创建的每个连接,都会写入一个“特殊登录”事件。此事件的详细信息包括授予登录帐户的权限列表。 在这两种情况下(当我与管理员或备份用户连接时),seBackupPrivilege确实被列出。 我试着给“备份操作员”额外的特权,这样列表就拥有管理员拥有的所有特权,但它没有改变

    问题:

  • 通过网络使用备份语义的正确方法是什么?
  • 为什么它与管理员一起工作,而不是与“备份操作员”的成员一起工作?管理员是否有其他隐式权限

  • 我见过许多本地使用备份语义的示例,但没有一个可以通过网络使用-请不要回复本地使用示例的链接。

    机器是否加入域?如果没有,UAC将阻止在网络上使用除内置管理员帐户之外的所有管理员权限。如果这是可能的话,我会感到惊讶。@HarryJohnston-是的,机器处于domain@CareyGregory-那么备份产品是如何工作的?您是否声称备份系统总是在本地安装代理?另外:它对管理员有效-如果没有backupSemantics标志,即使管理员也没有访问权限。@CareyGregory,备份权限在网络上有效,尽管IIRC需要两端都有。我有一些工具依赖于此,尽管我总是使用管理员帐户而不是备份操作员帐户。Roman,如果您将服务配置为作为
    备份用户运行,而不是在建立网络连接时显式指定凭据,那么它是否有效?(您需要确保用户在本地和远程计算机上都是备份操作员。)该计算机是否已加入域?如果没有,UAC将阻止在网络上使用除内置管理员帐户之外的所有管理员权限。如果这是可能的话,我会感到惊讶。@HarryJohnston-是的,机器处于domain@CareyGregory-那么备份产品是如何工作的?您是否声称备份系统总是在本地安装代理?另外:它对管理员有效-如果没有backupSemantics标志,即使管理员也没有访问权限。@CareyGregory,备份权限在网络上有效,尽管IIRC需要两端都有。我有一些工具依赖于此,尽管我总是使用管理员帐户而不是备份操作员帐户。Roman,如果您将服务配置为作为
    备份用户运行,而不是在建立网络连接时显式指定凭据,那么它是否有效?(您需要确保用户在本地和远程计算机上都是备份操作员。)