7

ASP.NET 2.0 の偽装コンテキストでプロセスを開始する際に問題があります。

Web サービス コードで新しいプロセスを開始しています。IIS 5.1、.NET 2.0

[WebMethod]
public string HelloWorld()
{
    string path = @"C:\KB\GetWindowUser.exe";
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.WorkingDirectory = Path.GetDirectoryName(path);
    startInfo.FileName = path;
    startInfo.UseShellExecute = false;
    startInfo.CreateNoWindow = true;
    startInfo.ErrorDialog = false;
    startInfo.RedirectStandardOutput = true;
    startInfo.RedirectStandardError = true;
    Process docCreateProcess = Process.Start(startInfo);

    string errors = docCreateProcess.StandardError.ReadToEnd();
    string output = docCreateProcess.StandardOutput.ReadToEnd();
}

「C:\KB\GetWindowUser.exe」は、次のコードを含むコンソール アプリケーションです。

static void Main(string[] args)
{
    Console.WriteLine("Windows: " + WindowsIdentity.GetCurrent().Name);
}

偽装せずに Web サービスを呼び出すと、すべて正常に動作します。

偽装をオンにすると、Web サービス コードの "errors" 変数に次のエラーが書き込まれます。

未処理の例外: System.Security.SecurityException: アクセスが拒否されました。 .GetCurrent()\r\n at ObfuscatedMdc.Program.Main(String[] args)\r\n失敗したアセンブリのゾーン:\r\nMyComputer

偽装されたユーザーはローカル管理者であり、C:\KB\GetWindowUser.exe 実行可能ファイルにアクセスできます。

ProcesStartInfoプロパティの Domain、User、Password でウィンドウ ユーザーを明示的に指定すると、次のメッセージが表示されました。

asp.net (IIS 5.1) から ASPNET とは異なる資格情報でプロセスを開始することは可能ですか?

4

4 に答える 4

3

特権コードを GAC に入れる (または完全信頼で実行する) 必要があります。

GAC のコードは、XXXPermission をアサートする必要があります。ここで、XXX は、なりすまし、ハードドライブへのアクセスなど、要求しているアクセス許可です。

直後にアサートを元に戻す必要があります。

GAC に配置した DLL の API が悪用される可能性がないことを確認する必要があります。たとえば、ユーザーがコマンド ライン アプリケーションを介してサーバーをバックアップできるようにする Web サイトを作成している場合、API は「LaunchAribitaryProcess(string path)」ではなく「BackUp()」などのメソッドを公開する必要があります。

web.config ファイルにも偽装を設定する必要があります。そうしないと、NTFS アクセス許可の問題と CAS が発生します。

ここに完全な説明があります。

于 2008-12-08T18:59:56.190 に答える
1

コードを内部にラップすることもできます

using (Impersonator person = new Impersonator("domainName", "userName",
"password")
{
    // do something requiring special permissions
}

http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework.windowsforms/topic62740.aspxで述べたように

于 2009-05-12T02:32:39.033 に答える
0

正確に何をしようとしていますか?別の実行可能ファイルを作成する際に、コードのポイントが何であるかがよくわかりません。かなり奇妙に見えます。おそらく、解決しようとしているビジネス上の問題を最初に述べた方が役立つでしょう。

于 2008-12-08T18:01:19.630 に答える
0

IIS サービスに、サービス自体よりも高い権限を持つユーザー (この場合は管理者) を偽装させようとしているようです。Windows はこれをセキュリティ ホールとしてブロックします。その時点で、基本的に誰かにシステムを引き継ぐように頼んでいるからです。この制限を回避する方法があるかもしれませんが、そうしないでください。それはあなた自身のためです。

代わりに、必要な権限を正確に持っている限られた権限を持つユーザーを IIS に偽装させます。たとえば、Web サービスに書き込みたいフォルダーのみを所有するユーザー アカウントを作成するか、その他の適切な権利の組み合わせを作成します。制限付きユーザーになりすます場合、このエラー コードは表示されませんが、ここにある無害な実行可能ファイルを呼び出すことはできます。

于 2008-12-08T18:26:07.647 に答える