【问题标题】:Setting named pipe security in a Domain在域中设置命名管道安全性
【发布时间】:2010-11-11 18:14:42
【问题描述】:

我有一个通过命名管道设置的服务器。它适用于域管理员,但是当我在普通用户上测试客户端时,它会给出异常“访问路径被拒绝”。所以这就是我试图设置权限以授予域中所有经过身份验证的用户的访问权限。我在这里做错了什么?

服务器:

        NamedPipeServerStream pipeServer = new NamedPipeServerStream("message-generator", PipeDirection.InOut, pipeThreads, PipeTransmissionMode.Message, PipeOptions.None);
        PipeSecurity pipeSecurity = pipeServer.GetAccessControl();
        pipeSecurity.AddAccessRule(new PipeAccessRule(@"localdomain\Authenticated Users", PipeAccessRights.FullControl, AccessControlType.Allow));
        pipeServer.SetAccessControl(pipeSecurity);

客户:

NamedPipeClientStream pipeClient = new NamedPipeClientStream("servername", "message-generator", PipeDirection.InOut, PipeOptions.None, TokenImpersonationLevel.Impersonation))

服务器名称和域显然不同,但是在服务器上,当它到达 pipeServer.SetAccessControl 函数时,它给了我异常“UnauthorizedAccessException”。

非常感谢任何帮助

【问题讨论】:

    标签: c# permissions named-pipes


    【解决方案1】:

    您需要使用 NamedPipeServerStream 的 ctor,它允许您在管道句柄上指定所需的访问权限:

    public NamedPipeServerStream(
        string pipeName,
        PipeDirection direction,
        int maxNumberOfServerInstances,
        PipeTransmissionMode transmissionMode,
        PipeOptions options,
        int inBufferSize,
        int outBufferSize,
        PipeSecurity pipeSecurity,
        HandleInheritability inheritability,
        PipeAccessRights additionalAccessRights
    )
    

    当你调用它时,你需要在最后一个参数中请求PipeAccessRights.ChangePermissions。那么SetAccessControl 应该会成功。

    有关示例,请参阅我的博客 http://blogs.charteris.com/blogs/chrisdi/archive/2009/12/04/exploring-the-wcf-named-pipe-binding-part-4.aspx

    【讨论】:

    • 伙计,NamedPipeServerStream 构造函数有点愚蠢,除非设置 PipeAccessRights,否则无法更改安全性,但是在构造函数中,如果设置 PipeAccessRights,您需要提供PipeSecurity 才能到达那里...所以您不妨一开始就设置它。
    猜你喜欢
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多