Dostęp do zapisu dla KAŻDEGO działa, IUSR, IIS_IUSRS, DefaultAppPool nie działa. dlaczego?

10

Ok. Tutaj próbujemy skonfigurować klasyczną stronę internetową ASP w IIS 7.5 w systemie Windows Server 2008 R2. W katalogu głównym witryny znajduje się folder o nazwie dbc, który zawiera plik służący do odczytu i zapisu niektórych informacji podczas przetwarzania każdej strony.

Problem polega na tym, że jeśli udzielę uprawnień do zapisu IUSR i uprawnień do zapisu IIS_IUSRS lub uprawnień do zapisu DefaultAppPool, otrzymam „Dostęp do ścieżki„ E: .. \ websiteroot \ dbc \ nazwa_pliku.txt ”jest zabroniony”

Ale jeśli udzielę WSZYSTKIMU dostępu do zapisu w tym folderze dbc, nie otrzymam żadnego błędu, wszystko wydaje się idealne.

Więcej informacji: Witryna działa w trybie klasycznego potoku, uwierzytelnianie anonimowe jest włączone (być może jest to jedyne uwierzytelnianie włączone). Próbowałem uwierzytelniania anonimowego przy użyciu konta IUSR oraz tożsamości puli aplikacji. W moim przypadku ApplicationPoolIdentity to tożsamość służąca do uwierzytelnienia witryny. Używamy COM + dla plików I / O. I Classic ASP Server.CreateObject, aby utworzyć z niego obiekt. COM + działa jako usługa sieciowa.

Myśli? Nie chcę udzielać uprawnień do zapisu KAŻDEMU. Czy coś brakuje?

ROZWIĄZANE: Oto co zrobiłem.

Moja strona internetowa o nazwie CipherDemo działała pod AppPoolIdentity w IIS 7.5, która mogła być zlokalizowana przez Appity Tożsamość IIS AppPool \ CipherDemo. Użyłem ICACLS, aby dać RW uprawnienia do tego folderu.

a COM +, który faktycznie wykonywał plik I / O, działał pod tożsamością usługi sieciowej. Kiedy korzystałem z Monitora procesów do śledzenia błędu odmowy dostępu, okazało się, że usługa sieciowa ma tylko uprawnienie do odczytu w tym folderze.

Użyłem ICACLS „nazwa folderu” / grant: r „NT AUTHORITY \ NETWORKSERVICE” :( OI) (CI) RXW / T, aby przyznać dostęp do zapisu w tym folderze.

I rozwiązałem to.

Miałem zamiar, ponieważ ponieważ witryna działa jako CipherDemo Identity, będzie to konto, które zostanie wykorzystane do uzyskania dostępu do pliku za pośrednictwem COM +. Jednak żenujące jest to, że COM + nadal działałby na własnych granicach tożsamości.

gmaran23
źródło

Odpowiedzi:

5

W IIS 7.5 (i opcjonalnie w IIS 7) wszyscy pracownicy działają z Tożsamością puli aplikacji: użytkownik „IIS AppPool * PulaNazwa *”.

Udziel dostępu temu użytkownikowi, a nie wszystkim (musisz wpisać nazwę w dialogach wyboru tożsamości - nie pojawi się ona w funkcji wyszukiwania).

Na stronie iis.net znajduje się bardzo przydatna strona, która omawia rzeczy bardziej szczegółowo.

Uwaga: w ramach IIS7 (Server 2008):

  • Tożsamość puli aplikacji ustawiasz na podstawie puli aplikacji dla aplikacji w ustawieniach zaawansowanych.
  • Nie ma obsługi GUI, więc będziesz potrzebować wiersza poleceń, aby ustawić uprawnienia ( icacls.exe).

Wreszcie, wybór tożsamości SQL Servera nie wie także o tożsamości puli aplikacji: użyj CREATE LOGINi CREATE USERpoczątkowo, po tym GUI można użyć do przyznania ról itp.

Richard
źródło
@Richard - Tak. Dzięki za szybką odpowiedź. Fora MSDN są obecnie bardzo nieużyteczne. Wracam ... Przez kilka dni nękałem witrynę IIS.net i awarię serwera. Używam domyślnej tożsamości puli aplikacji na moim serwerze IIS 7.5 / Win Server 2008 R2. I tak, przyznałem uprawnienia IIS APPPOOL \ DefaultAppPool Wite do mojego folderu „dbc”. Ponadto udzieliłem IUSR i IIS_IUSRS uprawnień do zapisu w tym folderze. To nadal nie działa, ale daję WSZYSTKIM uprawnienia do zapisu. Wiem, że coś mi brakuje. Czy możesz mi pomóc?
gmaran23
@ gmaran23: Jeśli oczywiste kroki nie działają, korzystam z Monitora procesów, aby zobaczyć dokładnie, co się nie powiedzie (i często będzie to albo otwarty plik prosi o zbyt duży dostęp, nie ustawiłem poprawnie listy ACL lub coś takiego w przeciwnym razie plik jest otwarty).
Richard
@Richard - wykonuję operacje odczytu / zapisu za pomocą czytnika plików w języku c # za pomocą FileMode.Open, FileAccess.ReadWrite. - Myślę, że ta część jest dobra. Coś innego ma otwarty plik - myślę, że można to wykluczyć, ponieważ nie ma możliwości. Coś jest nie tak z listą ACL. Sprawdzę to i opublikuję tutaj. Spróbuje również Process Monitor. Dzięki za pomoc :)
gmaran23
@ gmaran23: Jeśli to nie działa, nie zakładaj, że coś wiesz, zawsze testuj. Przez lata zmarnowałem zbyt wiele czasu, ponieważ wiem, że coś było lub nie było prawdą - zbyt często się myliłem.
Richard
1
@ gmaran23: Użyj narzędzi, aby zobaczyć dokładnie, co się dzieje: zgadujesz i nie pracujesz systematycznie nad problemami. (1) Użyj Process Explorer, aby potwierdzić, że plik nie jest otwarty. (2) Użyj Monitora procesów, aby zobaczyć, jaki jest żądany dostęp i według jakiej tożsamości (i masz odpowiedni plik). (3) Sprawdź dwukrotnie wynik # 2 względem listy ACL w pliku (i otwórz zaawansowane właściwości zabezpieczeń, aby uzyskać szczegółowe informacje). (4) Dostosuj jedną rzecz i przejdź do # 1, aż zostanie naprawiona. Jeśli nadal utkniesz po kilku iteracjach, rozszerz Q o pełne szczegóły (i bądź konkretny).
Richard
5

Możesz dodać konto poprzez GUI NTFS, wpisując je bezpośrednio. Nazwa ma format IIS APPPOOL\<<app pool name>>np IIS APPPOOL\DefaultAppPool. (zobacz ten artykuł pomocy technicznej Microsoft )

Alternatywne rozwiązanie: korzystałem z konta „Usługa sieciowa” jako użytkownik puli aplikacji, który przyznał mu uprawnienia do zapisu.

splattne
źródło
Zgadza się, ta wskazówka jest dobra, ale już to zrobiłem. Używam domyślnego „ApplicationPoolIdentity” dla puli aplikacji. A dla folderu „dbc” już przyznałem uprawnienia do zapisu dla IIS AppPool \ DefaultAppPool. Ale to nadal nie działałoby, dopóki nie udzielę KAŻDEMU zezwolenia na Zapis.
gmaran23
1

Jeśli chcesz tylko przyznać uprawnienia do zapisu do folderu określonemu użytkownikowi, powinieneś również zmienić „Anonimową tożsamość użytkownika” witryny na „Określonego użytkownika”, a nie „Tożsamość puli aplikacji”.

użytkownik2147802
źródło