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

395

Вот проблема с 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группы.
  • Если вы работаете под Full Trust, веб - приложение может написать во многих областях файловой системы (исключая папки , такие как C:\Users, C:\Windowsи т.д.). Например, ваше приложение будет иметь доступ к записи в некоторых папках, например, C:\dump.
  • По умолчанию IIS_IUSRSгруппе не предоставлены права на чтение или запись C:\dump(по крайней мере, на доступ, который виден через вкладку «Безопасность» в проводнике Windows).
  • Если вы запретите доступ для записи IIS_IUSRS, вы получите SecurityException при попытке записи в папку (как и ожидалось).

Итак, учитывая все это, как предоставляется доступ на запись пользователю «IIS APPPOOL \ AppPoolName»? Процесс w3wp.exe запускается от имени этого пользователя, так что позволяет этому пользователю писать в папку, к которой у него нет явного доступа?

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

rsbarro
источник

Ответы:

403

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

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

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

введите описание изображения здесь

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

введите описание изображения здесь

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

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

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

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

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

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

введите описание изображения здесь

Например, у меня здесь 900300есть пул с идентификатором пула приложений IIS APPPOOL\900300. Если щелкнуть правой кнопкой мыши свойства процесса и выбрать вкладку «Безопасность», мы увидим:

введите описание изображения здесь

Как мы видим, IIS APPPOOL\900300является членом Usersгруппы.

Кев
источник
@Kev [+1] Я опубликовал аналогичный вопрос в отношении разрешений NTFS для удостоверений пула приложений здесь: stackoverflow.com/questions/11232675/… - Я был бы признателен, если бы вы посмотрели.
one.beat.consumer
@ one.beat.consumer - извините, я никогда не видел ваш комментарий. Вы все еще застряли с этим вопросом?
Кев
@Kev - да, это стало менее серьезной проблемой, так как меня отвлекли на другую чушь, но она все еще не решена. Какие-нибудь мысли?
one.beat.consumer
7
Давайте проголосуем за включение этого раздела в MSDN. Никогда не тратил время, чтобы понять это, так что это большая помощь (и мне стыдно, что я никогда не знал).
Гримаса Отчаяния
67
Непонятно, почему эта основная документация Microsoft IIS находится на SO, а не на MSDN.
Амит Найду
40
  1. Щелкните правой кнопкой мыши на папке.

  2. Нажмите Свойства

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

введите описание изображения здесь

  1. Нажмите кнопку «Изменить ...» на экране выше. Вы увидите что-то вроде этого:

введите описание изображения здесь

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

введите описание изображения здесь

  1. Нажмите кнопку «Locations ...» на экране выше. Вы увидите что-то подобное. Теперь перейдите в самый верх этой древовидной структуры и выберите имя своего компьютера, затем нажмите OK.

введите описание изображения здесь

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

введите описание изображения здесь

  1. Установите / снимите флажок для доступа к учетной записи

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

fluidguid
источник
0

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

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

Stokely
источник
Это происходит только в том случае, если для «Загрузить профиль пользователя» установлено значение «Истина».
JamesQMurphy
Правильно, это означает, что папка пользователя AppPool не будет создана, если она не была истинной, верно? Вот почему они создали его таким образом ... чтобы предотвратить возможность доступа и хранения ненужными файлами в Windows / temp и на всем жестком диске вместо управляемой безопасной папки только для этой учетной записи.
Стокли
0

Я пытался это исправить проблемы с доступом к веб-сайту IIS, который проявлялся примерно так в журналах событий → Windows → Приложение:

Имя журнала: приложение
Источник: ASP.NET 4.0.30319.0
Дата: 05.01.2012 16:12:33
Код события: 1314
Категория задачи: веб-событие
Уровень: Информация
Ключевые слова: классика
Пользователь: N / A
Компьютер: SALTIIS01

Описание:
Код события: 4008 
Сообщение о событии: не удалось выполнить авторизацию файла для запроса. 
Время события: 05.01.2012 16:12:33 
Время события (UTC): 06.01.2012 00:33 
Код события: 349fcb2ec3c24b16a862f6eb9b23dd6c 
Последовательность событий: 7 
Возникновение события: 3 
Код детали события: 0 

Информация о приложении: 
    Область применения: / LM / W3SVC / 2 / ROOT / Приложение / SNCDW-19-129702818025409890 
    Уровень доверия: Полный 
    Виртуальный путь к приложению: / Приложение / SNCDW 
    Путь к приложению: D: \ Sites \ WCF \ Application \ SNCDW \ 
    Название машины: SALTIIS01 

Обрабатывать информацию: 
    Идентификатор процесса: 1896 
    Имя процесса: w3wp.exe 
    Имя учетной записи: iisservice 

Информация о запросе: 
    URL запроса: http: //webservicestest/Application/SNCDW/PC.svc 
    Путь запроса: /Application/SNCDW/PC.svc 
    Адрес хоста пользователя: 10.60.16.79 
    Пользователь: js3228 
    Аутентифицировано: True 
    Тип аутентификации: согласование 
    Имя учетной записи потока: iisservice 

В конце концов , я должен был дать Windows , Everyoneгруппа доступа на чтение к этой папке , чтобы заставить его работать правильно.

SharpC
источник