IIS AppPoolIdentity i uprawnienia dostępu do zapisu w systemie plików

395

Oto problem z usługami IIS 7.5 i ASP.NET, który badałem i do czego nie docierałem. Każda pomoc byłaby bardzo mile widziana.

Moje pytanie brzmi: używając programu ASP.NET w IIS 7.5, w jaki sposób IIS i / lub system operacyjny pozwalają aplikacji internetowej pisać w folderze, na przykład w C:\dumptrybie pełnego zaufania? W jaki sposób nie muszę jawnie dodawać uprawnień do zapisu dla użytkownika puli aplikacji (w tym przypadku ApplicationPoolIdentity)?

Tyle wiem:

  • W IIS 7.5 domyślną tożsamością dla puli aplikacji jest ApplicationPoolIdentity.
  • ApplicationPoolIdentity reprezentuje konto użytkownika systemu Windows o nazwie „IIS APPPOOL \ AppPoolName”, które jest tworzone podczas tworzenia puli aplikacji, gdzie AppPoolName jest nazwą puli aplikacji.
  • Użytkownik „IIS APPPOOL \ AppPoolName” jest domyślnie członkiem IIS_IUSRSgrupy.
  • Jeśli są uruchomione w pełnym zaufaniem, aplikacja internetowa może napisać do wielu obszarach systemu plików (z wyłączeniem foldery podoba C:\Users, C:\Windowsitp). Na przykład, aplikacja będzie miała dostęp do zapisu niektórych folderów, jak, C:\dump.
  • Domyślnie IIS_IUSRSgrupa nie ma dostępu do odczytu ani zapisu C:\dump(przynajmniej brak dostępu, który jest widoczny na karcie „Bezpieczeństwo” w Eksploratorze Windows).
  • Jeśli odmówisz dostępu do zapisu IIS_IUSRS, otrzymasz SecurityException podczas próby zapisu do folderu (zgodnie z oczekiwaniami).

Biorąc to wszystko pod uwagę, w jaki sposób przyznaje się dostęp do zapisu użytkownikowi „IIS APPPOOL \ AppPoolName”? Proces w3wp.exe działa jako ten użytkownik, więc co pozwala temu użytkownikowi pisać do folderu, do którego nie wydaje się mieć wyraźnego dostępu?

Należy pamiętać, że rozumiem, że prawdopodobnie zostało to zrobione ze względu na wygodę, ponieważ trudno byłoby udzielić użytkownikowi dostępu do każdego folderu, do którego należy pisać, jeśli działa się w trybie pełnego zaufania. Jeśli chcesz ograniczyć ten dostęp, zawsze możesz uruchomić aplikację w obszarze Średniego zaufania. Chcę dowiedzieć się, w jaki sposób system operacyjny i / lub IIS zezwalają na te zapisy, nawet jeśli wydaje się, że nie przyznano dostępu do jawnego systemu plików.

rsbarro
źródło

Odpowiedzi:

403

ApplicationPoolIdentityPrzypisany jest członkostwo w Usersgrupie, jak i IIS_IUSRSgrupy. Na pierwszy rzut oka może się to wydawać nieco niepokojące, jednak Usersgrupa ma nieco ograniczone prawa NTFS.

Na przykład, jeśli spróbujesz utworzyć folder w C:\Windowsfolderze, okaże się, że nie możesz. ApplicationPoolIdentityNadal musi być w stanie odczytać pliki z folderów systemu Windows (w przeciwnym razie jak inaczej proces roboczy w stanie dynamicznie załadować niezbędne DLL).

W odniesieniu do twoich obserwacji na temat możliwości pisania do twojego c:\dumpfolderu. Jeśli spojrzysz na uprawnienia w Zaawansowanych ustawieniach bezpieczeństwa, zobaczysz:

wprowadź opis zdjęcia tutaj

Zobacz, że specjalne pozwolenie jest dziedziczone z c:\:

wprowadź opis zdjęcia tutaj

To jest powód, dla którego Twoja witryna ApplicationPoolIdentitymoże czytać i zapisywać w tym folderze. To prawo jest dziedziczone z c:\napędu.

We wspólnym środowisku, w którym prawdopodobnie masz kilkaset witryn, każda z własną pulą aplikacji i tożsamością puli aplikacji, przechowujesz foldery witryn w folderze lub woluminie, z którego Usersusunięto grupę, a uprawnienia ustawione tak, że tylko Administratorzy i Konto SYSTEM ma dostęp (z dziedziczeniem).

Następnie należy indywidualnie przypisać wymagane uprawnienia, które są IIS AppPool\[name]wymagane w folderze głównym witryny.

Powinieneś także upewnić się, że wszystkie foldery, które utworzysz, w których przechowujesz potencjalnie poufne pliki lub dane, zostaną Usersusunięte z grupy. Należy również upewnić się, że instalowane aplikacje nie przechowują poufnych danych w swoich c:\program files\[app name]folderach i że zamiast tego używają folderów profilu użytkownika.

Tak, na pierwszy rzut oka wygląda na to, że ApplicationPoolIdentityma więcej praw niż powinno, ale tak naprawdę nie ma więcej praw, niż nakazuje to członkostwo w grupie.

An ApplicationPoolIdentity„S członków grupy może być badane przy użyciu SysInternals Proces narzędzia Explorer . Znajdź proces roboczy, który jest uruchomiony z tożsamością puli aplikacji, którą jesteś zainteresowany (musisz dodać User Namekolumnę do listy kolumn, aby wyświetlić:

wprowadź opis zdjęcia tutaj

Na przykład mam tutaj pulę o nazwie 900300Tożsamość puli aplikacji IIS APPPOOL\900300. Klikając prawym przyciskiem myszy na właściwości procesu i wybierając zakładkę Bezpieczeństwo widzimy:

wprowadź opis zdjęcia tutaj

Jak widzimy, IIS APPPOOL\900300jest członkiem Usersgrupy.

Kev
źródło
@Kev [+1] Opublikowałem podobne pytanie dotyczące uprawnień NTFS dla tożsamości puli aplikacji tutaj: stackoverflow.com/questions/11232675/… - Byłbym wdzięczny, gdybyś mógł zajrzeć.
one.beat.consumer
@ one.beat.consumer - przepraszam, nigdy nie widziałem twojego komentarza. Nadal tkwisz w tym pytaniu?
Kev
@ Kev - tak, problem stał się mniejszy, ponieważ zostałem odciągnięty na bok, ale wciąż nie został rozwiązany. jakieś pomysły?
one.beat.consumer
7
Głosujmy, aby ta sekcja została uwzględniona w MSDN. Nigdy nie zastanawiałem się nad tym, więc jest to świetna pomoc (i wstydzę się, że nigdy nie wiedziałem).
Grimace of Despair
67
Nie jest jasne, dlaczego ta podstawowa dokumentacja Microsoft IIS znajduje się w SO zamiast MSDN.
Amit Naidu
40
  1. Kliknij folder prawym przyciskiem myszy.

  2. Kliknij Właściwości

  3. Kliknij kartę Zabezpieczenia. Zobaczysz coś takiego:

wprowadź opis zdjęcia tutaj

  1. Kliknij przycisk „Edytuj ...” na powyższym ekranie. Zobaczysz coś takiego:

wprowadź opis zdjęcia tutaj

  1. Kliknij przycisk „Dodaj ...” na powyższym ekranie. Zobaczysz coś takiego:

wprowadź opis zdjęcia tutaj

  1. Kliknij przycisk „Lokalizacje ...” na powyższym ekranie. Zobaczysz coś takiego. Teraz przejdź do samego początku tej struktury drzewa i wybierz nazwę swojego komputera, a następnie kliknij OK.

wprowadź opis zdjęcia tutaj

  1. Teraz wpisz „iis apppool \ twoja_nazwa_aplikacji” i kliknij przycisk „Sprawdź nazwy”. Jeśli aplikacja istnieje, zobaczysz nazwę swojej aplikacji w polu tekstowym z podkreśleniem. Kliknij przycisk OK.

wprowadź opis zdjęcia tutaj

  1. Zaznacz / odznacz dostęp, którego potrzebujesz, aby udzielić konta

  2. Kliknij przycisk Zastosuj, a następnie OK.

fluidguid
źródło
0

Każda pula aplikacji w IIs tworzy własny bezpieczny folder użytkownika z domyślnie PEŁNYM zezwoleniem na odczyt / zapis w katalogu c: \ users. Otwórz folder Użytkownicy i zobacz, jakie są foldery puli aplikacji, kliknij prawym przyciskiem myszy i sprawdź ich prawa do przypisanego konta wirtualnego puli aplikacji. Powinieneś zobaczyć swoje konto w puli aplikacji już dodane z dostępem do odczytu / zapisu przypisanym do jego katalogu głównego i podfolderów.

Ten rodzaj dostępu do przechowywania plików jest wykonywany automatycznie i powinieneś być w stanie pisać w folderach kont użytkowników bez względu na to, co chcesz. Właśnie dlatego utworzono wirtualne konta użytkowników dla każdej puli aplikacji.

Stokely
źródło
Dzieje się tak tylko wtedy, gdy „Load User Profile” ma wartość True.
JamesQMurphy,
To prawda, co oznacza, że ​​folder użytkownika AppPool nie zostałby utworzony, gdyby to nie była prawda, prawda? Właśnie dlatego zbudowali go w ten sposób ..... aby uniemożliwić dostęp do II i przechowywania śmieci w Windows / temp i na całym dysku twardym zamiast bezpiecznego folderu zarządzanego tylko dla tego konta.
Stokely,
0

Próbowałem to naprawić problemy z dostępem do strony internetowej IIS, które objawiły się następująco w dziennikach zdarzeń → Windows → Aplikacja:

Nazwa dziennika: aplikacja
Źródło: ASP.NET 4.0.30319.0
Data: 1/5/2012 16:12:33
Identyfikator zdarzenia: 1314
Kategoria zadania: Wydarzenie internetowe
Poziom: Informacje
Słowa kluczowe: Classic
Użytkownik: nie dotyczy
Komputer: SALTIIS01

Opis:
Kod zdarzenia: 4008 
Komunikat o zdarzeniu: autoryzacja pliku nie powiodła się dla żądania. 
Czas wydarzenia: 1/5/2012 16:12:33 
Czas zdarzenia (UTC): 1/6/2012 12:12:33 AM 
Identyfikator zdarzenia: 349fcb2ec3c24b16a862f6eb9b23dd6c 
Sekwencja zdarzeń: 7 
Wystąpienie zdarzenia: 3 
Kod szczegółu zdarzenia: 0 

Informacje o aplikacji: 
    Domena aplikacji: / LM / W3SVC / 2 / ROOT / Application / SNCDW-19-129702818025409890 
    Poziom zaufania: pełny 
    Wirtualna ścieżka aplikacji: / Application / SNCDW 
    Ścieżka aplikacji: D: \ Sites \ WCF \ Application \ SNCDW \ 
    Nazwa maszyny: SALTIIS01 

Przetwarzać informacje: 
    Identyfikator procesu: 1896 
    Nazwa procesu: w3wp.exe 
    Nazwa konta: iisservice 

Prośba o informacje: 
    Żądaj adresu URL: http: //webservicestest/Application/SNCDW/PC.svc 
    Ścieżka żądania: /Application/SNCDW/PC.svc 
    Adres hosta użytkownika: 10.60.16.79 
    Użytkownik: js3228 
    Jest uwierzytelniony: prawda 
    Typ uwierzytelnienia: negocjuj 
    Nazwa konta wątku: iisservice 

W końcu musiałem dać Everyonegrupie Windows dostęp do odczytu do tego folderu , aby działał poprawnie.

SharpC
źródło