2010-06-07 5 views
7

Podsumowanie: Jedna z naszych aplikacji internetowych wymaga dostępu do zapisu pod numerem C:\Windows\Temp. Jednak niezależnie od tego, jak bardzo osłabię uprawnienia NTFS, procmon pokazuje ACCESS DENIED.Usługi IIS 7.5, ASP.NET, podszywanie się i dostęp do C: Windows Temp

Tło (który może lub nie może być istotne dla problemu): Jesteśmy przy użyciu OLEDB uzyskać dostęp do bazy danych MS Access (który znajduje się poza C: \ Windows \ Temp). Niestety, ten sterownik OLEDB wymaga dostępu do zapisu do katalogu TEMP profilu użytkownika (który jest C: \ Windows \ Temp podczas działania w IIS 7.5), w przeciwnym razie zostanie wywołany przerażający "Nieokreślony błąd" Wyjątek OleDbException. Aby uzyskać szczegółowe informacje, patrz KB 926939. Postępowałem zgodnie z instrukcjami w artykule KB, ale to nie pomaga.

Szczegóły:

To wyjście icacls C:\Windows\Temp. Do celów debugowania dałem pełne uprawnienia do Everyone.

C:\Windows\Temp NT AUTHORITY\SYSTEM:(OI)(CI)(F) 
       CREATOR OWNER:(OI)(CI)(IO)(F) 
       BUILTIN\IIS_IUSRS:(OI)(CI)(S,RD) 
       BUILTIN\Users:(CI)(S,WD,AD,X) 
       BUILTIN\Administrators:(OI)(CI)(F) 
       Everyone:(OI)(CI)(F) 

Jednak jest to zrzut ekranu z procmon:

procmon screenshot

Desired Access: Generic Read/Write, Delete 
Disposition: Create 
Options:  Synchronous IO Non-Alert, Non-Directory File, Random Access, Delete On Close, Open No Recall 
Attributes:  NT 
ShareMode:  None 
AllocationSize: 0 
Impersonating: MYDOMAIN\myuser 

PS: Po zalogowaniu się jako MYDOMAIN\myuser, mogę tworzyć pliki w C:\Windows\Temp użyciu Eksploratora Windows bez żadnych problemów.

EDIT: Istotne części web.config:

<authentication mode="Windows" /> 
<identity impersonate="true" /> 
<authorization> 
    <deny users="?" /> 
    <allow users="*" /> 
</authorization> 

uwierzytelniania wydaje się działać, to znaczy System.Security.Principal.WindowsIdentity.GetCurrent().Name (co jest pokazane na mojej niestandardowej strony błędu) zwraca MYDOMAIN\myuser.

+0

PS: Ja też rozważyć delegowania to ServerFault zamiast, ale moje przypuszczenie byłoby, że jest to problem z tym, jak ASP.NET obsługuje personifikacji zamiast systemu Windows problem z konfiguracją. – Heinzi

+0

Jakie są wartości dla '' i '' w pliku 'Web.config' i czy usługi IIS są skonfigurowane tak, aby zezwalać na dostęp anonimowy (nie jestem pewien czy to nadal ma zastosowanie w IIS7)? – scherand

+0

@scherand: Zaktualizowałem moje pytanie. Wydaje się, że IIS7.5 używa ustawień .net w.r.t. dostęp anonimowy. – Heinzi

Odpowiedz

3

Czy próbowałeś po schodach na ten temat: loadUserProfile and IIS 7 temporary directory failures

+0

Cóż, dokładnie to zrobiłem (udzielam uprawnień). Nawet posunąłem się tak daleko, że przyznałem pełne uprawnienia *. – Heinzi

+0

Jeśli to jest katalog tymczasowy, zrobiłeś * nie * ustawiono na loadUserProfile –

+0

@AndrewBarber: Artykuł mówi: "* Odpowiedź jest całkiem prosta: wyłącz loadUserProfile, ** lub ** ACL w katalogu tymczasowym, aby zezwolić pisze. * "Zanotuj" * lub * ". Tak więc, zgodnie z tym artykułem, samo ustawienie list ACL na katalogu temp * powinno * rozwiązać problem, ale tak nie jest. Ale tak, obejście przy użyciu loadUserProfile jest użyteczne, więc daj +1 do odpowiedzi (brak "zaakceptowanej odpowiedzi", ponieważ nie odpowiada na oryginalne pytanie - "dlaczego dostęp do zapisu C: \ Windows \ Temp nie działa nawet chociaż podane są pełne uprawnienia "). :-) – Heinzi

Powiązane problemy