2012-12-28 11 views
12

Według msdn: strona internetowaProcess.Start() pod asp.net?

ASP.NET i kod sterujący serwer wykonuje w kontekście procesu roboczego ASP.NET na serwerze sieci Web. Jeśli używasz metody Start na stronie internetowej ASP.NET lub sterowaniu serwera, nowy proces wykonuje się na serwerze sieci Web z ograniczonymi uprawnieniami. Proces nie rozpoczyna się w tym samym kontekście, co przeglądarka klienta, a nie ma dostępu do pulpitu użytkownika.

Którekonto właśnie jest "ograniczone uprawnienia" ?

Przykład:

  • jestem zalogowany do win7 jako RoyiN
  • uwierzytelnianie systemu Windows jest włączona
  • personifikacji jest włączona jak BobKna web.config (na całym terenie)
  • Użytkownik W3WP użytkownika to UserA (nie sieć ani ApplicationPoolIdentity).

W języku C# zrobić Process.start("....cmd.exe...") (zStartinfo poświadczeń jak: "Martin", "Password", "Domain")

  • Kto jest wydajny account co ostatecznie prowadzi cmd.exe?

  • Do kogo odnosi się "ograniczone zezwolenie"?

+0

Mam nadzieję, że czat pomógł nieco - odpowiedzieć na 2 pytania: "Kto jest kontem, które faktycznie uruchamia program cmd.exe?" => UserA. "Do kogo" ograniczone uprawnienia "w rzeczywistości dotyczy?" => uprawnienia ograniczone dotyczą (zwykle) przypadku użytkownika w3wp będącego tożsamością puli aplikacji, który ma ograniczone prawa. W twoim przypadku "UserA" – JerKimball

+0

@JerKimball zwróć uwagę, że Startinfo _przykładuje ci poświadczenia. –

+0

OK, w takim przypadku nowy proces powinien zostać uruchomiony pod tą samą tożsamością co użytkownik/domena określona w informacji o uruchomieniu procesu. – JerKimball

Odpowiedz

5

personifikacji nie będzie wchodzić w grę tutaj, ponieważ pod maską, Process.Start powołuje się na jeden z dwóch rodzimej Win32 nazywa:

Jeśli ProcessStartInfo.UserName jest:

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

CreateProcessWithLogonW

A jeśli nie:

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

CreateProcess

Przeniesione do CreateProcess null są prawdopodobnie tym, co cię gryzie; z MSDN:

Element lpSecurityDescriptor struktury określa deskryptor bezpieczeństwa dla głównego wątku. Jeśli lpThreadAttributes ma wartość NULL lub lpSecurityDescriptor ma wartość NULL, wątek otrzymuje domyślny deskryptor zabezpieczeń: . Listy ACL w domyślnym deskryptorze zabezpieczeń dla wątku pochodzą z tokenu procesu.

Uwaga: z tokenu procesu, bez wywoływania wątku - podana tożsamość nie ma szansy dołączyć do imprezy, ponieważ jest związana z wątkiem.

+0

Im nie używam podszywania się w moim kodzie, jest napisane w web.cofig. więc cała strona jest podporządkowana! –

+1

@RoyiNamir, to naprawdę nie ma znaczenia, kto napisał kod podszywania się pod inne osoby - zachowanie będzie dokładnie takie samo, jeśli użyje się albo tego, który jest już częścią ASP.Net, albo jakiegoś ręcznego, ponieważ ostatecznie sprowadzi się do tego samego połączenia natywnego. Web.config nie może zmienić konta, w którym proces roboczy jest uruchamiany - po prostu uruchamia podszywanie się na wątkach, które uruchamiają żądanie. –

+0

@AlexeiLevenkov, więc uprawnienia użytkownika w3wp nie będą miały żadnych zastosowań .... prawda? spowodować, że wszystkie wątki zostaną wykonane przez podszytego użytkownika. –

2

wierzę wpis MSDN odnosi się do faktu, że nawet jeśli personifikacja jest włączona i jesteś pod określonym kontekście użytkownika, nowy proces będzie zrodził przez proces - i personifikacji występuje na poziomie nici. To powiedziawszy, sądzę, że działałoby to w kontekście "UserA".

Oto stosowny wpis KB:

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

Zauważ, że sam wpis opisuje jak używać CreateProcessAsUser aby umożliwić personifikacji.

+0

To. Domyślnie proces odpalania byłby uruchamiany jako, że tożsamość uruchamia pulę aplikacji. Jedynym sposobem na uruchomienie procesu jako innego kontekstu użytkownika byłoby p/wywołanie go. – JerKimball

+0

@JerKimball ale personifikacja zastępuje użytkownika w3wp ..... –

+0

Ale jak @OnoSendai powiedział, personifikacja dzieje się na poziomie wątku, Process.Start wyświetla się za pomocą P/invoke wewnętrznie do wywołania win32 CreateProcessWithLogonW lub CreateProcess (w zależności od tego, czy masz NazwaUżytkownika ustawiona w ProcessStartInfo) ... właściwie, lem to umieść to w odpowiedzi. – JerKimball

2

Jak się dowiedziałem, próbując rozwiązać this problem, wiele małych rzeczy jest różnych. Może działać pod RoyiN, ale może się okazać, że USERPROFILE jest ustawione na C: \ Windows \ system32 \ config \ systemprofile, a nie na folderze/Users/RoyiN.

W zależności od tego, co próbujesz zrobić, może to powodować problemy. W moim przypadku, rozpoczęcie procesu git zawiesza się na zawsze.Nie tylko USERPROFILE i HOME źle, ale również okazało się, że podosobni użytkownicy nie odtwarzają dobrze zmapowanych dysków sieciowych.

Powiązane problemy