User Tools

Site Tools


admin:user_web_application

Под каким пользователем выполняется Web-приложение?

Основные понятия

Процесс (process) - это объект, который создается операционной системой, когда пользователь запускает приложение. Процессу выделяется отдельное адресное пространство, причем это пространство физически недоступно для других процессов. Процесс запускается от имени определенного пользователя. Список запущенных процессов можно посмотреть в Task Manager.

Для каждого процесса операционная система создает один главный поток (thread), который является потоком выполняющихся команд. При необходимости главный поток может создавать другие потоки, пользуясь для этого программным интерфейсом ОС.

Олицетворение (impersonation) - механизм, позволяющий назначить текущему потоку реквизиты некоторого пользователя, что позволяет выполнять код от его имени. Данный механизм часто используется в web-приложениях, когда один и тот же поток обслуживает запросы от различных пользователей.

Модель IIS 6+

Application Pool

В модели IIS 6+ процессом, в котором выполняются веб-приложения является один из Application Pool (в Task Manager - w3wp.exe). Каждый Application Pool представляет собой пул потоков, который в общих чертах работает так:

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

Application Pool (как и любой процесс) запускается от имени определенного пользователя. Посмотреть/настроить можно

  • в IIS 6: Имя сервера → Application Pools → Имя пула → Properties → Identity
  • в IIS 7+: Имя сервера → Application Pools → Имя пула → Advanced Settings → Process Model → Identity

В IIS 6 пользователь по умолчанию – Network Service. В IIS 7+ в качестве пользователя по умолчанию (если иное не определено в Application Pool Defaults) выступает специальное понятие ApplicationPoolIdentity, которое означает, что для каждого пула с такой настройкой будет создан специальный пользователь в группе IIS AppPool, имя которого cовпадает с названием пула.

Олицетворение

  • По умолчанию любой поток из пула работает под тем же пользователем, что и сам пул, но возможно включение механизма олицетворения.
  • Для ASP.NET-приложений олицетворение по умолчанию выключено и настраивается в web.config.
  • Для ASP-приложений олицетворение всегда включено.
  • Если олицетворение включено, то потоку назначаются реквизиты пользователя, аутентифицированного IIS.

Аутентификация IIS

Настраивается на уровне сайта(приложения) IIS

  • в IIS 6: Имя сайта(приложения) → Properties → Directory Security → Authentication and Access Control → Edit
  • в IIS 7: Имя сайта(приложения) → IIS → Authentication

Анонимная аутентификация имеет приоритет над Windows-аутентификацией, если включены обе.

Анонимная аутентификация

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

Имя пользователя по умолчанию:

  • IIS 6: IUSR_ComputerName
  • IIS 7+: IUSR (в отличие от IUSR_ComputerName не требует пароля и не имеет привязки к конкретному компьютеру)

Анонимный пользователь может быть изменен:

  • в IIS 6 на той же странице, где настраивается аутентификация

  • в IIS 7+ в свойствах анонимной аутентификации

Аутентификация Windows

Если пользователь находится внутри домена и использует бразуер, поддерживающий протокол аутентификации Kerberos (IE), то он будет автоматически аутентифицирован под своей учетной записью. В противном случае Windows попросит ввести логин и пароль. В любом случае при успешном прохождении Windows-аутентификации и включенном механизме олицетворения, веб-приложение будет запущено от имени аутентифицированного пользователя.

Группа IIS_IUSRS

В IIS 7.0 появилась группа IIS_IUSRS, в которую автоматически включаются все пользователи, под которыми запущены Application Pools. Пользователь IUSR в эту группу не входит!

О веб-приложениях

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

  1. Под каким пользователем работает Application Pool?
  2. Включен ли механизм олицетворения?
  3. Если включен, то какие настройки аутентификации приложения в IIS?

Когда все настройки по умолчанию

  • ASP.NET-приложение выполняется под пользователем NETWORK SERVICE для IIS 6 и IIS AppPool\<Название пула> для IIS 7+
  • ASP-приложение выполняется под аутентифицированным пользователем IIS
    • IUSR (IIS 7+) или IUSR_MachineName (IIS 6) - для анонимной аутентификации
    • Windows-пользователь - для Windows аутентификации

Отличия модели IIS 5

IIS 5 входит в состав Windows XP и Windows Server 2003.

В отличие от IIS 6 ASP.NET-приложения всегда выполняются в отдельном процессе (aspnet_wp.exe), который запускается от имени пользователя ASPNET. Соответственно ASP.NET-приложения могут работать либо под ним, либо под аутентифицированным пользователем IIS в случае включенного механизма олицетворения.

ASP-приложения в зависимости от настройки Имя сайта(приложения) → Properties → Home Directory → Application Protection могут запускаться в одном из 3 режимов:

  • Low - ASP-приложения выполняются в самом процессе IIS - inetinfo.exe, который по умолчанию запускается под пользователем SYSTEM
  • Medium(Pooled) - Пул ASP-приложений выполняется отдельном процессе dllhost.exe, который умолчанию запускается под пользователем IWAM_ComputerName
  • High(Isolated) - ASP-приложение выполняется в отдельном процессе dllhost.exe

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

Порождение дочерних процессов

Следует иметь в виду, что если порождается дочерний процесс, например с помощью System.Diagnostics.Process.Start, то он не учитывает олицетворение и по умолчанию запускается от имени пользователя, под которым запущен родительский процесс.

Discussion

Enter your comment
 
admin/user_web_application.txt · Last modified: 2013/02/01 13:49 by celutp