1

次のように、NULLSECURITY_ATTRIBUTESを持つクライアントに名前付きパイプを提供するC++サービスがあります。

hPipe = CreateNamedPipe( lpszPipename, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, BUFSIZE, BUFSIZE, 0, NULL);

このパイプを使用してサービスを取得するdllがあります。

dllを使用して正常に動作するac#GUIがあります。

このdll(同じPC上でまったく同じもの)を使用する.net Webサイトがありますが、パイプを開こうとすると常に許可が拒否されます。

なぜこれが起こるのか、そしてそれを修正する方法を知っている人はいますか?

また、msdn情報をまだ理解していないので、SECURITY_ATTRIBUTESに関する優れたチュートリアルを知っている人はいますか。

ありがとう、パトリック

4

3 に答える 3

2

ASP.NET Webサイトで使用されている認証の種類と、そのサイトのweb.configファイルの偽装設定を確認してください。おそらく、ASP.NETコードは、マシン上で名前付きパイプを作成することを許可されていないアカウントで実行されています。

ASP.NETアプリで使用されているアカウントにさらに多くのアクセス許可を付与するか、別の(より特権の高い)アカウントを使用するようにそのWebアプリを構成することで、修正できる場合があります。そうは言っても、Webサイトへのリモート訪問者が名前付きパイプを作成できるようにしたいですか?私はあなたに講義しません、私はあなたがそれについて考えたと思います。

私が今まで見た中で最も親しみやすく、徹底的なSECURITY_ATTRIBUTESの説明は、KeithBrownによるこの本にあります... http://www.amazon.co.uk/gp/product/0201604426

于 2008-12-04T12:02:40.890 に答える
2

名前付きパイプの既定の ACL (null セキュリティ記述子で得られるもの) は、LocalSystem、管理者、およびパイプの所有者/作成者にのみ書き込みアクセスを許可します。Web アプリケーションがこれらのアカウントのいずれかで実行されていない限り (デフォルトではそうではありません)、書き込みアクセスを取得することはできません。(読み書きを求めていると思います。)

いくつかのオプションがあります...

  1. パイプを作成したサービスと同じアカウントで Web アプリケーションを実行します。

  2. web.config で書き込みアクセス権を持つ特定のユーザーを指定するか、IIS によって渡されたユーザーを使用するように設定する (および書き込みアクセス権を持つユーザー アカウントからアプリケーションにアクセスする) ことによって、偽装を使用するように Web アプリケーションを構成します。

  3. パイプ アクセスの間、書き込みアクセス権を持つユーザーを手動で偽装します (たとえば、WindowsIdentity.Impersonate を使用)。

  4. Everyone (またはアプリケーションを実行している特定のアカウント) に書き込みアクセスを許可する既定以外のセキュリティ記述子をパイプで使用しますが、設定はより複雑になります。

簡単なセキュリティ記述子を作成する例をここに示します。ニーズに合わせて変更できるはずです。

于 2008-12-05T01:31:56.560 に答える
2

次の行を追加します。

< 身元偽装 = "true" />

web.config ファイルの < system.web> セクションに、パイプへのアクセスを許可しました。セキュリティへの影響がよくわからないので、他の人にこれを使用することはお勧めしませんが、今のところ私たちの要件には合っています。

正しい方向への指針を与えてくれた Eric と Martin の両方に感謝します。

于 2008-12-08T16:15:03.870 に答える