Неможливо прочитати конфігураційний файл через недостатню кількість дозволів


354

Нещодавно я зіткнувся з помилкою, намагаючись розмістити мій сайт asp.net за допомогою IIS. Я знайшов рішення, яке багато присягають.

Рішення:

  1. Додайте IIS_IUSRS з дозволом читання файлів у папці
  2. Змініть метод аутентифікації IIS на BasicAuthentication
  3. оновити веб-сайт. Це спрацює

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

Що я можу додати до файлу web.config? Мені ніколи раніше не доводилося його редагувати. Ось його поточний зміст:

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

Моя помилка:

Помилка конфігурації: Неможливо прочитати файл конфігурації через недостатній дозвіл.
Налаштувати файл: \? \ C: \ Користувачі ***** \ Документи \ Visual Studio2010 \ Веб-сайти \ PointsForTime \ web.config


9
Перегляньте модуль встановлення переписати. заощадите собі кілька годин
regisbsb

Моїм рішенням було б запускати команди з командного рядка, відкритого з правами адміністратора. Для цього знайдіть командний рядок, клацніть правою кнопкою миші та натисніть запустити з правами адміністратора.
Девід Ваддінгтон

На додаток до інших відповідей, зверніть увагу, що шифрування файлової системи (EFS) також може перешкоджати IIS.
G-Wiz

Я робив це оголошення зараз місцевий хост запитує пароль, найближчий я до цього часу дійшов до цієї робочої подяки
Пол Леджер

1
Для мене не було IIS_IUSR, я зробив те ж саме для Аутентифікованого користувача, і це спрацювало
Bhanu Chhabra

Відповіді:


544

Немає жодної проблеми з веб-конфіг . Ваш веб-сайт працює в процесі. У iis ви можете визначити особу цього процесу. Ідентичність , що ваш веб - сайт в пул додатків працює як ( Network Services, Локальна система і т.д.), повинні мати дозвіл на доступ і прочитати файл web.config.

Оновлення:

Ця оновлена ​​відповідь така ж, як вище, але трохи довша і простіша та вдосконалена.

Перш за все : вам не потрібно нічого змінювати у своєму конфігураційному файлі. Це добре . Проблема полягає в дозволах на файли Windows .

Ця проблема виникає через те, що ваша програма не може отримати доступ та читати web.config файл .

Зробіть файл доступним для групи IIS_IUSRS . Просто клацніть правою кнопкою миші web.config і натисніть Властивості , на вкладці безпеки додайте IIS_IUSRS .

То що це за IIS_IUSRS?

Ваш веб - сайт є як виконуваний файл. Як і будь-який файл EXE, його повинен запускати користувач, і він працює відповідно до дозволів призначених цьому користувачеві.

Коли ваш сайт запускається в IIS , Пул додатків вашого веб-сайту асоціюється з користувачем ( Мережеві послуги, Локальна система тощо) (і може бути змінено у IIS)

Отже, коли ви говорите IIS_IUSRS , це означає будь-якого користувача ( мережеві послуги, локальна система тощо), яким працює ваш сайт.

І як згадується @Seph у коментарі нижче : Якщо ваш комп'ютер у домені , пам’ятайте, що група IIS_IUSRS - це локальна група . Також переконайтесь, що, коли ви намагаєтесь знайти цього користувача, перевірте місце, де воно має бути встановлено на локальний комп'ютер, а не на корпоративний домен.


79
Для інших варто зазначити, що за замовчуванням зазвичай є IIS_IUSRSі переконатися, що, коли ви намагаєтесь знайти цього користувача, перевірте його місце, воно повинно бути встановлено на локальний комп'ютер, а не на корпоративний домен.
Seph

3
Хороша відповідь, і ось додатковий підказок - запустивши IIS7 на Win7 у домені, ви можете не знайти IIS_IUSRS у локальній групі, якщо спробуйте знайти за допомогою пункту "Перевірити імена ...". Не хвилюйтесь - просто наберіть IIS_IUSRS повністю та натисніть OK, і все буде добре.
Вісім-бітний гуру

2
Що робити, якщо у вас є спільний диск для шляху до сайту? Чи має це ефект? Як зробити цю роботу спільними накопичувачами?
Кевін

2
Мені довелося це зробити для IUSR. IIS_IUSRS чомусь не працював для мене.
Тодд

13
Під час спроби налаштування нового веб-сайту ASP.Net з нуля в IIS 7 далі, як тільки ви виправите обговорювану помилку в цій темі, ви можете зіткнутися з помилкою авторизації "HTTP помилка 401.3 - несанкціонована" як ваше наступне перешкода. Щоб виправити це, якщо увімкнено анонімну автентифікацію, то змініть ідентифікацію анонімного користувача з "IUSR" (встановлений за замовчуванням IIS) на ідентифікацію пулу програм. Щоб отримати вікно редагування цього параметра, скористайтеся діями "Редагувати" на панелі "Дії" на панелі перегляду функцій IIS для функції IIS "Автентифікація".
RBT

72

У мене було те, що виявилося тим самим дозволом на web.configфайл.
Однак моя проблема була спричинена тим, що IIS не завантажував конфігураційний файл, оскільки він містив правила перезапису URL-адреси, і я не встановив модуль перезапису URL-адреси IIS на новому сервері.

Рішення: Встановіть модуль перезапису.
Сподіваюся, що це економить когось кілька годин.


Так. Попередній сервер я використав це для перенаписання маршруту non ssl на ssl .. так багато для великого повідомлення про помилку від IIS. error::) +1 Через те, що замість того, щоб вимагати SSL, я переписав URL-адресу на HTTPS у випадку, коли-небудь зв`язаний зв’язок без https. Яка загадка.
Пьотр Кула

спасибі!!! годинами розправлявся з дозволами, і врешті-решт все зводилося до цього!
Карл Вудхаус

Як можна встановити модуль перезапису URL-адреси IIS?
Б. Клей Шеннон

2
Це було і моє питання - дякую! Щоб встановити модуль перезапису, скачайте його з цієї сторінки: iis.net/downloads/microsoft/url-rewrite закрийте IIS, встановіть, перезапустіть IIS (просто для безпеки).
Тайлер Форсайт

2
@ B.ClayShannon використовуйте інсталятор веб-платформи, шукайте перезапис IIS
enorl76

64

Примітка редактора: Робити те, що ця відповідь говорить, небезпечно ! Обліковий запис LocalSystem - це ...

Повністю надійний обліковий запис, тим більше ніж обліковий запис адміністратора. В одному вікні нічого, що цей обліковий запис не може зробити, і він має право на доступ до мережі як машина (для цього потрібна Active Directory та надання дозволу на обліковий запис машини на щось)


Зміна ідентичності з ApplicationPoolIdentity на LocalSystem зробила свою роботу;).

Я використовую win7 64 з IIS 7.5

докладніше про Ідентифікатор пулу програми в IIS 7.5 та виграйте 7

введіть тут опис зображення


Корисна відповідь і для IIS 6. Докладнішу інформацію про те, як змінити ідентифікаційний пул програми на веб-сайті Microsoft тут: microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/…
Мануель Альварес

22
Виконання цих змін є загрозою безпеки з - за доступу ви надаєте цю послугу: msdn.microsoft.com/en-us/library/windows/desktop / ...
WhiteKnight

Це, здається, тут було моєю проблемою, і зміна ідентичності пулу додатків на LocalSystem працювало так, як описано!
Зал Василя

21
Відхилення цього голосу через розкриту дірку в безпеці, яку залишає на сервері. НІКОЛИ не слід запускати громадські послуги, такі як IIS, за допомогою облікового запису локальної системи !!!! Ви в основному вручаєте ключі від королівства кожному, хто може зламати сервер. Серйозно НЕ робіть цього.
Дімезіо

5
OMG Ця відповідь настільки НЕПРАВИЛЬНА для безпеки. Потрібна модераційна інтервенція. Це ГОРОДНА ідея. Уявіть, будь-який доступ до файлів, вказаний у рядку запитів ... бум ... будь-хто може прочитати web.config, а IIS із задоволенням подаватиме його світові. НЕ ВИКОРИСТОВУЙТЕ ЦЕ ВІДПОВІДЬ.
enorl76

47

У мене була така ж проблема, коли я намагався поділитися кореневою папкою сайту з іншим користувачем. Якась папка втратила дозвіл. Тому я дотримувався кроків, щоб додати дозвіл на IIS_IUSRS групи як це запропонував Афшин Гх. Проблема в тому, що ця група була для мене недоступною. Я використовую Windows 7.

Що я робив, я просто змінив кілька кроків:

  1. Клацніть правою кнопкою миші на батьківській папці (хто втратив дозвіл),
  2. Властивості => Безпека => У "Імена групи або користувачів:",
  3. Натисніть Редагувати ...
  4. Відкриється вікно "Дозвіл для вашої папки".
  5. У розділі "Імена групи або користувачів" натисніть ADD ... btn,
  6. Введіть Authen і натисніть Перевірити імена,
  7. Ви побачите повну назву групи " Автентифіковані користувачі "
  8. Натисніть ok => застосувати.
  9. Це має знову ввімкнути привілеї.

Це працювало для мене.


2
Це працювало для мене. Це має бути прийнятою відповіддю. Я спробував інші методи, вони не працюють.
GunWanderer

1
Випробувані всі інші рішення не працюватимуть, поки це не буде.
jenna_3108

1
Гаразд, я думаю, у мене є пояснення, чому це працює. Деякі розробники розміщують свій код у C:\ ie C:\Devабо C:\Codeтощо. Групі безпеки Authenticated Usersнадається C:\ папка та розповсюджується на дочірні папки. Однак у C:\Usersпапці це розповсюдження припиняється. Тож розробники, як я, які розміщують свій код у домашній папці, повинні надати доступ Authenticated Usersдо цих кореневих папок IIS, щоб IIS працював.
Колін

коли я натискаю прапорець Імена, він запитує мені облікові дані. Я не впевнений, які облікові дані користувачів тут очікуються. Чи хтось може допомогти?
RSB

18

Вам не потрібно нічого змінювати у своїй web.config.

Проблема полягає в дозволах файлової системи. Ваші дозволи на файл не дозволяють користувачеві IIS_IUSRS отримати доступ до web.config (або, ймовірно, до будь-якого з файлів). Змініть свої права на файли у Windows, щоб дозволити обліковому запису IIS_IUSRS отримати доступ до нього.


1
У мене була подібна проблема. Якщо хтось ніколи не може знайти користувача IIS_IUSRS, перевірте його місцезнаходження. Моє дефолт у корпоративному домені, тому я його не знайшов одразу, бо забув перевірити, де він шукає.
jgreep

@Mystere Man У мене те саме питання. Я змінив дозволи, а потім спробував. Все-таки я отримую ту ж помилку. :(
Рауф

"(або, можливо, будь-який з файлів)" працює для мене, що дозволяє доступу облікового запису IIS_IUSRS до web.config недостатньо, мені потрібно, щоб він мав доступ до всіх файлів на сайті допомагає.
Tuyen Nguyen

2
Мені довелося це зробити для IUSR. IIS_IUSRS не працював для мене.
Тодд

Дякую. Я надав "Усі" з повним дозволом на папку веб-додатків, і це працює.
Minh Nguyen

16

Зробіть файл доступним для групи IIS_IUSRS . Клацніть правою кнопкою миші веб-конфігурацію, розгорніть властивості та на вкладці безпеки додайте IIS_IUSRS. Надати групі доступ для читання / запису.

Коли група НЕ доступна, замініть IIS_IUSRS на ComputerName \ IIS_IUSRS


+1 Хороша порада. Прийнята відповідь хороша, але нехтуючи зазначенням того, що вам може знадобитися додати ім’я свого комп'ютера перед "IIS_IUSRS", саме це мене і минуло.
Ральф Лавель

На це ("Коли група НЕ доступна") були мої сподівання, але навіть коли я заздалегідь передбачив ім'я комп'ютера ("IBM-TAMMYFAYEBAKER.platypus.local \ IIS_IUSRS"), я все одно отримую ту саму помилку. Я також спробував повне ім'я комп’ютера, але він навіть не сприйняв це як дійсного користувача.
Б. Клей Шеннон

15

Перейдіть до батьківської папки, клацніть правою кнопкою миші та виберіть Властивості . Виберіть вкладку Безпека , відредагуйте дозволи та Додати . Клацніть на Advanced і Find Now . Виберіть IIS_IUSRS і знову натисніть кнопку OK та OK . Переконайтеся, що у вас є чек Write . Клацніть ОК і ОК ще раз.

Робота виконана!


19
Що на землі полягає в тому, щоб рекомендувати доступ до запису, коли читати все, що потрібно? / downvoted
TristanK

2
Єдиний IIS * у мене - IIS_WPG
B. Clay Shannon

1
@ B.ClayShannon і мене теж. У мене є тільки IIS_WPG
Fortune

13

Коли ви надаєте дозволи на IIS_IUSRS , слід переконатися, що в розділі IIS / аутентифікація вашого веб-додатку Анонімні автентифікаційні автентифікати використовують ідентифікаційний пул програми, а не IUSR.

введіть тут опис зображення


Де я можу отримати цей інтерфейс?

На вкладці "Перегляд функцій" у веб-додатку: Підтвердження автентичності
Карлос

Ця відповідь має бути частиною прийнятої причини відповідей, без цього вам також потрібно додати IUSR у список доступу до папки веб-сайту
Лоран С.

7

Чомусь ваш web.config задається лише для читання. Зніміть прапорець лише для читання файлу web.config.


Якщо ваш дозвіл має повний доступ і все-таки отримуєте помилку, це правильна відповідь (у).
Василь Валчев


4

Я використовував субст для створення відображення від D: до C:, щоб зберегти таку ж настройку, як і інші розробники в команді. Це також дало мені ті самі помилки, як описано. Видалення цього виправлене для мене.


3

Прийняте рішення не для мене. Я використовую репортаж Git, і він клонувався до наступної папки

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

Я створив новий веб-сайт IIS і вказав його на шлях. Який не мав дозволів iis_iusrs, запропонованих у прийнятому рішенні. Коли я додав дозволи, він все ще не працював.

Він почав працювати лише тоді, коли я дав наступні дозволи для групи "Користувачі", і спадщину каскадувало дозволи на web.config. Ймовірно, слід було застосувати його просто до web.config, щоб зменшити площу поверхні атаки.

Pemissions користувачів


Була точно така ж ситуація. Це допомогло.
Рьомер

2

У нас був веб-сайт із конкретною ідентичністю в apppool, лише після надання користувачеві ознайомлення з доступом до папки, що містить web.config, він буде працювати. Ми відстежили це, додавши користувача "всі" з прочитаним, і все працювало чудово.


2

Для мене помилка виявилася під час налагодження на моїй локальній машині і виявилася пов'язаною з базовим web.config, який ініціюється .NET Framework під час компіляції веб-сайту. У моєму файлі C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config був нерозпізнаний елемент (папкаLevelBuildProviders). Виправивши це, виправлено помилку 500,19.

Дивіться це: IIS Manager не може налаштувати .NET Compilation у .NET 4 додатках


2

Зміна ідентичності моделі процесу на LocalSystem вирішила цю проблему для мене. Ви можете знайти цей параметр, якщо клацнути правою кнопкою миші на пулі додатків і обрати "Додаткові налаштування". Я працюю IIS 7.5.


2

Клацніть правою кнопкою миші Web.Config => Захист вкладки => Кнопка Редагувати => Кнопка Додати => Кнопка Додатково => Кнопка Знайти зараз => У результатах пошуку виберіть свою групу (у нашому випадку "IIS_IUSRS") => Ок => Ок => Гаразд


2

Це трапилося з нами, коли у додатку IIS є віртуальна директорія з фізичним шляхом, яка містить прямі /косої риски замість зворотних косих \. Це було випадково зроблено за допомогою API управління повноваженнями для IIS під час нашого постійного процесу доставки.

Неправильний приклад налаштування - applicationHost.config

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

Переконайтеся, що в physicalPathатрибуті не містяться /косої риски вперед , а лише зворотні риски\

Виправлений приклад налаштування - applicationHost.config

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

1
У моєму випадку фізичний шлях мав подвійну косу риску, наприклад C:\inetpub\MySite\\MyService. Змінивши його на одну косу косу риску спрацювало
Бен Андерсон

2

Я вирішив це, додавши дозвіл на читання до папки для користувача пулу додатків (WIN SERVER 2008 R2): C: \ Windows \ System32 \ inetsrv \ config

Невелика довідка: наш сервер був зламаний за допомогою класичної помилки, коли користувач програми мав більше дозволів, ніж слід (місцевий адміністратор).

Щоб виправити це, ми створили нового користувача домену, який мав лише дозволи в папці додатків, з мінімальними правами і призначив його як користувача пулу програм. ніж ми потрапили в питання, і це було вирішенням наших проблем.


2

Перемістіть проект на інший диск, окрім C: працював для мене з тією ж помилкою.


2

Це може статися, якщо ваша програма знаходиться у віртуальному каталозі, а шлях до файлів - це відображений на карті.

Якщо ви зміните шлях до файлів до локального диска, це вирішить його, якщо це справді ваша проблема.


2

Усі наведені відповіді є дійсними та працюють за різних обставин.

Для мене спрацювала перезавантаження Visual Studio.


1

Я також отримував "Неможливо прочитати файл конфігурації через недостатнє число дозволів". Виявляється, обмеження ISAPI та CGI в IIS для ASP.NET 4.0, 32-бітових і 64-бітних було встановлено для заборони. Позначення їх обох дозволеним вирішило мою проблему.


1

Наведені вище відповіді були корисними, але у випадку, якщо це комусь допомагає - у мене була така точна проблема, і виявилося, що я (мережа Windows) спільно використовував кореневу папку, з якої розміщувався сайт. Ми вбили частку і додали Користувачам дозвіл на читання / виконання, і це знову працювало чудово.

Я підозрюю, що акція зіпсувала це.


0

Була ця проблема з віртуальною програмою. Усі дозволи були встановлені. IIS_IUSRS, AppPoolIdentity, а потім надав повний доступ усім. Нічого не працювало. Перезавантажений додаток, сайт та IIS, але не йти.

Видалили віртуальну програму і додали її знову з нуля, і вона почала працювати.

Бажаю, я знав, що це вирішило.


0

перевірте, чи файл не позначений як лише для читання , незважаючи на дозвіл IIS_IUSRS, він відображатиме те саме повідомлення.


0

У мене з’явилося це повідомлення про помилку, яке виявилося через те, що моя фізична папка розташована на мережевому диску, на відміну від локального диска. Здається, дозволи на таких дисках за замовчуванням можуть бути різними. Наприклад, хоча місце локального диска давало дозвіл користувачам локального комп'ютера, мережеве розташування цього не робилося.

Крім того, прийнята відповідь не працює для такого випадку. Місцеві користувачі або користувачі IIS не були доступні для призначення дозволів. Рішенням було переміщення фізичної папки на локальний диск.


0

У мене було те саме питання, і, виконавши всі речі, написані тут, як відповіді, він все-таки відтворився. Друга половина питання полягала в тому, що .NET було вимкнено в розділі "Увімкнення та вимкнення функцій Windows".


0

Іноді, якщо це новий сервер, вам потрібно налаштувати або встановити функцію ASP.NET на IIS, щоб вона змогла прочитати ваш файл web.config.

У моєму випадку це було причиною.


0

У моєму випадку я намагався розмістити сторінки із зібраного диска (subst). Проблема полягає в тому, що субстрат запускався під моїм обліковим записом, а користувач IIS не в змозі побачити той самий диск


0

Я дав дозвіл і використав ICACLS.exe, але не працював. Потім я змінив фізичний шлях і це успішно працювало.

(IIS 8.5 Windows 2012 R2)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.