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

346

Здесь возникает проблема с 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 позволяют выполнять эти записи, даже несмотря на то, что доступ к файловой системе явно отсутствует.

Теги:
permissions
iis-7.5
windows-server-2008-r2

3 ответа

383
Лучший ответ

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

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

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

Изображение 5918

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

Изображение 5919

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

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

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

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

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

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

Изображение 5920

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

Изображение 5921

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

  • 0
    @Kev [+1] Я опубликовал аналогичный вопрос о разрешениях NTFS для удостоверений пула приложений здесь: stackoverflow.com/questions/11232675/… - Буду признателен, если вы посмотрите.
  • 0
    @ one.beat.consumer - извините, я никогда не видел ваш комментарий. Вы все еще застряли с этим вопросом?
Показать ещё 9 комментариев
4
  • Щелкните правой кнопкой мыши папку.

  • Нажмите "Свойства"

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

Изображение 5922

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

Изображение 5923

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

Изображение 5924

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

Изображение 5925

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

Изображение 5926

  1. Отметьте/снимите отметку о том, какой доступ вам нужно предоставить учетной записи

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

0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню