質問
私は、ASP.NET 2.0で偽装コンテキストの処理を開始するとの問題がある。
私は自分のWebサービスのコードで新しいプロセスを開始しています。 5.1、IIS .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サービスコード内の変数ます:
未処理の例外:System.Security.SecurityException:アクセスが拒否されました\ System.Security.Principal.WindowsIdentity.GetCurrentInternal(TokenAccessLevels desiredAccess、ブールthreadOnly)のR \ n個の\ rをする\ n \ R \ nはSystem.Securityました。 Principal.WindowsIdentity.GetCurrent()で失敗したアセンブリの\ R \ nはObfuscatedMdc.Program.Main(文字列[]引数)で\ R \ nのゾーン:\ R \ nMyComputer
偽装ユーザーは、ローカル管理者であり、Cへのアクセスを持っています。\ KB \ GetWindowUser.exe実行ファイルを
私はProcesStartInfoプロパティ、ドメイン、ユーザとパスワードで明示的にウィンドウのユーザーを指定すると、、私はメッセージ次しまいました。 http://img201.imageshack.us/img201/5870/pstartah8.jpg の
これは(5.1 IIS)asp.netからASPNETとは異なる資格情報でプロセスを開始することは可能ですか?
解決
あなたはGACに特権コードを入れて(または完全な信頼で実行)する必要があります。
GACのコードがXXXはあなたが要求している、これまでどのような権限であるXXXPermissionをアサートする必要があり、それなりすまし、ハードドライブまたは何を持っているにアクセスすることがます。
あなたはすぐにあとがきアサートを元に戻す必要があります。
あなたはGACに入れて、あなたのDLLのAPIは、虐待のための機会を持っていないことを確認する必要があります。たとえば、コマンドラインアプリケーションを介してサーバーのユーザーのバックアップをさせるためのウェブサイトを書いていた場合、あなたのAPIのような方法で古い公開しなければならない「(バックアップ)」ではなく「LaunchAribitraryProcess(文字列のパス)」
web.configファイルには、偽装が同様に設定されている必要があります。または、CASと同様のNTFSアクセス許可の問題に実行されます。
ここで完全な説明でます。
他のヒント
また、
内のコードをラップしてみてくださいusing (Impersonator person = new Impersonator("domainName", "userName",
"password")
{
// do something requiring special permissions
}
正確に何をしようとしていますか?私はかなりあなたのコードのポイントは、異なる実行可能ファイルを作成しているものを見ることができません。それは奇妙に見えます。おそらく、それはあなたが最初に解決しようとしているビジネス環境の問題を述べるために、より役立つだろう。
に見えます。 Windowsのブロックは、セキュリティホールとして、その時点であなたは基本的に誰かを懇願しているので、あなたのシステムを引き継ぐため、この。そここの制限を回避するための方法かもしれないが、それをしない - それはあなた自身の利益のためだ。
。代わりに、IISは、あなたがそれを持っている必要があり、正確に権利を持っている限られた権限を持つユーザーが、偽装持っています。例えば。あなたが書くためにWebサービスをしたいフォルダのみを所有しているユーザーアカウントを作成するか、または適切な権利の他のどんな組み合わせ。限られたユーザーを偽装する場合は、このエラーコードが表示されませんが、それでもあなたはここにある良性の実行可能ファイルを呼び出すことができる必要があります。