Не удается прочитать файл конфигурации из-за недостаточных прав доступа

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: \ Users ***** \ Documents \ Visual Studio2010 \ WebSites \ PointsForTime \ web.config

Freesnöw
источник
9
Пожалуйста, смотрите модуль перезаписи установки. сэкономить несколько часов
regisbsb
Мое решение будет запускать команды из командной строки, открытой с правами администратора. Для этого найдите командную строку, щелкните ее правой кнопкой мыши и выберите «Выполнить с правами администратора».
Дэвид Уоддингтон
В дополнение к другим ответам обратите внимание, что шифрование файловой системы (EFS) также может создавать помехи для IIS.
G-Wiz
Я сделал это объявление, теперь местный хост запрашивает пароль. Ближайший я
Пол Леджер
1
Для меня не было IIS_IUSR, я сделал то же самое для Аутентифицированного пользователя, и это сработало
Бхану Чхабра

Ответы:

544

Там есть проблем с вашим web.config . Ваш веб-сайт работает в процессе. В iis вы можете определить идентичность этого процесса. Идентичность , что ваш веб - сайт в пул приложений работает как ( Network Services, Локальная система и т.д.), должны иметь разрешение на доступ и прочитать файл web.config.

Обновить:

Этот обновленный ответ такой же, как и выше, но немного длиннее, проще и лучше.

Прежде всего : вам не нужно ничего менять в вашем конфигурационном файле. Это нормально . Проблема с разрешениями файла Windows .

Эта проблема возникает из-за ваше приложение не может получить доступ и прочитать файл web.config .

Сделайте файл доступным для группы IIS_IUSRS . Просто щелкните правой кнопкой мыши web.config и выберите Свойства , на вкладке Безопасность добавьте IIS_IUSRS .

Так что же это за IIS_IUSRS?

Ваш веб - сайт является как исполняемый файл. Как и любой исполняемый файл, он должен быть запускаться пользователем и запускаться в соответствии с разрешениями, назначенными этому пользователю.

Когда ваш сайт запускается в IIS , пул приложений вашего веб-сайта ассоциируется с пользователем ( сетевые службы, локальная система и т. Д.) (И может быть изменен в IIS).

Поэтому, когда вы говорите, IIS_IUSRS , это означает, любого пользователя ( сетевые службы, локальная система и т. Д.), которым работает ваш сайт.

И как @Seph упоминается в комментарии ниже : Если ваш компьютер находится в домене , помните, что группа IIS_IUSRS является локальной группой . Также убедитесь, что когда вы пытаетесь найти этого пользователя, проверьте его местоположение на локальном компьютере, а не на корпоративном домене.

Афшин Г.Х.
источник
79
Для других стоит отметить, что по умолчанию это обычно IIS_IUSRSи убедиться, что когда вы пытаетесь найти этого пользователя, проверьте местоположение, оно должно быть установлено на локальный компьютер, а не корпоративный домен.
Seph
3
Хороший ответ, и вот еще один совет - при запуске IIS7 на Win7 в домене вы можете не найти IIS_IUSRS в локальной группе, если попытаетесь найти с помощью «Проверить имена ...». Не волнуйтесь - просто наберите IIS_IUSRS полностью и нажмите ОК, и все будет хорошо.
Восьмибитный гуру
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 на новом сервере.

Решение: Установите модуль перезаписи.
Надеюсь, это сэкономит кому-то несколько часов.

Джаррод
источник
Ага. Предыдущий сервер, на котором я использовал это, переписал не ssl-маршрут в ssl .. так много для отличного сообщения об ошибке из IIS. error::) +1 Поскольку вместо того, чтобы требовать SSL, я переписал URL-адрес HTTPS, если кто-то связал его без https. Что за загадка
Петр Кула
Спасибо!!! часами бродил с разрешениями, и в конце концов дело дошло до этого!
Карл Вудхаус
Как можно установить модуль перезаписи URL IIS?
Б. Клэй Шеннон
2
Это была и моя проблема - спасибо! Чтобы установить модуль перезаписи, загрузите его с этой страницы: iis.net/downloads/microsoft/url-rewrite закройте IIS, установите, перезапустите IIS (просто для безопасности).
Тайлер Форсайт
2
@ B.ClayShannon используйте установщик веб-платформы,
выполните
64

Примечание редактора: делать то, что говорит этот ответ, ОПАСНО ! Учетная запись LocalSystem является ...

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


Смена удостоверения с ApplicationPoolIdentity на LocalSystem сделала свою работу;).

Я использую Win7 64 с IIS 7.5

подробнее об идентификации пула приложений в IIS 7.5 и победе 7

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

драм
источник
Полезный ответ и для IIS 6. Более подробную информацию о том, как изменить удостоверение пула приложений на веб-сайте Microsoft, можно найти
Мануэль Альварес,
22
Внесение этого изменения представляет собой угрозу безопасности из-за доступа, который вы предоставляете этой службе: msdn.microsoft.com/en-us/library/windows/desktop/…
WhiteKnight
Похоже, это была моя проблема, и изменение идентификатора пула приложений на LocalSystem работало, как описано!
Василий Холл,
21
Голосование с понижением частоты из-за зияющей дыры в безопасности на сервере. Вы НИКОГДА не должны запускать общедоступные службы, такие как IIS, под локальной системной учетной записью !!!! Вы в основном передаете ключи от королевства любому, кто может взломать сервер. Серьезно НЕ ДЕЛАЙТЕ ЭТОГО.
Димесио
5
OMG Этот ответ так НЕПРАВИЛЬНО для безопасности. Модерационное вмешательство необходимо. Это УЖАСНАЯ идея. Представьте себе любой доступ к файлу, указанный в строке запроса ... boom ... любой может прочитать web.config, и IIS с радостью предоставит его всему миру. НЕ ИСПОЛЬЗУЙТЕ ЭТОТ ОТВЕТ.
enorl76
47

У меня была такая же проблема, когда я пытался поделиться корневой папкой сайта с другим пользователем. Некоторая папка потеряла разрешение. Поэтому я следовал инструкциям по добавлению разрешения в группу IIS_IUSRS, как это было предложено Afshin Gh. Проблема в том, что эта группа была недоступна для меня. Я использую Windows 7.

Что я сделал, я просто изменил некоторые шаги:

  1. Щелкните правой кнопкой мыши на родительской папке (кто потерял разрешение),
  2. Свойства => Безопасность => В разделе «Группы или имена пользователей:»,
  3. Нажмите Изменить ...
  4. Откроется окно «Разрешение для вашей папки».
  5. В разделе «Группы или имена пользователей:» нажмите ADD ... btn,
  6. Введите Authen и нажмите Проверить имена,
  7. Вы увидите полное название группы « Прошедшие проверку »
  8. Нажмите ок => применить.
  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, проверьте местоположение. Мой по умолчанию перешел на корпоративный домен, поэтому я не нашел его сразу, потому что забыл проверить, где он находится.
августа
@Mystere Человек у меня та же проблема. Я изменил разрешения, а затем попытался. Тем не менее я получаю ту же ошибку. :(
Рауф
«(или, возможно, любой из файлов)» работает для меня, позволяя учетной записи IIS_IUSRS доступ к web.config недостаточно, мне нужно включить его, чтобы иметь доступ ко всем файлам на сайте, помогает.
Туйен Нгуен
2
Я должен был сделать это для IUSR. IIS_IUSRS не работает для меня.
Тодд
Спасибо. Я предоставил «Все» с полным разрешением на папку веб-приложения, и это работает.
Мин Нгуен,
16

Сделайте файл доступным для группы IIS_IUSRS . Щелкните правой кнопкой мыши свой файл web.config, разверните свойства и на вкладке «Безопасность» добавьте IIS_IUSRS. Дайте группе доступ для чтения / записи.

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

Курт Ван ден Бранден
источник
+1 Хороший совет. Принятый ответ хорош, но не стоит упоминать, что вам может потребоваться добавить имя вашего компьютера перед «IIS_IUSRS», что и помогло мне преодолеть это.
Ральф Лавель
Это («Когда группа НЕ доступна») возродило мои надежды, но даже когда я добавил имя компьютера («IBM-TAMMYFAYEBAKER.platypus.local \ IIS_IUSRS»), я все еще получаю ту же ошибку. Я тоже попробовал полное имя компьютера, но он даже не принял бы его за действительного пользователя.
Б. Клэй Шеннон
15

Перейдите в родительскую папку, щелкните правой кнопкой мыши и выберите « Свойства» . Выберите вкладку « Безопасность », отредактируйте разрешения и нажмите «Добавить» . Нажмите на Дополнительно и Найти сейчас . Выберите IIS_IUSRS, нажмите OK и снова OK . Убедитесь, что у вас есть чек Написать . Нажмите ОК и снова ОК .

Работа выполнена!

Quinny
источник
19
Что на самом деле с рекомендацией Доступ на запись, когда чтение - это все, что нужно? / недооценено
TristanK
2
Единственный IIS *, который у меня есть, это IIS_WPG
Б. Клэй Шеннон,
1
@ B.ClayShannon Я тоже. У меня есть только IIS_WPG
Fortune
13

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

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

Carlos
источник
Где я могу получить этот интерфейс?
На вкладке «Просмотр возможностей» в вашем веб-приложении: Аутентификация
Карлос
Этот ответ должен быть частью принятого ответа, без него также необходимо добавить IUSR в список доступа к папке веб-сайта
Laurent S.
7

По какой-то причине ваш web.config установлен только для чтения. Снимите флажок только для чтения в файле web.config.

Луис
источник
Если ваше разрешение - полный доступ, но вы все еще получаете ошибку, это правильный ответ (y).
Василь Вальчев
4

Я использовал subst для создания отображения из D: в C:, чтобы сохранить те же настройки, что и у других разработчиков в команде. Это также дало мне те же ошибки, как описано. Удаление это исправило это для меня.

Sniipe
источник
3

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

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

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

Он начал работать только тогда, когда я дал следующие разрешения группе «Пользователи», а наследование распространилось касательно разрешений на web.config. Вероятно, следовало применить его только к web.config, чтобы уменьшить площадь атаки.

Пользовательские разрешения

Том Макдональд
источник
Была точно такая же ситуация. Это помогло.
Ремер
2

У нас был веб-сайт, работающий с определенной идентификационной информацией в пуле приложений, только после предоставления этому пользователю доступа на чтение к папке, содержащей файл web.config, он будет работать. Мы отследили это после добавления пользователя «все» с прочитанным, и все работало нормально.

грабить
источник
2

Для меня ошибка обнаружилась во время отладки на моей локальной машине и оказалась связана с базовым web.config, который инициируется .NET Framework при компиляции сайта. Мой файл C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config содержал нераспознанный элемент (folderLevelBuildProviders). Исправление это исправило ошибку 500.19.

Смотрите это: IIS Manager не может настроить компиляцию .NET в приложениях .NET 4

Рафаэль Эмшофф
источник
2

Изменение идентификатора модели процесса на LocalSystem устранило эту проблему для меня. Вы можете найти этот параметр, если щелкнуть правой кнопкой мыши пул приложений и выбрать «Расширенные настройки». Я использую IIS 7.5.

jshoaf
источник
2

Щелкните правой кнопкой мыши Web.Config => Tab Security => Button Edit => Button Add => Button Advanced => Button Find Now => В результатах поиска выберите свою группу (в нашем случае «IIS_IUSRS») => Ok => Ok => Хорошо

Игорь Левкивский
источник
2

Это случилось с нами, когда приложение IIS имеет виртуальный каталог с физическим путем, который содержит прямую косую /черту вместо обратной косой черты \. Это было случайно сделано с использованием API управления PowerShell для 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>
SliverNinja - MSFT
источник
1
В моем случае физический путь имел двойную обратную косую черту, например C:\inetpub\MySite\\MyService. Сменив его на один обратный слэш, сработало
Бен Андерсон
2

Я решил эту проблему, добавив разрешение на чтение в папку для пользователя пула приложений (WIN SERVER 2008 R2): C: \ Windows \ System32 \ inetsrv \ config

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

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

Ludens
источник
2

Перенесите свой проект на какой-нибудь диск, отличный от C: у меня сработало с той же ошибкой.

Талха Имам
источник
2

Это может произойти, если ваше приложение находится в виртуальном каталоге, а путь к файлам - подключенный диск.

Если вы измените путь к файлам на локальный диск, это решит проблему, если это действительно ваша проблема.

UKcentric
источник
2

Все приведенные ответы действительны и работают при разных обстоятельствах.

Для меня перезапуск Visual Studio работал.

Дорук
источник
1

Я также получал сообщение «Не удается прочитать файл конфигурации из-за недостаточных разрешений». Оказывается, ограничения ISAPI и CGI в IIS для ASP.NET 4.0 32-разрядных и 64-разрядных были отключены. Отметив их как разрешенные, я решил проблему.

граф
источник
1

Приведенные выше ответы были полезны, но в случае, если это кому-нибудь поможет - у меня возникла именно эта проблема, и оказалось, что я (сеть Windows) разделяю корневую папку, из которой размещался сайт. Мы убили общий ресурс и добавили разрешение «Пользователи» на чтение / выполнение, и все снова заработало.

Я подозреваю, что доля испортила это.

Майкл
источник
0

Была эта проблема с виртуальным приложением. Все разрешения были установлены. IIS_IUSRS, AppPoolIdentity, а затем дал полный доступ к каждому. Ничего не получалось. Перезапущен apppool, сайт и IIS, но не идти.

Удалил виртуальное приложение и снова добавил его с нуля, и он начал работать.

Хотел бы я знать, что это решило.

GBS
источник
0

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

Сайед Умар Ахмед
источник
0

У меня было это сообщение об ошибке, которое оказалось из-за моей физической папки, расположенной на сетевом диске, а не на локальном диске. Кажется, разрешения на таких дисках по умолчанию могут быть разными. Например, в то время как местоположение на локальном диске давало разрешение пользователям локального компьютера, местоположение в сети - нет.

Кроме того, принятый ответ не работает для такого случая. Локальные пользователи или пользователи IIS не были доступны для назначения разрешений. Решением было переместить физическую папку на локальный диск.

Kat
источник
0

У меня была та же проблема, и после того, как я выполнил все, что написано здесь как ответы, она все еще воспроизводилась. Вторая половина проблемы заключалась в том, что .NET был отключен в разделе «Включение или отключение функций Windows»

Богдан Матес
источник
0

Иногда, если это новый сервер, вам необходимо настроить или установить функцию ASP.NET в IIS, чтобы он мог прочитать ваш файл web.config.

В моем случае это было причиной.

SanthoshM
источник
0

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

Динеш Раджан
источник
0

Я дал разрешение и использовал ICACLS.exe, но не работал. Затем я изменил физический путь, и он успешно работал.

(IIS 8.5 windows 2012 R2)

Адем Айгюн
источник