【问题标题】:is it possible to restrict remote machines to connect to NamedPipeServerStream?是否可以限制远程机器连接到 NamedPipeServerStream?
【发布时间】:2015-07-16 17:53:35
【问题描述】:

我想知道是否可以限制远程机器访问服务器中的命名管道。 我正在按如下方式初始化服务器:

 NamedPipeServerStream pipeServer = new NamedPipeServerStream("myPipe", PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances,  PipeTransmissionMode.Byte, PipeOptions.Asynchronous);

远程客户端会:

 using (NamedPipeClientStream pipeStream = new NamedPipeClientStream(serverIP, "myPipe", PipeDirection.InOut))
{
    pipeStream.Connect(2000);
}

当然它成功了。 有没有办法限制它? 谢谢!

【问题讨论】:

    标签: c# remote-access named-pipes


    【解决方案1】:

    这似乎可以阻止远程连接,我也遇到了“NT AUTHORITY\NETWORK”的问题:

    var PipeSecurity = new PipeSecurity(); 
    
    var networkSid = new SecurityIdentifier(WellKnownSidType.NetworkSid, null);
    PipeSecurity.AddAccessRule(new PipeAccessRule(networkSid, PipeAccessRights.FullControl, AccessControlType.Deny));
    

    【讨论】:

      【解决方案2】:

      找到了! 您需要限制 NT AUTHORITY\NETWORK 的使用:

      PipeSecurity PipeSecurity = new PipeSecurity();            
              PipeAccessRule AccessRule = new PipeAccessRule(@"NT AUTHORITY\NETWORK", PipeAccessRights.FullControl, System.Security.AccessControl.AccessControlType.Deny);
              PipeSecurity.AddAccessRule(AccessRule);
              PipeAccessRule AccessRule2 = new PipeAccessRule(string.Format(@"{0}\{1}", Environment.UserDomainName, Environment.UserName), PipeAccessRights.FullControl, System.Security.AccessControl.AccessControlType.Allow);
              PipeSecurity.AddAccessRule(AccessRule2);
      

      然后将其添加到ctor中:

       NamedPipeServerStream m_PipeServer = new NamedPipeServerStream("myPipe", PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances, PipeTransmissionMode.Byte, PipeOptions.Asynchronous, 0, 0, PipeSecurity);
      

      请注意,当使用管道安全性时,拒绝网络访问是不够的,但您需要允许应该使用该管道的当前用户(或多个用户)访问。

       string.Format(@"{0}\{1}", Environment.UserDomainName, Environment.UserName)
      

      【讨论】:

      • 首先:您的代码示例的第 3 行似乎出现了复制粘贴错误。代码中没有使用m_AccessRule,应该是AccessRule。除此之外,这给了我一个IdentityNotMappedException 将访问规则添加到PipeSecurity 对象。这表明我的系统上不存在NT AUTHORITY\NETWORK 用户,但这是不可能的,是吗?
      • @aRestless 修复了它。它怎么可能不存在于您的系统中?当你尝试共享文件夹时,在文本框中输入“网络服务”,它没有找到它?
      • 如果我们在谈论这个对话:puu.sh/iFLJe/1d394791a6.png(虽然是德语文本)不,它没有找到它。更奇怪的是,如果我将AccessRule 留在外面,我可以远程连接到管道,但我需要(你的)AccessRule2 才能完全访问管道。似乎AccessRule2 允许的东西比它应该的要多。
      • @aRestless 我们最终将 AccessRule2 的内容简化为 PipeAccessRights.ReadWrite | PipeAccessRights.CreateNewInstance,这对我们来说已经足够了。 (此解决方案仅解决网络问题)。您的“网络”用户是否可能以某种方式被称为不同?这可能是解决您问题的关键吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      相关资源
      最近更新 更多