Разрешение IIS 7.5 App Pool Identity не назначено папке, но приложение все еще может записывать в свою папку? - PullRequest
16 голосов
/ 24 ноября 2010

Мы поместили существующее приложение на новый сервер R2 с IIS 7.5.

Теперь все работает, и приложение может записывать в свои папки ... но мы задаемся вопросом, как ... приходит новый IISс историей идентификации пула приложений IIS, которая создает нового виртуального пользователя для каждого приложения, и так оно и было для этого.

В документации указано, что этот пользователь должен быть назначен папкам, чтобы все работало... но в нашем случае это не ?!И все же это работает, приложение через этого пользователя имеет доступ?

Где-то на форумах кто-то упоминал, что это потому, что приложения, работающие под Полным доверием, могут писать что угодно где угодно ... но это не имеет смысла?CAS в том, что я знаю, не справиться с этим?

Итак, в IIS 7.5, как приложение с собственным пулом может иметь разрешения на запись, которых нет в настройках безопасности папки?

Владан

1 Ответ

19 голосов
/ 13 марта 2011

РЕДАКТИРОВАТЬ :

Хотя я чувствую, что я обрисовал в общих чертах ниже хорошее обсуждение того, как уровни доверия играют доступ к файловой системе в ASP.NET, я чувствую правильный ответ на оригиналвопрос размещен здесь (да, мне пришлось задать этот вопрос с добавлением немного дополнительной информации).По сути, пользователь AppPoolIdentity также является членом группы Users, и именно так этот пользователь может выполнять запись в различные области файловой системы.

ORGINAL ANSWER :

При создании нового пула приложений в IIS 7.5 пользователь AppPoolIdentity добавляется в группу IIS_IUSRS.Эта группа имеет «доступ ко всем необходимым файловым и системным ресурсам, чтобы учетная запись при добавлении в эту группу могла беспрепятственно выступать в качестве удостоверения пула приложений» (1).Группа IIS_IUSRS имеет права на запись в подавляющее большинство файловой системы (за пределами защищенных папок, таких как C: \, C: \ Users, C: \ Windows и т. Д.).К сожалению, мне не удалось найти какой-либо способ явно увидеть, что группа IIS_IUSRS имеет доступ к определенной папке с помощью проводника Windows ( edit : в посте, указанном выше, описано, как «увидеть» этот доступ).Однако этот доступ можно увидеть неявно, предоставив DENY доступ к группе IIS_IUSRS в папке перед попыткой записи в эту папку (что приведет к System.UnauthorizedAccessException).

Уровни доверия .NET такжеиграть в разрешения.В IIS 7.5 пользователь IIS AppPoolIdentity имеет доступ для записи в папку, из которой приложение запускается по умолчанию, если веб-приложение выполняется с полным, высоким или средним доверием.При работе с полным или высоким доверием пользователь IIS AppPoolIdentity по умолчанию может выполнять запись в любую папку, кроме папок, таких как C: \, C: \ Windows или C: \ Users (если только пользователю не предоставлен определенный доступ к этим папкам).На среднем уровне доверия пользователь IIS AppPoolIdentity по-прежнему может выполнять запись в папку веб-приложения по умолчанию, но при попытке записи в любую другую папку возникает следующее исключение:

System.Security.SecurityException: Запросдля разрешения типа 'System.Security.Permissions.FileIOPermission, mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089' не удалось.

То же исключение возникает при попытке записи вЛЮБОЙ файл с низким или минимальным уровнем доверия.

Это не та ошибка, которую вы получаете при попытке получить доступ к файлу, к которому у пользователя AppPoolIdentity нет доступа при работе с полным или высоким доверием.В этом случае выдается исключение System.UnauthorizedAccessException с сообщением, похожим на:

System.UnauthorizedAccessException: доступ к пути 'C: \ test.txt' запрещен.

При среднем, низком или минимальном уровне доверия CAS вступает во владение и отказывает в доступе к методам создания файлов, независимо от прав доступа к папке.

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

Ссылки:

1 - http://learn.iis.net/page.aspx/140/understanding-built-in-user-and-group-accounts-in-iis-7/

2 - http://technet.microsoft.com/en-us/library/dd163542.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...