我想知道是否可以限制远程机器访问服务器中的命名管道。 我正在按如下方式初始化服务器:
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);
}
当然成功了。 有没有办法限制它? 谢谢!
最佳答案
找到了! 您需要限制 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);
然后将其添加到构造函数中:
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)
关于c# - 是否可以限制远程机器连接到 NamedPipeServerStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30079374/