簡體   English   中英

網絡上的C#NamedPipe在客戶端連接上引發UnauthorizedAccessException

[英]C# NamedPipe over network throws UnauthorizedAccessException on client connect

我有一個客戶端和一個NamedPipe服務器。 客戶端和服務器在不同的Windows服務上運行。 在同一台計算機上,連接可以正常工作。 但是,當嘗試從另一台計算機訪問服務器時,將拋出UnauthorizedAccessException類型的異常(訪問被拒絕)。 我研究了幾篇文章,並在服務器上包含了AccessRules,但是它沒有用。 客戶端計算機用戶在服務器計算機上不存在。 在這種情況下是否有特定的/ AccessRule設置? 有人知道解決方案嗎?

服務器:

private NamedPipeServerStream _setupServer;

PipeSecurity ps = new PipeSecurity();
//Everyone
ps.AddAccessRule(new PipeAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), PipeAccessRights.ReadWrite, AccessControlType.Allow));
//Users
ps.AddAccessRule(new PipeAccessRule(new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null), PipeAccessRights.ReadWrite, AccessControlType.Allow));
//SYSTEM
ps.AddAccessRule(new PipeAccessRule(new SecurityIdentifier(WellKnownSidType.LocalSystemSid, null), PipeAccessRights.FullControl, AccessControlType.Allow));

using (_setupServer = new NamedPipeServerStream(typeof(ISetupClient).Name, PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances, PipeTransmissionMode.Message, PipeOptions.None, 4024, 4024, ps))
{
     this._setupServer.WaitForConnection();
     //...
}

客戶:

string ipServidor = "192.168.40.155";
using (var setupClient = new NamedPipeClientStream(ipServidor, typeof(ISetupClient).Name, PipeDirection.InOut, PipeOptions.None))
{
    int timeOut = 10;
    setupClient.Connect(timeOut);
    //...
}

我不知道為什么這個問題被否決了-我糾正了這一點。

我在實驗室中使用不同用戶的兩台Win 7機器上對此進行了測試。

Windows中的遠程命名管道是通過SMB / CIFS進行的。 因此,通常的登錄限制適用。

如果我在本地安全策略中進行了更改,則能夠使它成功運行:

安全選項

帳戶:訪客帳戶狀態–更改為“已啟用”

用戶權限分配

拒絕從網絡訪問此計算機-刪除“來賓”

警告

這不是一個好主意。 我只做了更改以驗證這一點,並立即將其更改回。

本地安全策略中還有一個選項,用於添加可以匿名訪問的命名管道,但這在我的情況下不起作用。 必須對此進行調查。

我認為,使用命名管道進行未經身份驗證的訪問不是最佳解決方案。 通常,我更喜歡通過身份驗證的連接,但是就我而言,我的大部分開發工作都是在企業Intranet中進行的,該計算機的所有計算機都位於具有AD用戶的Active Directory環境中,因此這很容易。

也許您可以使用在兩台機器上使用相同的用戶名和相同的密碼的老技巧,這將在不更改上述策略的情況下起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM