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.

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 - 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.


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”.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.