2008-12-08 31 views
7

Mam problem z uruchamianiem procesów w kontekście personifikowanym w ASP.NET 2.0.Rozpoczęcie procesu i podszywanie się pod numer

Zaczynam nowy proces w moim kodzie serwisowym. 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" to aplikacja konsoli zawierające następujący kod:

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

Kiedy wywołać usługę internetową bez personifikacji, wszystko działa bez zarzutu.

Po włączeniu personifikacji, następujący błąd jest napisane w "błędów" w kodzie zmienna usług Web:

Unhandled Wyjątek: System.Security.SecurityException. Odmowa dostępu \ r \ n \ r \ n na System.Security.Principal.WindowsIdentity.GetCurrentInternal (TokenAccessLevels desiredAccess, Boolean threadOnly) \ r \ n w System.Security.Principal.WindowsIdentity.GetCurrent() \ r \ n at ObfuscatedMdc.Program.Main (String [] args) \ r \ nFirma złożenia, która się nie powiodła: \ r \ nMyComputer

Podszywany użytkownik jest lokalnym administratorem i ma dostęp do pliku wykonywalnego C: \ KB \ GetWindowUser.exe.

Kiedy okno użytkownikowi wyraźnie określić we właściwościach ProcesStartInfo domeny, użytkownika i hasło, mam następujący komunikat: http://img201.imageshack.us/img201/5870/pstartah8.jpg

Czy to możliwe, aby rozpocząć proces z różnych poświadczeń niż ASPNET z ASP.NET (IIS 5.1)?

+1

żadnego ostatecznego rozwiązania z pełnym przykładowy kod źródłowy działa na ten temat? – Kiquenet

Odpowiedz

3

Musisz umieścić kod uprzywilejowany w GAC (lub uruchomić w pełnym zaufaniu).

Kod w GAC musi potwierdzać XXXPermission, gdzie XXX jest tym, na jakie pozwolenie sobie życzycie, czy to podszywanie się, dostęp do dysku twardego, czy co macie.

Powinieneś powrócić do potwierdzenia bezpośrednio po słowach.

Powinieneś się upewnić, że interfejs API twojej biblioteki DLL, który umieściłeś w GAC, nie ma możliwości nadużycia. Na przykład, jeśli tworzysz witrynę internetową umożliwiającą użytkownikom tworzenie kopii zapasowych serwera za pomocą aplikacji uruchamianej z wiersza poleceń, Twój interfejs API powinien ujawniać metodę "BackUp()", a nie "LaunchAribitraryProcess (ścieżka łańcuchowa)"

Internet.plik konfiguracyjny musi mieć również podszywanie się pod użytkownika, lub wystąpią problemy z uprawnieniami NTFS, a także CAS.

Oto complete explanation.

0

Co dokładnie próbujesz zrobić? Nie mogę dokładnie zobaczyć, jaki jest sens twojego kodu w tworzeniu innego pliku wykonywalnego. Wygląda raczej dziwnie. Być może byłoby bardziej pomocne określenie problemu, który próbujesz rozwiązać najpierw.

0

Wygląda na to, że chcesz, aby usługa IIS podszywała się pod użytkownika z wyższymi uprawnieniami niż sama usługa (w tym przypadku administrator). Windows blokuje to jako lukę bezpieczeństwa, ponieważ w tym momencie w zasadzie błagasz kogoś, aby przejął twój system. Może istnieć sposób obejścia tego ograniczenia, ale nie rób tego - jest to dla twojego dobra.

Zamiast tego, aby usługi IIS podszywały się pod użytkownika z ograniczonymi uprawnieniami, który ma dokładnie te uprawnienia, które są mu potrzebne. Na przykład. utwórz konto użytkownika, do którego należą tylko te foldery, do których chcesz napisać twoja usługa sieciowa lub jakakolwiek inna kombinacja praw jest odpowiednia. Podszywając się pod ograniczonego użytkownika, nie zobaczysz tego kodu błędu, ale nadal możesz zadzwonić do niezłośliwego pliku wykonywalnego, który masz tutaj.

Powiązane problemy