2014-06-18 63 views
2

我想知道远程主机是否有r/w访问网络共享的权限。要开始了,我想看看我是否能查询目标主机来查询信息的UNC路径的能力,ALA查询通过WMI访问远程计算机上的UNC路径

var query = string.Format("select * from CIM_Directory where name = '{0}'", path); 

这正常工作对本地文件,例如

var path = @"c:\\Windows"; 

但是,我找不出一个合适的查询UNC路径(例如\\ foo \ bar)的方法。查询总是返回一个空白集。我看到一个关于执行远程文件的相关问题,该解决方案最终成为PsExec。我希望完全用WMI解决这个问题,而不必依靠第三方执行者,或者将我自己的工具上传到远程主机。

干杯

这里是什么,我试图做的,现在(取出VAR值)有点用法示例:

using System; 
using System.Linq; 
using System.Management; 

namespace netie 
{ 
    class Program 
    { 
     static void Main() 
     { 
      var connection = new ConnectionOptions 
      { 
       Username = "user", 
       Password = "pass", 
       Authority = "domain", 
       Impersonation = ImpersonationLevel.Impersonate, 
       EnablePrivileges = true 
      }; 

      var scope = new ManagementScope("\\\\remote\\root\\CIMV2", connection); 
      scope.Connect(); 

      var path = @"\\\\foo\\bar\\"; 
      var queryString = string.Format("select * from CIM_Directory where name = '{0}'", path); 
      try 
      { 
       var query = new ObjectQuery(queryString); 
       var searcher = new ManagementObjectSearcher(scope, query); 

       foreach (var queryObj in searcher.Get().Cast<ManagementObject>()) 
       { 
        Console.WriteLine("Number of properties: {0}", queryObj.Properties.Count); 
        foreach (var prop in queryObj.Properties) 
        { 
         Console.WriteLine("{0}: {1}", prop.Name, prop.Value); 
        } 
        Console.WriteLine(); 
       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e); 
      } 
      Console.ReadLine(); 
     } 
    } 
} 
+0

根据客户端主机不能控制对共享的访问。共享权限和Windows文件系统ACL是为每个用户帐户设置的,所以您的问题没有任何意义。您可以询问某个特定用户帐户是否有权访问特定的共享。 –

+0

这正是我想要做的。我需要验证具有给定主机上的给定一组凭证的用户是否可以访问UNC路径。 – Zoinks

回答

0

所以看起来这基本上是不可能的,因为WMI锁定你出去出于安全原因的网络访问。看起来你最好的选择是WinRM或PsExec一次性。如果这是您的唯一访问路径,您可以通过WMI启用WinRM,但我认为该功能可以被组策略阻止。第三种选择是编写自己的Windows服务,如果您有访问权限,它将响应请求并通过WMI安装它。

总之:我的问题的答案是否定的。使用WinRm,PsExec或定制的双赢服务解决方案。

0

我知道这是一个老问题,但对于任何想要这样做的人来说,下面的代码都可以工作。 (我知道,这不是WMI。鉴于OP的答案,我甚至没有与WMI的尝试,但我不敢想像,人们可以写一个服务这样的事情。)

if (System.IO.Directory.Exists(@"[SOME UNC PATH]")) 
{ 
    System.IO.DirectoryInfo info = new System.IO.DirectoryInfo(@"[SOME UNC PATH]"); 
    var securityInfo = info.GetAccessControl(); 
    var rules = securityInfo.GetAccessRules(
        true, 
        true, 
        typeof(System.Security.Principal.SecurityIdentifier)); 

    foreach (var rule in rules) 
    { 
     var fileSystemRule = rule as System.Security.AccessControl.FileSystemAccessRule; 
     if (ruleastype != null) 
     { 
      string user = fileSystemRule.IdentityReference.Translate(
        typeof(System.Security.Principal.NTAccount)).Value; 

      System.Diagnostics.Debug.Print("{0} User: {1} Permissions: {2}", 
       fileSystemRule.AccessControlType.ToString(), 
       user, 
       fileSystemRule.FileSystemRights.ToString()); 
     } 
    } 
} 

在运行时它产生以下输出:

Allow User: Everyone Permissions: ReadAndExecute, Synchronize 
Allow User: CREATOR OWNER Permissions: FullControl 
Allow User: NT AUTHORITY\SYSTEM Permissions: FullControl 
Allow User: BUILTIN\Administrators Permissions: FullControl 
Allow User: BUILTIN\Users Permissions: ReadAndExecute, Synchronize 
相关问题