IIS AppPoolIdentity и права доступа на запись в файловую систему
вот проблема с IIS 7.5 и ASP.NET то, что я исследовал и ничего не добился. Любая помощь будет очень признательна.
мой вопрос: использование ASP.NET в IIS 7.5, как IIS и / или операционная система позволяют веб-приложению записывать в папку, например C:dump
при работе с полным доверием? Как это так, что мне не нужно явно добавлять доступ на запись для пользователя пула приложений (в этом случае ApplicationPoolIdentity
)?
Я знайте:
- в IIS 7.5 идентификатором по умолчанию для пула приложений является
ApplicationPoolIdentity
. -
ApplicationPoolIdentity
представляет собой учетную запись пользователя Windows, под названием "пул приложений служб IISИмя_группы_приложений", который создается при создании пула приложения, где Имя_группы_приложений-имя пула приложений. - в "пул приложений служб IISИмя_группы_приложений" пользователь по умолчанию является членом
IIS_IUSRS
группы. - если вы работаете под полным доверием, ваше веб-приложение может писать в многие области файловой системы (за исключением папок типа
C:Users
,C:Windows
и т. д.). Например, ваше приложение будет иметь доступ для записи в некоторые папки, например,C:dump
. - по умолчанию
IIS_IUSRS
группе не предоставляется доступ для чтения или записи вC:dump
(по крайней мере, не доступ, который виден через вкладку "Безопасность" в Проводнике Windows). - если вы отказываете в доступе к записи
IIS_IUSRS
, вы получите исключение securityexception при попытке записи в папку (как ожидаемый.)
Итак, принимая все это во внимание, как пишут доступ к "пул приложенийслужб IIS Имя_группы_приложений" пользователей? В процесса w3wp.процесс exe работает как этот пользователь, так что позволяет этому пользователю писать в папку, к которой он, похоже, не имеет явного доступа?
обратите внимание, что я понимаю, что это, вероятно, было сделано для удобства, так как было бы больно предоставить пользователю доступ к каждой папке, в которую он должен писать, если вы работаете под полным доверием. Если вы хотите ограничить этот доступ, вы всегда можете запустить приложение под средним доверием. Я заинтересован в том, чтобы узнать о том, как операционная система и/или IIS позволяет выполнять эти записи, хотя, похоже, нет явного доступа к файловой системе.
3 ответа:
The
ApplicationPoolIdentity
присваивается членство вUsers
иIIS_IUSRS
группы. На первый взгляд это может выглядеть несколько тревожно, однакоUsers
группа имеет несколько ограниченные права NTFS.например, если вы попытаетесь создать папку в
C:\Windows
папка, то вы обнаружите, что вы не можете.ApplicationPoolIdentity
по-прежнему необходимо иметь возможность читать файлы из системных папок windows (иначе как еще рабочий процесс сможет динамически загружать essential файл DLL.)что касается ваших наблюдений о том, чтобы писать в ваш . Если вы посмотрите на разрешения в расширенных настройках безопасности, вы увидите следующее:
смотрите, что специальное разрешение наследуется от
c:\
:вот почему ваш сайт
ApplicationPoolIdentity
может читать и написать в эту папку. Это право наследуется отc:\
диск.в общей среде, где у вас, возможно, есть несколько сотен сайтов, каждый со своим собственным пулом приложений и идентификатором пула приложений, вы будете хранить папки сайта в папке или томе, который имел
Users
группа удалена и разрешения установлены таким образом, что только администраторы и системная учетная запись имеют доступ (с наследованием).вы бы тогда индивидуально назначить необходимые разрешения каждый
IIS AppPool\[name]
требуется на его сайте корневая папка.вы также должны убедиться, что все папки, которые вы создаете, где вы храните потенциально конфиденциальные файлы или данные имеют
Users
группа удалена. Вы также должны убедиться, что любые приложения, которые вы устанавливаете, не хранят конфиденциальные данные в своихc:\program files\[app name]
папки и что они используют вместо папки профиля пользователя.да, на первый взгляд это выглядит как
ApplicationPoolIdentity
имеет больше прав, чем должно, но на самом деле у него не больше прав, чем у группы диктует членство.An
ApplicationPoolIdentity
членство в группе можно проверить с помощью SysInternals Process Explorer tool. Найдите рабочий процесс, который работает с идентификатором пула приложений, который вас интересует (вам нужно будет добавитьUser Name
столбец в список столбцов для отображения:например, у меня есть бассейн с именем
900300
имеет идентификатор пула приложенийIIS APPPOOL0300
. Щелчок правой кнопкой мыши свойства для процесса и выбора вкладки безопасности мы видим:как видим
IIS APPPOOL0300
является членомUsers
группы.
Правой Кнопкой Мыши на папку.
Выберите Свойства
Выберите Вкладку Безопасность. Вы увидите что-то вроде этого:
- Нажмите Кнопку " Изменить..."кнопка В над экраном. Вы увидите что-то вроде этого:
- Нажмите Кнопку "Добавить..."кнопка В над экраном. Вы увидите что-то вроде это:
- Нажмите Кнопку "Местах..."кнопка В над экраном. Вы увидите что-то вроде этого. Теперь перейдите к самой верхней части этой древовидной структуры и выберите имя компьютера, а затем нажмите кнопку ОК.
- теперь введите " iis apppool\your_apppool_name "и нажмите кнопку" Проверить имена". Если пул приложений существует, вы увидите свое имя в текстовом поле с помощью подчеркните в нем. Нажмите кнопку ОК.
Проверьте / снимите любой доступ, который вам нужно предоставить учетной записи
Нажмите кнопку Применить, а затем ОК.
каждый пул приложений в IIs создает свою собственную безопасную папку пользователя с полным разрешением на чтение / запись по умолчанию в разделе c:\users. Откройте папку Пользователи и посмотрите, какие папки пула приложений есть, щелкните правой кнопкой мыши и проверьте их права для назначенной виртуальной учетной записи пула приложений. Вы должны увидеть, что ваша учетная запись пула приложений уже добавлена с доступом для чтения/записи, назначенным ее корневым и подпапкам.
Так что тип доступа к хранилищу файлов выполняется автоматически и вы должен иметь возможность писать все, что вам нравится, в папках учетных записей пользователей пулов приложений, ничего не меняя. Именно поэтому были созданы виртуальные учетные записи пользователей для каждого пула приложений.