Процесс (process) - это объект, который создается операционной системой, когда пользователь запускает приложение. Процессу выделяется отдельное адресное пространство, причем это пространство физически недоступно для других процессов. Процесс запускается от имени определенного пользователя. Список запущенных процессов можно посмотреть в Task Manager.
Для каждого процесса операционная система создает один главный поток (thread), который является потоком выполняющихся команд. При необходимости главный поток может создавать другие потоки, пользуясь для этого программным интерфейсом ОС.
Олицетворение (impersonation) - механизм, позволяющий назначить текущему потоку реквизиты некоторого пользователя, что позволяет выполнять код от его имени. Данный механизм часто используется в web-приложениях, когда один и тот же поток обслуживает запросы от различных пользователей.
В модели IIS 6+ процессом, в котором выполняются веб-приложения является один из Application Pool (в Task Manager - w3wp.exe). Каждый Application Pool представляет собой пул потоков, который в общих чертах работает так:
Application Pool (как и любой процесс) запускается от имени определенного пользователя. Посмотреть/настроить можно
В IIS 6 пользователь по умолчанию – Network Service. В IIS 7+ в качестве пользователя по умолчанию (если иное не определено в Application Pool Defaults) выступает специальное понятие ApplicationPoolIdentity, которое означает, что для каждого пула с такой настройкой будет создан специальный пользователь в группе IIS AppPool, имя которого cовпадает с названием пула.
Настраивается на уровне сайта(приложения) IIS
Анонимная аутентификация имеет приоритет над Windows-аутентификацией, если включены обе.
Фактически аутентификации пользователя не происходит, а все запросы выполняются от имени специального пользователя. В случае включенного механизма олицетворения, от его имени и будет запущено веб-приложение.
Имя пользователя по умолчанию:
Анонимный пользователь может быть изменен:
Если пользователь находится внутри домена и использует бразуер, поддерживающий протокол аутентификации Kerberos (IE), то он будет автоматически аутентифицирован под своей учетной записью. В противном случае Windows попросит ввести логин и пароль. В любом случае при успешном прохождении Windows-аутентификации и включенном механизме олицетворения, веб-приложение будет запущено от имени аутентифицированного пользователя.
В IIS 7.0 появилась группа IIS_IUSRS, в которую автоматически включаются все пользователи, под которыми запущены Application Pools. Пользователь IUSR в эту группу не входит!
Веб-приложение в отличие от Windows-приложения является виртуальным. В рамках одного процесса может работать много веб-приложений. Когда мы говорим от том, под каким пользователем работает веб-приложение, фактически мы рассматриваем следующие вещи:
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 режимов:
В ASP-приложениях, запущенных на IIS 5 (так же как и на IIS 6) всегда работает олицетворение, так что они работают под аутентифицированным пользователем IIS.
Следует иметь в виду, что если порождается дочерний процесс, например с помощью System.Diagnostics.Process.Start, то он не учитывает олицетворение и по умолчанию запускается от имени пользователя, под которым запущен родительский процесс.
Discussion