13

msdnによると:

ASP.NET Web ページとサーバー コントロール コードは、Web サーバー上の ASP.NET ワーカー プロセスのコンテキストで実行されます。ASP.NET Web ページまたはサーバー コントロールで Start メソッドを使用すると、新しいプロセスはアクセス許可が制限された Web サーバーで実行されます。プロセスは、クライアント ブラウザと同じコンテキストで開始されず、ユーザーのデスクトップにアクセスできません。

「制限されたアクセス許可」とは正確にはどのアカウントですか?

例 :

  • 私はwin7に次のように記録されていますRoyiN
  • Windows 認証が有効になっています
  • 偽装はweb.config のよう有効になっています (サイト全体)BobK
  • W3WPユーザーは(UserAネットワークでも ApplicationPoolIdentity でもありません)。

C# ではProcess.start("....cmd.exe...")(認証情報は " " ," "," ")StartinfoMartinPasswordDomain

  • account最終的に実行する効率的なのは誰cmd.exeですか?

  • 「制限されたアクセス許可」は実際には誰に関係していますか?

4

3 に答える 3

5

Process.Start内部では、次の 2 つのネイティブ Win32 呼び出しのいずれかに依存しているため、偽装はここでは機能しません。

ProcessStartInfo.UserName が提供されている場合:

CreateProcessWithLogonW(startInfo.UserName, startInfo.Domain, ...)

CreateProcessWithLogonW

そうでない場合:

CreateProcess(null, cmdLine, null, null, true, ...)

CreateProcess

nullCreateProcess に渡される s は、おそらくあなたを悩ませているものです。MSDN から:

構造体の lpSecurityDescriptor メンバーは、メイン スレッドのセキュリティ記述子を指定します。lpThreadAttributes が NULL または lpSecurityDescriptor が NULL の場合、スレッドは既定のセキュリティ記述子を取得します。スレッドの既定のセキュリティ記述子の ACL は、プロセス トークンから取得されます。

スレッドを呼び出すのではなく、プロセス トークンからと言われていることに注意してください。偽装された ID は、スレッドにバインドされているため、パーティーに参加する機会がありません。

于 2012-12-28T19:31:02.600 に答える
2

MSDNエントリは、偽装が有効になっていて、特定のユーザーコンテキストの下にいる場合でも、新しいプロセスがプロセスによって生成され、偽装がスレッドレベルで発生するという事実に言及していると思います。そうは言っても、私はそれが「UserA」コンテキストで実行されると信じています。

関連するKBエントリは次のとおりです。

http://support.microsoft.com/kb/889251

同じエントリで、CreateProcessAsUserを使用して偽装を許可する方法が説明されていることに注意してください。

于 2012-12-28T19:12:59.007 に答える
2

この問題を解決しようとしたときにわかったように、多くの小さなことが異なります。RoyiNで実行される場合がありますが、USERPROFILEが/ Users / RoyiNフォルダーではなく、C:\ Windows \ system32 \ config\systemprofileに設定されている場合があります。

何をしようとしているかによっては、問題が発生する可能性があります。私の場合、gitプロセスを開始すると永久にハングします。USERPROFILEとHOMEが間違っていただけでなく、偽装されたユーザーがマップされたネットワークドライブでうまく機能しないこともわかりました。

于 2012-12-28T19:19:51.233 に答える