Не удается прочитать файл конфигурации из-за недостаточных прав доступа
Недавно я столкнулся с ошибкой при попытке разместить мой сайт asp.net с IIS. Я нашел решение, которое многие клянутся.
Решение:
- Добавить IIS_IUSRS с правами чтения для файлов в папке
- Измените метод проверки подлинности IIS на BasicAuthentication
- обновить сайт. Это будет работать
( 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
42 ответа
Нет проблем с вашим web.config. Ваш веб-сайт работает в процессе. В iis вы можете определить идентичность этого процесса. Идентификатор того, что пул приложений вашего веб-сайта работает как (Сетевые службы, Локальная система и т. Д.), Должен иметь разрешение на доступ и чтение файла web.config.
Обновить:
Этот обновленный ответ такой же, как и выше, но немного длиннее, проще и лучше.
Прежде всего: вам не нужно ничего менять в вашем конфигурационном файле. Все нормально Проблема с разрешениями файла Windows.
Эта проблема возникает из-за того, что ваше приложение не может получить доступ и прочитать файл web.config.
Сделайте файл доступным для группы IIS_IUSRS. Просто щелкните правой кнопкой мыши web.config и выберите Свойства, на вкладке Безопасность добавьте IIS_IUSRS.
Так что же это за IIS_IUSRS?
Ваш веб-сайт похож на исполняемый файл. Как и любой исполняемый файл, он должен запускаться пользователем и запускаться в соответствии с разрешениями, назначенными этому пользователю.
Когда ваш сайт запускается в IIS, пул приложений вашего веб-сайта связывается с пользователем (сетевые службы, локальная система и т. Д.) (И может быть изменен в IIS).
Поэтому, когда вы говорите IIS_IUSRS, это означает любого пользователя (сетевые службы, локальная система и т. Д.), Под которым работает ваш сайт.
И как @Seph упоминается в комментарии ниже: Если ваш компьютер находится в домене, помните, что группа IIS_IUSRS является локальной группой. Также убедитесь, что когда вы пытаетесь найти этого пользователя, проверьте его местоположение на локальном компьютере, а не на корпоративном домене.
У меня была такая же проблема с разрешениями на web.config
файл.
Однако моя проблема была вызвана тем, что IIS не удалось загрузить файл конфигурации, поскольку в нем содержались правила перезаписи URL, и я не установил модуль перезаписи URL IIS на новом сервере.
Решение: Установите модуль перезаписи.
Надеюсь, это сэкономит кому-то несколько часов.
У меня была такая же проблема, когда я пытался поделиться корневой папкой сайта с другим пользователем. Некоторая папка потеряла разрешение. Поэтому я следовал инструкциям по добавлению разрешения в группу IIS_IUSRS, как это было предложено Afshin Gh. Проблема в том, что эта группа была недоступна для меня. Я использую Windows 7.
Что я сделал, я просто изменил некоторые шаги:
- Щелкните правой кнопкой мыши на родительской папке (кто потерял разрешение),
- Свойства => Безопасность => В разделе "Группы или имена пользователей:",
- Нажмите Изменить...
- Откроется окно "Разрешение для вашей папки".
- В разделе "Группы или имена пользователей:" нажмите ADD... btn,
- Введите Authen и нажмите Проверить имена,
- Вы увидите полное название группы " Прошедшие проверку "
- Нажмите ок => применить.
- Это должно снова включить привилегии.
Это сработало для меня.
Примечание редактора: делать то, что говорит этот ответ, ОПАСНО! Учетная запись LocalSystem является...
Полностью доверенная учетная запись, в большей степени, чем учетная запись администратора. В одном блоке нет ничего, что эта учетная запись не может сделать, и она имеет право доступа к сети как машина (для этого требуется Active Directory и предоставление разрешений учетной записи машины для чего-либо)
Смена удостоверения с ApplicationPoolIdentity на LocalSystem сделала свое дело;).
Я использую Win7 64 с IIS 7.5
подробнее об идентификации пула приложений в IIS 7.5 и победе 7
Сделайте файл доступным для группы IIS_IUSRS. Щелкните правой кнопкой мыши свой файл web.config, разверните свойства и на вкладке "Безопасность" добавьте IIS_IUSRS. Дайте группе доступ для чтения / записи.
Когда группа НЕ доступна, замените IIS_IUSRS на ComputerName\IIS_IUSRS.
Вам не нужно ничего менять в вашем файле web.config.
Проблема в разрешениях файловой системы. Ваши права доступа к файлам не позволяют пользователю IIS_IUSRS получить доступ к web.config (или, возможно, любому из файлов). Измените права доступа к файлам в Windows, чтобы разрешить учетной записи IIS_IUSRS доступ к ней.
Когда вы предоставляете разрешения для IIS_IUSRS, вы должны проверить, что в разделе IIS/ Аутентификация вашего веб-приложения учетные данные анонимной аутентификации используют идентификацию пула приложений, а не IUSR.
Перейдите в родительскую папку, щелкните правой кнопкой мыши и выберите " Свойства". Выберите вкладку " Безопасность ", отредактируйте разрешения и нажмите "Добавить". Нажмите на Дополнительно и Найти сейчас. Выберите IIS_IUSRS, нажмите OK и снова OK. Убедитесь, что у вас есть чек Написать. Нажмите ОК и снова ОК.
Работа выполнена!
По какой-то причине ваш web.config установлен только для чтения. Снимите флажок только для чтения в файле web.config.
Мне нужно было добавить разрешения для IUSR (в дополнение к ISS-IUSRS, как предлагали другие). (См. Также: http://codeasp.net/blogs/raghav_khunger/microsoft-net/2099/iis-7-5-windows-7-http-error-401-3-unauthorized)
Вместо предоставления доступа всем пользователям IIS, например IIS_IUSRS
вы также можете предоставить доступ только к удостоверению пула приложений с помощью сайта. Это рекомендованный подход Microsoft, дополнительную информацию можно найти здесь:
https://support.microsoft.com/en-za/help/4466942/understanding-identities-in-iis
https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities
Исправить:
Начните с просмотра параметра файла конфигурации выше, чтобы определить расположение, к которому требуется доступ. Целикомpublish
Папка в этом случае требует доступа. Щелкните правой кнопкой мыши папку и выберите свойства, а затем вкладку Безопасность.
Нажмите на Edit...
а потом Add...
.
Теперь посмотрим на Диспетчер информационных служб Интернета (IIS) и пулы приложений:
В моем случае мой сайт работает в пуле приложений LocalTest, а затем я ввожу имя IIS AppPool\LocalTest
Нажмите Check Names
и пользователя нужно найти.
Дайте пользователю необходимый доступ (по умолчанию: чтение и выполнение, список содержимого папки и чтение), и все должно работать.
Я использовал subst для создания отображения из D: в C:, чтобы сохранить те же настройки, что и у других разработчиков в команде. Это также дало мне те же ошибки, как описано. Удаление это исправило это для меня.
Это произошло с нами, когда в приложении 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>
Принятое решение не для меня. Я использую репозиторий Git, и он клонирован в следующую папку
c:\users\myusername\source\repos\myWebSite
Я сделал новый сайт IIS и указал его на путь. Который не имел разрешений iis_iusrs, предложенных в принятом решении. Когда я добавил разрешения, он все еще не работал.
Он начал работать только тогда, когда я дал следующие разрешения группе "Пользователи", а наследование распространилось касательно разрешений на web.config. Вероятно, следовало применить его только к web.config, чтобы уменьшить площадь атаки.
Все ответы действительны и работают при разных обстоятельствах.
Для меня перезапуск Visual Studio работал.
Изменение идентификатора модели процесса на LocalSystem устранило эту проблему для меня. Вы можете найти этот параметр, если щелкнуть правой кнопкой мыши пул приложений и выбрать "Расширенные настройки". Я использую IIS 7.5.
Перенесите свой проект на какой-нибудь диск, отличный от C: у меня сработало с такой же ошибкой.
Для меня ошибка обнаружилась во время отладки на моем локальном компьютере и оказалась связана с базовым web.config, который инициируется.NET Framework при компиляции сайта. Мой файл C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config содержал нераспознанный элемент (folderLevelBuildProviders). Исправление это исправило ошибку 500.19.
Смотрите это: IIS Manager не может настроить компиляцию.NET в приложениях
Я решил эту проблему, добавив разрешение на чтение в папку для пользователя пула приложений (WIN SERVER 2008 R2): C:\Windows\System32\inetsrv\config
Немного предыстории: наш сервер был взломан с помощью классической ошибки, когда у пользователя приложения было больше прав, чем у него (локальный администратор).
Чтобы исправить это, мы создали нового пользователя домена, у которого были только разрешения для папки приложения с минимально необходимыми правами, и назначили его в качестве пользователя пула приложений. чем мы столкнулись в вопросе, и это было решением наших проблем.
Приведенные выше ответы были полезны, но в случае, если это кому-то поможет - у меня была именно эта проблема, и оказалось, что я (сеть Windows) использовал корневую папку, из которой размещался сайт. Мы убили общий ресурс и добавили разрешение пользователей на чтение / выполнение, и он снова заработал нормально.
Я подозреваю, что акция все испортила.
Это может произойти, если ваше приложение находится в виртуальном каталоге, а путь к файлам - подключенный диск.
Если вы измените путь к файлам на локальный диск, это решит проблему, если это действительно ваша проблема.
У нас был веб-сайт, работающий с определенным идентификатором в пуле приложений, только после предоставления этому пользователю доступа на чтение к папке, содержащей web.config, он будет работать. Мы отследили это после добавления пользователя "все" с помощью read, и все работало нормально.
Щелкните правой кнопкой мыши Web.Config => Tab Security => Button Edit => Button Add => Button Advanced => Button Find Now = > В результатах поиска выберите свою группу (в нашем случае " IIS_IUSRS") => Ok => Ok=> Хорошо
Убедитесь, что ваш файл web.config не помечен только для чтения
Я также получал сообщение "Не удается прочитать файл конфигурации из-за недостаточных разрешений". Оказывается, ограничения ISAPI и CGI в IIS для ASP.NET 4.0 32-разрядных и 64-разрядных были отключены. Отметив их как разрешенные, я решил проблему.
У меня была эта проблема, работающая в Windows 10 с пулом приложений с использованием учетной записи microsoftaccount\email@contosa.com (например, вход на ПК с учетной записью Microsoft вместо локальной учетной записи).
Видимо на моем компьютере что-то испортилось; удаление IIS и повторное добавление ничего не сделали (потому что, похоже, метабаза IIS не была удалена). Удаление и воссоздание пула приложений тоже не помогло.
Моим решением было просто создать новый пул приложений с такими же настройками, но с другим именем. Это решило проблему для меня; очевидно, что-то испортилось в apppool, что даже не удастся исправить, даже удалив и повторно добавив его с тем же именем.
Иногда, если это новый сервер, вам нужно настроить или установить функцию ASP.NET в IIS, чтобы он мог прочитать ваш файл web.config.
В моем случае это было причиной.
Я дал разрешение и использовал ICACLS.exe, но не работал. Затем я изменил физический путь, и он успешно работал.
(IIS 8.5 windows 2012 R2)
В моем случае он был настроен для работы на подключенном диске. Сработало изменение сайта, чтобы он указывал на путь UNC.
Я попробовал большинство предыдущих предложений, но тщетно. Я не могу перезагрузить сайт, поэтому я отредактировал файл.csproj и изменил номер порта, и он сразу заработал:
<WebProjectProperties>
<UseIIS>True</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>**4000**</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>http://localhost:**4000**/</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>False</UseCustomServer>
<CustomServerUrl>
</CustomServerUrl>
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
</WebProjectProperties>