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 371

3 ответа:

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

например, если вы попытаетесь создать папку в C:\Windows папка, то вы обнаружите, что вы не можете.ApplicationPoolIdentity по-прежнему необходимо иметь возможность читать файлы из системных папок windows (иначе как еще рабочий процесс сможет динамически загружать essential файл 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 tool. Найдите рабочий процесс, который работает с идентификатором пула приложений, который вас интересует (вам нужно будет добавить 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 "и нажмите кнопку" Проверить имена". Если пул приложений существует, вы увидите свое имя в текстовом поле с помощью подчеркните в нем. Нажмите кнопку ОК.

enter image description here

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

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

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

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