Какую роль играет «Идентификация пула приложений» для пула приложений?

16

Говоря о безопасности IIS 7.5, AFAIK:

Идентификация пула приложений решает, с кем будет работать мое веб-приложение.

Метод аутентификации решает, с кем будут аутентифицироваться клиенты.

У меня виртуальная папка настроена так:

  • Я использую анонимную аутентификацию, ожидая, что все клиенты должны быть аутентифицированы как IUSR .
  • Я даю IUSR полный контроль над папкой.
  • Моя учетная запись пула приложений установлена ​​как учетная запись XXX, у которой нет прав доступа к папке. (Я намеренно установил это)

Но оказывается, что я не могу просматривать файлы в этой папке. Как только я даю разрешение учетной записи XXX на доступ к этой папке, все идет хорошо.

Так какую роль играет идентификация пула приложений в анонимной аутентификации? Совершенно неожиданно я должен дать разрешение учетной записи App Pool Identity для доступа к папке. Я думал, что анонимной аутентификации будет достаточно?

Благодарю.

smwikipedia
источник

Ответы:

18

Здесь много перегруженных терминов и изменение между IIS 7 и 7.5.

Удостоверение пула приложений и учетная запись пула приложений

Давайте начнем с идентификатора пула приложений (строчная буква I, он же учетная запись пула приложений ):

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

Таким образом, независимо от того, какую идентификационную информацию вы предоставляете пулу приложений, необходимо иметь возможность читать файлы в папке содержимого : в частности (но не ограничиваясь ими) любые файлы web.config (которые составляют часть конфигурации IIS и управляют тем, что App Pool собирается делать).

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

ApplicationPoolIdentity

Зачем отличать учетную запись пула приложений (идентификатор пула приложений) от идентичности пула приложений? Поскольку ApplicationPoolIdentity, используемый в специальных заглавных буквах, представляет собой новый тип учетной записи - управляемая учетная запись службы - введен и установлен по умолчанию в IIS 7.5 / Windows 2008 R2, а также доступен в Windows 2008 с пакетом обновления 2 (но не по умолчанию).

См. Пулы приложений на IIS.Net

Когда вы создаете сайт под R2, используя графический интерфейс:

  • для размещения этого веб-сайта будет создан пул приложений, и
  • тип учетной записи будет ApplicationPoolIdentity вместо сетевой службы (по умолчанию 2008), локальной службы или локальной системы.

С окончательной первоначальной версией 2008 года учетной записью пула приложений по умолчанию была сетевая служба плюс уникальный идентификатор / уникальность пула приложений; новый R2 / SP2 AppPoolIdentity типа учетной записи является сеть-Услуги- , как счет (т.е. это компьютер при подключении выключения-бокса), но предотвращает имперсонацию другого пула приложений в пределах той же самой коробки.

Вернуться к исходному вопросу:

  • Учетная запись пула приложений определяет, кто запускает ваше приложение, когда оно не олицетворяет кого-либо другого

  • Метод аутентификации описывает, как вы собираетесь аутентифицировать клиентов (чтобы имитировать их)

  • В учетной записи анонимного пользователя определяет , кто вы собираетесь работать , как при олицетворении пользователя для запроса, не прошедшая проверки подлинности - IUSR такого пользователя.

Кстати, в IIS 7.5 вы можете установить учетную запись анонимного пользователя в качестве идентификатора пула приложений (свойства метода анонимной проверки подлинности), что может упростить изоляцию и защиту контента для данного веб-сайта.

Установите разрешения, используя IIS AppPool \ YourSiteName для формата имени. (см. также этот пост )

TristanK
источник
4

Вы видите две вещи, которые обычно путают в ASP.NET:

  1. «идентификатор пользователя» - аутентификация учетной записи пользователя не имеет ничего общего с учетной записью или идентификатором, который фактически работает под управлением IIs и ASP.NET. Анонимная аутентификация позволяет любому пользователю получить доступ к любому общедоступному контенту, не предоставляя имя пользователя и пароль для браузера клиента. Анонимная учетная запись IUSR, которая проходит проверку подлинности по умолчанию в IIS, просто применяет доступ к общедоступному контенту веб-сайта. Это не влияет на процессы или ресурсы, используемые базовыми II или службами ASP.NET.
  2. «идентификатор приложения» - это фактическая учетная запись WindowsIdentity на сервере, которая фактически работает за IIS и ASP.NET, то есть учетная запись идентификатора пула приложений, назначенная пулу IIs и предоставленная ASP.NET. Ваш процесс ASP.NET по умолчанию выполняется под этой учетной записью удостоверения пула приложений (называемой виртуальной учетной записью в IIs версии 7.5+).

Объяснение: Во-первых, «аутентификация» в ASP.NET - это просто событие, обычно настраиваемое в web.config, который регистрирует учетную запись пользователя, которая передается IIs в качестве маркера пользователя в ASP.NET как обычный объект HttpContext ... т.е. текущий сеанс или контекст текущего пользователя. На самом деле он не меняет WindowsIdentity, на которой выполняется процесс ASP.NET, а просто передает ему маркер идентификатора пользователя. Используя HttpContext, ваш код может использовать этот идентификатор или имя для хранения прав на базу данных для различных разделов вашего сайта. Но это не повлияет на доступ к файлам в ASP.NET, поскольку не влияет и не влияет на идентичность действительной учетной записи «процесса» приложения, которая запускает ASP.NET под II.

Этого не произойдет, пока вы не выполните «Олицетворение», которое заставляет ASP.NET выдавать себя за любой токен, передаваемый ему II, и затем запускать его под идентификатором учетной записи. Вы можете установить олицетворение в вашем web.config. Когда вы активируете олицетворение в ASP.NET, WindowsIdentity действительно изменяется в рабочем процессе на любую аутентифицированную учетную запись, передаваемую в ASP.NET из IIS, и вы можете затем обращаться к файлам, конечно же, на основании того, какие права вы назначаете этой учетной записи пользователя. Важно отметить, что когда это происходит, это временно, и ASP.NET может вернуться к своему идентификатору процесса по умолчанию, который в текущих версиях II снова является учетной записью удостоверения пула приложений, назначенной данному пулу приложений.

Когда IIs просто использует обычную анонимную учетную запись пользователя без явной проверки подлинности, установленной в ASP.NET, IIs по умолчанию запускает назначенную веб-сайту учетную запись идентификатора пула приложений пула приложений и передает ее ASP.NET и рабочему процессу, выполняющему ее. Эта учетная запись удостоверения пула приложений обрабатывает все запросы на IIS и запускает ASP.NET для этого сайта.

Когда IIs запускается при этой настройке и к нему обращается пользователь, он фактически по умолчанию аутентифицирует за кулисами анонимную учетную запись IUSR, которая определяет доступ к веб-страницам и другим основным ресурсам. Но эта учетная запись НЕ передается в ASP.NET. И это не влияет на работу IIS удостоверения пула приложений и на котором работает ASP.NET.

Если вы установили Impersonate в значение «true», скажем, в своем web.config, И вы используете анонимную учетную запись IUSR по умолчанию в II для публичного доступа, и вы в явном виде установили истинное свойство anonymousAuthentication в web.config (вместо использования Windows или другой учетной записи для входа в систему), II будут отбрасывать идентификатор пула приложений, а II и ASP.NET теперь будут запускать свои процессы приложений в качестве анонимной IUSR-аутентифицированной и олицетворенной учетной записи.

Когда вы сделаете это, ASP.NET и его процессы теперь будут работать под учетной записью IUSR .... т.е. процесс приложений ASP.NET будет запускать свою учетную запись WindowsIdentity в качестве учетной записи IUSR. Теперь вы можете применить доступ на чтение / запись к этой анонимной учетной записи IUSR и к папкам, к которым вы хотите получить доступ к этой учетной записи. (Примечание: обязательно добавьте учетную запись процесса по умолчанию, учетную запись пула приложений для пула, а также права на эти папки. Это согласно рекомендации Microsoft)

Удачи!

Stokely
источник
2

В игре два контекста аутентификации. Процесс веб-сервера (который обрабатывает ваши веб-запросы) запускается от имени пользователя пула приложений. Когда поступает запрос на ваш виртуальный хост, пул приложений выдает себя за пользователя, указанного в «Учетных данных анонимной аутентификации» конкретного сайта - по умолчанию IUSR.

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

Рекомендуется запускать по одному сайту для каждого пула и настроить для идентификатора пула приложений запуск с тем же пользователем, что и у анонимного пользователя вашего сайта. Можно вырваться из контекста анонимного пользователя (IUSR) и повысить привилегии до тех, которые принадлежат самой идентификации пула приложений.

Стив Мейн
источник