Nie można odczytać pliku konfiguracyjnego z powodu niewystarczających uprawnień

350

Niedawno napotkałem błąd podczas próby hostowania mojej witryny asp.net za pomocą IIS. Znalazłem rozwiązanie, które wielu przysięga.

Rozwiązanie:

  1. Dodaj IIS_IUSRS z uprawnieniami do odczytu plików w folderze
  2. Zmień metodę uwierzytelniania IIS na BasicAuthentication
  3. odśwież stronę. To będzie działać

( http://vivekthangaswamy.blogspot.com/2009/07/aspnet-website-cannot-read.html )

Co jednak dodać do mojego pliku web.config? Nigdy wcześniej nie musiałem go edytować. Oto jego obecna zawartość:

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
    <connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"
   providerName="System.Data.SqlClient" />
 </connectionStrings>
 <system.web>
  <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    </system.web>
</configuration>

Mój błąd to:

Błąd konfiguracji: Nie można odczytać pliku konfiguracyjnego z powodu niewystarczających uprawnień
Plik konfiguracyjny : \? \ C: \ Users ***** \ Documents \ Visual Studio2010 \ WebSites \ PointsForTime \ web.config

Freesnöw
źródło
9
Zobacz moduł instalacyjny przepisywania. zaoszczędź sobie kilka godzin
regisbsb 18.01.16
Moim rozwiązaniem byłoby uruchomienie poleceń z wiersza poleceń otwartego z uprawnieniami administratora. Aby to zrobić, znajdź wiersz polecenia, kliknij go prawym przyciskiem myszy i kliknij polecenie Uruchom z uprawnieniami administratora.
David Waddington
Oprócz innych odpowiedzi należy pamiętać, że szyfrowanie systemu plików (EFS) może również zakłócać działanie usług IIS.
G-Wiz,
Zrobiłem tę reklamę, teraz lokalny host prosi o hasło, najbliżej doszedłem do tej pracy dzięki
Paul Ledger
1
Dla mnie nie było IIS_IUSR, zrobiłem to samo dla użytkownika uwierzytelnionego i zadziałało
Bhanu Chhabra

Odpowiedzi:

542

Nie ma problemu z twoim web.config . Twoja strona internetowa działa w trakcie procesu. W iis możesz zdefiniować tożsamość tego procesu. tożsamość , że strona internetowa jest basen aplikacja działa jako ( usługi sieciowe, System lokalny , itd.), Należy mieć uprawnienia do dostępu i odczytu pliku web.config.

Aktualizacja:

Ta zaktualizowana odpowiedź jest taka sama jak powyżej, ale jest nieco dłuższa, prostsza i ulepszona.

Po pierwsze : nie musisz nic zmieniać w pliku konfiguracyjnym. Jest OK . Problem dotyczy uprawnień do plików systemu Windows .

Ten problem występuje, ponieważ aplikacja nie może uzyskać dostępu do pliku web.config i czytać go pliku go.

Udostępnij plik grupie IIS_IUSRS . Wystarczy kliknąć prawym przyciskiem myszy web.config i kliknij Właściwości , w obszarze bezpieczeństwa zakładce dodać IIS_IUSRS .

Więc co to za IIS_IUSRS?

Twoja strona internetowa jest jak plik exe . Podobnie jak każdy plik exe, powinien on zostać uruchomiony przez użytkownika i działa zgodnie z uprawnieniami przypisanymi temu użytkownikowi.

Jeśli witryna jest uruchomiona w IIS , Application Pool witryny internetowej jest związane z użytkownikiem ( usług sieciowych, System lokalny , itd ...) (i mogą być zmieniane w IIS)

Kiedy więc powiesz IIS_IUSRS , oznacza to każdego użytkownika ( usługi sieciowe, system lokalny , itp.), Z którego korzysta Twoja witryna.

I jak wspomniano w komentarzu @Seph : Jeśli twój komputer jest w domenie , pamiętaj, że grupa IIS_IUSRS jest grupą lokalną . Upewnij się także, że gdy próbujesz znaleźć tego użytkownika, sprawdź lokalizację, która powinna być ustawiona na komputer lokalny, a nie na domenę firmową.

Afshin Gh
źródło
79
W przypadku innych warto zauważyć, że zwykle jest to domyślna wartość IIS_IUSRSi aby upewnić się, że gdy próbujesz znaleźć tego użytkownika, sprawdź lokalizację, która powinna być ustawiona na komputer lokalny, a nie domenę korporacyjną.
Wrz
3
Dobra odpowiedź, a oto dodatkowa wskazówka - uruchamiając IIS7 na Win7 w domenie, możesz nie znaleźć IIS_IUSRS w grupie lokalnej, jeśli spróbujesz znaleźć za pomocą „Check Names ...”. Nie martw się - po prostu wpisz IIS_IUSRS w całości i naciśnij OK, a wszystko będzie dobrze.
Ośmiobitowy Guru
2
Co się stanie, jeśli masz wspólny dysk dla ścieżki witryny? Czy to ma wpływ? Jak sprawić, by działało to na współdzielonych dyskach?
Kevin
2
Musiałem to zrobić dla IUSR. IIS_IUSRS z jakiegoś powodu nie działał dla mnie.
Todd
13
Podczas próby skonfigurowania nowej strony internetowej ASP.Net od zera w IIS 7 po naprawieniu błędu omawianego w tym wątku możesz napotkać błąd autoryzacji „Błąd HTTP 401.3 - Nieautoryzowany” jako kolejną przeszkodę. Aby to naprawić, jeśli włączono anonimowe uwierzytelnianie, zmień anonimową tożsamość użytkownika z „IUSR” (ustawionej domyślnie przez IIS) na tożsamość puli aplikacji. Aby uzyskać okno edycji tego ustawienia, użyj akcji „Edytuj” z panelu Działania w widoku funkcji IIS dla funkcji „Uwierzytelnianie” IIS.
RBT
71

Miałem coś, co wydawało się być tym samym problemem dotyczącym uprawnień do web.configpliku.
Jednak mój problem został spowodowany przez to, że IIS nie załadował pliku konfiguracyjnego, ponieważ zawierał on reguły przepisywania adresów URL i nie zainstalowałem modułu przepisywania adresów URL IIS na nowym serwerze.

Rozwiązanie: zainstaluj moduł przepisywania.
Mam nadzieję, że ktoś oszczędzi kilka godzin.

Jarrod
źródło
Tak. Poprzedni serwer użyłem tego do przepisania trasy non-ssl do ssl .. tak bardzo, aby uzyskać świetny komunikat o błędzie z IIS. error::) +1 Zamiast wymagać SSL, przepisałem adres URL do HTTPS, ponieważ ktoś łączyłby się bez https. Co za zagadka.
Piotr Kula,
Dziękuję Ci!!! kręcił się z pozwoleniami przez wiele godzin i na tym koniec!
Carl Woodhouse,
Jak można przejść do instalacji modułu przepisywania adresów URL IIS?
B. Clay Shannon
2
To też był mój problem - dzięki! Aby zainstalować moduł przepisywania, pobierz go z tej strony: iis.net/downloads/microsoft/url-rewrite zamknij IIS, zainstaluj, uruchom ponownie IIS (dla bezpieczeństwa).
Tyler Forsythe
2
@ B.ClayShannon użyj instalatora platformy internetowej, wyszukaj IIS Rewrite
enorl76,
64

Uwaga edytora: Robienie tego, co mówi ta odpowiedź, jest NIEBEZPIECZNE ! Konto LocalSystem to ...

Konto całkowicie zaufane, bardziej niż konto administratora. Na jednym urządzeniu nie ma niczego, czego nie może zrobić to konto i ma on prawo dostępu do sieci jako komputera (wymaga to usługi Active Directory i przyznania uprawnień konta na komputer do czegoś)


Zmiana tożsamości z ApplicationPoolIdentity na LocalSystem ;).

Używam Win7 64 z IIS 7.5

więcej o tożsamości puli aplikacji w IIS 7.5 i wygraj 7

wprowadź opis zdjęcia tutaj

amd
źródło
Przydatna odpowiedź również dla IIS 6. Więcej informacji na temat zmiany tożsamości puli aplikacji w witrynie Microsoft można znaleźć tutaj: microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/…
Manuel Alvarez
22
Wprowadzenie tej zmiany stanowi zagrożenie dla bezpieczeństwa ze względu na dostęp, który udzielasz tej usłudze: msdn.microsoft.com/en-us/library/windows/desktop/…
WhiteKnight
To wydaje się być moim problemem tutaj i zmiana Tożsamości puli aplikacji na LocalSystem działała zgodnie z opisem!
Wasilij Hall,
21
Głosowanie w dół z powodu luki bezpieczeństwa pozostawiającej na serwerze. NIGDY nie powinieneś uruchamiać publicznych usług takich jak IIS na lokalnym koncie systemowym !!!! Zasadniczo przekazujesz klucze królestwu każdemu, kto może zhakować serwer. Poważnie NIE Rób tego.
Dimesio,
5
OMG Ta odpowiedź jest TAK NIEPRAWIDŁOWA dla bezpieczeństwa. Konieczna jest interwencja moderacyjna. To jest OGROMNY pomysł. Wyobraź sobie każdy dostęp do plików, który jest określony w querystring ... boom ... każdy może CZYTAĆ web.config, a IIS z przyjemnością będzie go obsługiwać na całym świecie. NIE UŻYWAJ TEJ ODPOWIEDZI.
enorl76
47

Miałem ten sam problem, gdy próbowałem udostępnić folder główny witryny innemu użytkownikowi. Niektóre foldery straciły uprawnienia. Postępowałem zgodnie z instrukcjami, aby dodać uprawnienia do grupy IIS_IUSRS , jak sugerował Afshin Gh. Problem polega na tym, że ta grupa nie była dla mnie dostępna. Korzystam z systemu Windows 7.

Co zrobiłem, właśnie zmieniłem kilka kroków:

  1. Kliknij prawym przyciskiem myszy folder nadrzędny (który utracił uprawnienia),
  2. Właściwości => Bezpieczeństwo => W polu „Nazwy grupy lub użytkownika:”,
  3. Kliknij Edytuj ...
  4. Zostanie otwarte okno „Zezwolenie na folder”.
  5. W polu „Nazwy grupy lub użytkownika:” naciśnij DODAJ ... btn,
  6. Wpisz Authen i naciśnij Sprawdź nazwy,
  7. Zobaczysz pełną nazwę grupy „ Uwierzytelnieni użytkownicy
  8. Naciśnij ok => zastosuj.
  9. To powinno ponownie włączyć uprawnienia.

To działało dla mnie.

zwitterion
źródło
2
To zadziałało dla mnie. To powinna być zaakceptowana odpowiedź. Próbowałem innych metod, one nie działają.
GunWanderer
1
Wypróbowane wszystkie inne rozwiązania nie będą działać do tego czasu.
jenna_3108
1
Okej, chyba mam wyjaśnienie, dlaczego to działa. Niektórzy deweloperzy przechowują swój kod C:\ np. C:\DevLub C:\Codeitd. Grupa bezpieczeństwa Authenticated Usersjest przyznawana w C:\ folderach potomnych i propagowana do nich. Jednak w C:\Usersfolderze propagacja zostaje zatrzymana. Więc deweloperzy tacy jak ja, którzy przechowują swój kod w folderze domowym, muszą przyznać dostęp Authenticated Usersdo tych folderów głównych IIS, aby mogły one działać.
Colin
kiedy klikam sprawdź nazwy, pyta mnie o poświadczenia. Nie jestem pewien, które poświadczenia użytkownika są tutaj oczekiwane. Czy ktoś może pomóc?
RSB
18

Nie musisz nic zmieniać w swoim pliku web.config.

Problemem są uprawnienia systemu plików. Twoje uprawnienia do plików nie zezwalają użytkownikowi IIS_IUSRS na dostęp do pliku web.config (lub prawdopodobnie dowolnego z plików). Zmień uprawnienia do plików w systemie Windows, aby umożliwić dostęp do konta IIS_IUSRS.

Erik Funkenbusch
źródło
1
Miałem podobny problem. Jeśli ktokolwiek nie może znaleźć użytkownika IIS_IUSRS, sprawdź lokalizację. Mój domyślnie jest domeną korporacyjną, więc nie znalazłem go od razu, bo zapomniałem sprawdzić, gdzie szuka.
jgreep
@Mystere Man Mam ten sam problem. Zmieniłem uprawnienia, a następnie spróbowałem. Nadal pojawia się ten sam błąd. :(
Rauf
„(lub prawdopodobnie dowolny plik)” działa dla mnie, zezwalanie na dostęp konta IIS_IUSRS do web.config nie wystarczy, muszę go włączyć, aby mieć dostęp do wszystkich plików na stronie pomaga.
Tuyen Nguyen
2
Musiałem to zrobić dla IUSR. IIS_IUSRS nie działało dla mnie.
Todd
Dzięki. Udzieliłem „Wszyscy” z pełnym uprawnieniem do folderu aplikacji sieci Web i działa.
Minh Nguyen,
16

Udostępnij plik grupie IIS_IUSRS . Kliknij prawym przyciskiem myszy plik web.config, rozwiń właściwości i na karcie zabezpieczeń dodaj IIS_IUSRS. Daj grupie dostęp do odczytu / zapisu.

Gdy grupa NIE jest dostępna, zastąp IIS_IUSRS nazwą komputera \ IIS_IUSRS

Kurt Van den Branden
źródło
+1 Dobra wskazówka. Przyjęta odpowiedź jest dobra, ale nie wspomina, że ​​może być konieczne dodanie nazwy komputera przed „IIS_IUSRS”, co mnie do tego doprowadziło.
Ralph Lavelle,
To („Gdy grupa jest niedostępna”) wzbudziło moje nadzieje, ale nawet kiedy nazwa komputera była wcześniejsza („IBM-TAMMYFAYEBAKER.platypus.local \ IIS_IUSRS”), nadal pojawia się ten sam błąd. Próbowałem też pełnej nazwy komputera, ale nie zaakceptowałbym jej nawet jako prawidłowego użytkownika.
B. Clay Shannon
15

Przejdź do folderu nadrzędnego, kliknij prawym przyciskiem myszy i wybierz Właściwości . Wybierz kartę Zabezpieczenia , edytuj uprawnienia i Dodaj . Kliknij Zaawansowane i Znajdź teraz . Wybierz IIS_IUSRS, kliknij OK i ponownie OK . Upewnij się, że masz zaznaczone Napisz . Kliknij OK i OK ponownie .

Zadanie wykonane!

Quinny
źródło
19
Co u licha jest z polecaniem dostępu do zapisu, gdy wszystko, czego potrzeba, to odczyt? / downvoted
TristanK
2
Jedyne IIS *, które mam, to IIS_WPG
B. Clay Shannon
1
@ B.ClayShannon Me też. Mam tylko IIS_WPG
Fortune
13

Po udzieleniu uprawnień IIS_IUSRS należy sprawdzić, czy w sekcji IIS / Uwierzytelnianie aplikacji sieci Web anonimowe poświadczenia uwierzytelnienia używają tożsamości puli aplikacji, a nie IUSR.

wprowadź opis zdjęcia tutaj

Carlos
źródło
Gdzie mogę uzyskać ten interfejs?
Na karcie Widok funkcji w aplikacji sieci Web: Uwierzytelnianie
Carlos
Ta odpowiedź powinna być częścią przyjętej odpowiedzi, ponieważ bez niej musisz również dodać IUSR do listy dostępu do folderu na stronie
Laurent S.
7

Z jakiegoś powodu twój plik web.config jest ustawiony jako tylko do odczytu. Odznacz opcję tylko do odczytu pliku web.config.

Luis
źródło
Jeśli twoje pozwolenie to pełny dostęp i nadal pojawia się błąd, to jest poprawna odpowiedź (y).
Vasil Valchev
4

Użyłem subst, aby utworzyć mapowanie z D: na C: w celu zachowania tej samej konfiguracji, co inni programiści w zespole. Dało mi to również takie same błędy, jak opisano. Usunięcie tego naprawiło to dla mnie.

Sniipe
źródło
3

Przyjęte rozwiązanie nie dla mnie. Korzystam z repozytorium Git i zostało ono sklonowane do następującego folderu

c:\users\myusername\source\repos\myWebSite

Zrobiłem nową stronę internetową IIS i wskazałem ją na ścieżkę. Który nie miał uprawnień iis_iusrs sugerowanych w zaakceptowanym rozwiązaniu. Kiedy dodałem uprawnienia, nadal nie działało.

Zaczęło działać dopiero, gdy dałem następujące uprawnienia grupie „Użytkownicy”, a dziedziczenie kaskadowo uprawnienia do pliku web.config. Prawdopodobnie powinien był zastosować go tylko do pliku web.config, aby zmniejszyć obszar ataku.

Pemisje użytkowników

Tom McDonald
źródło
Miał dokładnie taką samą sytuację. To pomogło.
Roemer,
2

Mieliśmy witrynę z określoną tożsamością w aplikacji, tylko po udzieleniu temu użytkownikowi dostępu do odczytu folderu zawierającego plik web.config, czy to zadziałałoby. Wyśledziliśmy to po dodaniu użytkownika „wszyscy” z czytaniem i wszystko działało dobrze.

obrabować
źródło
2

Dla mnie błąd pojawił się podczas debugowania na moim komputerze lokalnym i okazał się związany z podstawowym web.config, który jest inicjowany przez .NET Framework podczas kompilacji strony. Mój plik C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config miał nierozpoznany element (folderLevelBuildProviders). Naprawienie tego błędu naprawiło błąd 500.19.

Zobacz: Menedżer usług IIS nie może skonfigurować kompilacji .NET w aplikacjach .NET 4

Rafael Emshoff
źródło
2

Zmiana tożsamości modelu procesu na LocalSystem naprawiła dla mnie ten problem. Możesz znaleźć to ustawienie, klikając prawym przyciskiem myszy pulę aplikacji i wybierając „Ustawienia zaawansowane”. Korzystam z IIS 7.5.

jshoaf
źródło
2

Kliknij prawym przyciskiem Web.Config => Zabezpieczenia karty => Edycja przycisku => Dodaj przycisk => Przycisk Zaawansowane => Przycisk Znajdź teraz => W wynikach wyszukiwania wybierz swoją grupę (w naszym przypadku „IIS_IUSRS”) => Ok => Ok => Ok

Igor Lewkiwski
źródło
2

Stało się tak, gdy aplikacja IIS ma katalog wirtualny z fizyczną ścieżką, który zawiera ukośniki /zamiast ukośników odwrotnych \. Zostało to przypadkowo wykonane przy użyciu interfejsu API zarządzania PowerShell dla IIS podczas naszego ciągłego dostarczania.

Przykład złej konfiguracji - applicationHost.config

<application path="/MySite/MyService" applicationPool="MyAppPool" enabledProtocols="http">
    <virtualDirectory path="/" physicalPath="C:\inetpub\MySite/MyService" />
</application>

Upewnij się, że physicalPathatrybut nie zawiera ukośników /, tylko ukośniki odwrotne\

Poprawiony przykład konfiguracji - applicationHost.config

<application path="/MySite/MyService" applicationPool="MyAppPool" enabledProtocols="http">
    <virtualDirectory path="/" physicalPath="C:\inetpub\MySite\MyService" />
</application>
SliverNinja - MSFT
źródło
1
W moim przypadku ścieżka fizyczna miała podwójny ukośnik, np C:\inetpub\MySite\\MyService. Zmiana na pojedynczy ukośnik zadziałała
Ben Anderson
2

Rozwiązałem ten problem, dodając uprawnienia do odczytu dla folderu użytkownika puli aplikacji (WIN SERVER 2008 R2): C: \ Windows \ System32 \ inetsrv \ config

Trochę tła: nasz serwer został zhakowany przy użyciu klasycznego błędu, w którym użytkownik aplikacji miał więcej uprawnień, niż powinien (lokalny administrator).

Aby to naprawić, stworzyliśmy nowego użytkownika domeny, który miał tylko uprawnienia do folderu aplikacji, z minimalnymi potrzebnymi uprawnieniami i przypisaliśmy go jako użytkownika puli aplikacji. niż trafiliśmy w ten problem i było to rozwiązanie naszych problemów.

ludens
źródło
2

Przenieś swój projekt na inny dysk niż C: pracował dla mnie z tym samym błędem.

Talha Imam
źródło
2

Może się to zdarzyć, jeśli aplikacja znajduje się w katalogu wirtualnym, a ścieżka do plików to dysk zamapowany.

Jeśli zmienisz ścieżkę do plików na dysk lokalny, rozwiąże to problem, jeśli to rzeczywiście jest twój problem.

UKcentric
źródło
2

Wszystkie udzielone odpowiedzi są prawidłowe i działają w różnych okolicznościach.

Dla mnie zadziałało ponowne uruchomienie Visual Studio.

Doruk
źródło
1

Powyższe odpowiedzi były pomocne, ale na wypadek, gdyby to pomogło każdemu - miałem dokładnie ten problem i okazało się, że (Windows Networking) dzielę folder główny, z którego hostowana jest strona. Zabiliśmy ten udział i dodaliśmy uprawnienia użytkowników do odczytu / wykonania, które znów zadziałało.

Podejrzewam, że udział zawiódł to.

Michał
źródło
0

Otrzymałem również „Nie można odczytać pliku konfiguracyjnego z powodu niewystarczających uprawnień”. Okazuje się, że ograniczenia ISAPI i CGI w IIS dla ASP.NET 4.0 32-bitowego i 64-bitowego zostały ustawione jako odmowa. Oznaczenie ich obu jako Dozwolone rozwiązało mój problem.

Hrabia
źródło
0

Wystąpił ten problem z aplikacją wirtualną. Wszystkie uprawnienia zostały ustawione. IIS_IUSRS, AppPoolIdentity, a następnie dał pełny dostęp wszystkim. Nic nie działało. Zrestartowałem aplikację, witrynę i IIS, ale nie można.

Usunąłem aplikację wirtualną i dodałem ją od zera, a ona zaczęła działać.

Chciałbym wiedzieć, co to rozwiązało.

gbs
źródło
0

sprawdź, czy plik nie jest oznaczony jako tylko do odczytu , pomimo uprawnienia IIS_IUSRS wyświetli ten sam komunikat.

Syed Umar Ahmed
źródło
0

Miałem ten komunikat o błędzie, który okazał się być spowodowany tym, że mój fizyczny folder znajduje się na dysku sieciowym, a nie na dysku lokalnym. Wygląda na to, że uprawnienia na takich dyskach domyślnie mogą się różnić. Na przykład, podczas gdy lokalna lokalizacja dysku dała uprawnienia użytkownikom komputera lokalnego, lokalizacja sieciowa nie.

Ponadto przyjęta odpowiedź nie działa w takim przypadku. Użytkownicy lokalni lub IIS nie byli dostępni do przypisywania uprawnień. Rozwiązaniem było przeniesienie folderu fizycznego na dysk lokalny.

Kat
źródło
0

Miałem ten sam problem i po zrobieniu wszystkich rzeczy zapisanych tutaj jako odpowiedzi, nadal się powielał. Druga połowa problemu polegała na tym, że platforma .NET została wyłączona w sekcji „Włączanie i wyłączanie funkcji systemu Windows”

Bogdan Mates
źródło
0

Czasami, jeśli jest to nowy serwer, musisz skonfigurować lub zainstalować funkcję ASP.NET w IIS, aby móc odczytać plik web.config.

W moim przypadku był to powód.

SanthoshM
źródło
0

W moim przypadku próbowałem hostować strony z zamapowanego dysku (subst). Problem polega na tym, że podstart został uruchomiony na moim koncie, a użytkownik IIS nie widzi tego samego dysku

Dinesh Rajan
źródło
0

Dałem zgodę i użyłem ICACLS.exe, ale nie działałem. Potem zmieniłem fizyczną ścieżkę i zadziałała pomyślnie.

(IIS 8.5 Windows 2012 R2)

Adem Aygun
źródło