Как назначить разрешения учетной записи ApplicationPoolIdentity

264

В IIS 7 в Windows Server 2008 пулы приложений можно запускать как учетную запись «ApplicationPoolIdentity» вместо учетной записи NetworkService.

Как назначить разрешения для этой учетной записи «ApplicationPoolIdentity». Он не отображается как локальный пользователь на машине. Он нигде не отображается как группа. Ничто удаленно не похоже нигде. Когда я просматриваю локальных пользователей, группы и встроенные учетные записи, он не появляется в списке и ничего подобного не появляется в списке. Что происходит?

Я не единственный, кто сталкивается с этой проблемой: см. Пример проблемы с ApplicationPoolIdentity в IIS 7.5 + Windows 7 .


«К сожалению, это ограничение средства выбора объектов в Windows Server 2008 / Windows Vista - так как несколько человек уже обнаружили его, вы все равно можете манипулировать списком ACL для идентификации пула приложений, используя такие инструменты командной строки, как icacls ».

Triynko
источник

Ответы:

290

Обновление: оригинальный вопрос был о Windows Server 2008, но решение проще для Windows Server 2008 R2 и Windows Server 2012 (и Windows 7 и 8). Вы можете добавить пользователя через пользовательский интерфейс NTFS, введя его напрямую. Имя имеет формат IIS APPPOOL \ {имя пула приложений}. Например: IIS APPPOOL \ DefaultAppPool.

IIS APPPOOL\{app pool name}

Примечание: согласно комментариям ниже, есть две вещи, о которых нужно знать:

  • Введите строку непосредственно в поле «Выбрать пользователя или группу», а не в поле поиска.
  • В доменной среде вам нужно сначала установить Location на ваш локальный компьютер.

Ссылка на статью Microsoft Docs: удостоверения пула приложений> защита ресурсов

Исходный ответ: (для Windows Server 2008) Это отличная функция, но, как вы упомянули, она еще не полностью реализована. Вы можете добавить идентификатор пула приложений из командной строки с помощью чего-то вроде icacls, а затем вы можете управлять им из графического интерфейса. Например, запустите что-то вроде этого из командной строки:

icacls c:\inetpub\wwwroot /grant "IIS APPPOOL\DefaultAppPool":(OI)(CI)(RX)

Затем в проводнике Windows перейдите в папку wwwroot и измените разрешения безопасности. Вы увидите, что выглядит как группа (значок группы) с именем DefaultAppPool. Теперь вы можете редактировать разрешения.

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

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

Примечание. Если вам не удается найти пользователя пула приложений, проверьте, запущена ли служба Windows под названием Application Host Helper Service. Это сервис, который отображает пользователей пула приложений на учетные записи Windows.

Скотт Форсайт - MVP
источник
1
Это своего рода странный зверь, поскольку он не похож на группу, в которой пользователь живет в группе, и не похож на учетную запись компьютера и учетную запись пользователя, которые полностью отличаются друг от друга. Учетная запись пула приложений «перекрывает» пользователя удостоверения пула приложений. Например, у вас может быть 5 пулов приложений, использующих сетевую службу, и 5 других, использующих настраиваемые учетные записи, но это 10 разных учетных записей пула приложений, управляемых системой. Преимущества замечены с папкой c: \ inetpub \ temp \ appPools, где она управляется автоматически и полностью блокирует систему. IIS использует их хорошо. Наше использование папок не является обязательным.
Скотт Форсайт - MVP
29
Обратите внимание, что если вы введете «IIS APPPOOL \ DefaultAppPool» непосредственно в «Выбор пользователя или группы» (вместо того, чтобы искать его) при редактировании разрешений, оно будет распознаваться очень хорошо (проверено на Win7 x64 и Win2k8 R2 x64).
Милан Гардиан
5
Вы правы для Win7 и Win2k8 R2. Это не было реализовано в Win2k8 RTM, но есть в R2.
Скотт Форсайт - MVP
9
Наконец-то получилось: если вы набираете имя пула приложений напрямую, как говорит @Milan Gardian выше, и меняете поле местоположения на локальный компьютер, то это работает
Ciaran Bruen
4
Большое спасибо за «две вещи, о которых нужно знать». Я споткнулся обоими из них, и это было ясное и простое объяснение проблем и того, как достичь того, что мне нужно. Это просто позор, ни одна из документации MSDN не была такой ясной.
Ян Грейнджер
22

Вы должны убедиться, что в From this locationполе установлено значение, local machineа не домен.

У меня была та же проблема, и как только я изменил, она работала нормально.

Алан
источник
4

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

Джимбо
источник
3

Прочитав ответ @Scott Forsyth - MVP, я попытался перезапустить службу поддержки приложений. Это решило проблему для меня.

Роджер
источник
0

Я работал под управлением WS8 R2, и я не мог добавить IIS APPPOOL\DefaultAppPoolчерез Windows Explorer. Единственный способ, которым это работало, было через командную строку:

cacls [ПУТЬ ФАЙЛА] / T / E / G "APPPOOL IIS \ DefaultAppPool": C

Денис Це
источник
2
Странно, я должен был сделать «IIS AppPool \ DefaultAppPool» для его принятия. Обратите внимание на смешанный регистр - все прописные буквы, как я делал в первый раз, не были приняты из графического интерфейса.
Джефф МакДжанкин
0

Если этот вопрос о том, как выполнить _sp_send_dbmail в базе данных msdb (используя хранимую процедуру SQL Send Database Mail в msdb), здесь есть некоторые обходные пути. Добавьте имя пользователя приложения .net вашей базы данных (которое определяется в строке подключения в приложении .net) к пользователю msdb с членством в роли DatabaseMailUserRole.

Мухамад Фариед
источник