AppPoolIdentity и файловой системы служб IIS разрешения записи

вот проблема с IIS 7.5 и ASP.NET что я исследовал и ничего не нашел. Любая помощь будет очень признательна.

мой вопрос: использование ASP.NET в IIS 7.5, как IIS и / или операционная система позволяют веб-приложение для записи в папку, как C:\dump при работе с полным доверием? Как получилось, что мне не нужно явно добавлять доступ на запись для пользователя пула приложений (в этом случае ApplicationPoolIdentity)?

Я знаю:

  • в IIS 7.5 идентификатором по умолчанию для пула приложений является ApplicationPoolIdentity.
  • ApplicationPoolIdentity представляет учетную запись пользователя Windows под названием "IIS APPPOOL\AppPoolName", которая создается при создании пула приложений, где AppPoolName-это имя пула приложений.
  • пользователь "IIS APPPOOL\AppPoolName" по умолчанию является членом IIS_IUSRS группы.
  • если вы работаете под полным доверием, ваше веб-приложение может писать многие области файловой системы (за исключением папок, таких как C:\Users, C:\Windows и т. д.). Например, ваше приложение будет иметь доступ для записи в некоторые папки, например,C:\dump.
  • по умолчанию IIS_IUSRS группе не предоставляется доступ для чтения или записи в C:\dump (по крайней мере, не доступ, который виден через вкладку "Безопасность" в Проводнике Windows).
  • если вы отказываете в доступе к записи IIS_IUSRS, вы получите SecurityException при попытке записи в папку (как ожидаемый.)

Итак, принимая все это во внимание, как доступ на запись предоставляется пользователю "IIS APPPOOL\AppPoolName"? В процесса w3wp.exe процесс работает как этот пользователь, так что позволяет этому пользователю писать в папку, к которой он, похоже, не имеет явного доступа?

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

3 ответов


на ApplicationPoolIdentity присваивается членство в Users и IIS_IUSRS группы. На первый взгляд это может показаться несколько тревожным, однако Users группа имеет несколько ограниченные права NTFS.

например, если вы попытаетесь создать папку в C:\Windows папка, то вы обнаружите, что вы не можете. The ApplicationPoolIdentity по-прежнему необходимо иметь возможность читать файлы из системных папок windows (в противном случае, как еще рабочий процесс сможет динамически загружать необходимые файл DLL.)

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

enter image description here

см., что специальное разрешение наследуется от c:\:

enter image description here

вот почему ваш сайт ApplicationPoolIdentity может читать и написать в эту папку. Это право наследуется от c:\ диск.

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

вы бы затем индивидуально назначить необходимые разрешения каждый IIS AppPool\[name] требуется на сайте корневая папка.

вы также должны убедиться, что любые папки, которые вы создаете, где вы храните потенциально конфиденциальные файлы или данные, имеют Users группа удалена. Вы также должны убедиться, что любые устанавливаемые приложения не хранят конфиденциальные данные в своих c:\program files\[app name] папки и что они используют вместо папки профиля пользователя.

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

An ApplicationPoolIdentityчленство в группе может быть рассмотрено с помощью SysInternals инструмент Process Explorer. Найдите рабочий процесс, который работает с идентификатором пула приложений, который вас интересует (вам нужно будет добавить User Name столбец в список столбцов для отображения:

enter image description here

например, у меня есть пул с именем 900300 имеет идентификатор пула приложений IIS APPPOOL0300. Щелчок правой кнопкой мыши свойства для процесса и выбора вкладки безопасность мы видим:

enter image description here

как видим IIS APPPOOL0300 является членом Users группы.


  1. Правой Кнопкой Мыши на папку.

  2. Выберите Свойства

  3. Перейдите На Вкладку Безопасность. Вы увидите что-то вроде этого:

enter image description here

  1. Нажмите "Редактировать..."кнопка В над экраном. Вы увидите что-то вроде этого:

enter image description here

  1. Нажмите Кнопку "Добавить..."кнопка В над экраном. Вы увидите что-то вроде это:

enter image description here

  1. Нажмите Кнопку "Местах..."кнопка В над экраном. Вы увидите нечто подобное. Теперь перейдите к самой верхней части этой древовидной структуры и выберите имя компьютера, затем нажмите кнопку ОК.

enter image description here

  1. теперь введите "iis apppool\your_apppool_name" и нажмите кнопку "Проверить имена". Если apppool существует, вы увидите свое имя apppool в текстовом поле с подчеркните это. Нажмите кнопку ОК.

enter image description here

  1. Проверьте / снимите любой доступ, который вам нужно предоставить учетной записи

  2. Нажмите кнопку Применить, а затем OK.


каждый пул приложений в IIs создает свою собственную защищенную папку пользователя с полным разрешением на чтение/запись по умолчанию в c:\users - ... Откройте папку "Пользователи" и посмотрите, какие папки пула приложений есть, щелкните правой кнопкой мыши и проверьте их права для назначенной виртуальной учетной записи пула приложений. Вы должны увидеть свою учетную запись пула приложений, уже добавленную с доступом для чтения/записи, назначенным ее корневым и подпапкам.

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