В чем разница между уровнями выполнения «asInvoker» и «самый высокий доступный»? - PullRequest
34 голосов
/ 29 декабря 2011

Мне было интересно, какая разница между встраиванием

<requestedExecutionLevel  level="asInvoker" uiAccess="false" />

и

<requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

в манифесте вашего приложения.

Ответы [ 2 ]

34 голосов
/ 29 декабря 2011

Это , описанное в MSDN :

По сути, «asInvoker» будет использовать настройки безопасности пользователя по умолчанию.Он описывается как «Приложение запускается с тем же токеном доступа, что и родительский процесс». Это означает, что в качестве вызывающего процесса используется тот же токен безопасности, который обычно представляет собой оболочку рабочего стола (или процесс, который запускает его, если вы запускаетеприложением из другой программы).

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

В общем, вы захотите использовать «asInvoker», если у вас нет особых причин запрашивать больше прав.

2 голосов
/ 28 апреля 2019

Хороший пример «наивысший доступный» - это член группы Операторы резервного копирования .

Начиная с Windows Vista, это не просто «Администраторы» , которые лишены своих привилегий и получают сплит-токен .Система проверяет, являетесь ли вы:

  • членом определенных групп
  • с определенными привилегиями

Хорошим примером "наивысшегодоступно " - это кто-то, кто является членом группы Операторы резервного копирования .Если вы являетесь членом группы Backup Operators , ваш токен безопасности фильтруется точно так же, как и для членов группы Administrators .

UAC запускаетсяработает, когда пользователь входит в систему.Во время интерактивного входа в систему локальный орган безопасности (LSA) принимает учетные данные пользователя и выполняет первоначальный вход в систему, оценивая токен пользователя, чтобы определить, имеет ли он то, что определено как повышенные привилегии.Если LSA определяет, что пользователь имеет повышенные привилегии, он отфильтрует этот токен и затем выполнит второй вход в систему с отфильтрованным токеном.

Контроль учетных записей пользователей определяетгруппы, перечисленные в на рисунке 3 как имеющие повышенные привилегии.Поэтому, если LSA замечает, что любое из этих членств или привилегий в группе указано в начальном токене пользователя, фильтрованный токен будет создан во время интерактивного входа в систему с использованием версии API CreateRestrictedToken, а полностью привилегированный токен будет сохранен LSA.,Эти два токена связаны, и полностью отобранный токен можно получить из отфильтрованного токена с помощью API GetTokenInformation с новым типом информации TokenLinkedToken.Тем не менее, обратите внимание, что UAC не влияет на сервисный, сетевой или пакетный вход в систему.

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

  • SeCreateTokenPriv­i­lege
  • SeTcbPrivilege
  • Se­Take­Owner­ship­Priv­ilege
  • Se­Back­up­Priv­i­lege
  • Se­Re­store­Privilege
  • Se­De­bug­Priv­ilege
  • Se­Im­personatePrivilege
  • Se­Re­labelPrivilege

Если я создаю резервное копирование пользователь, мне нужно запустить с возвращенными мне привилегиями backup :

  • SeBackupPrivilege
  • SeRestorePrivilege

Это означает, что мне не нужно (или не хочется) работать как полноценный Администратор .Я хочу запустить с моим максимальным доступным набором разрешений назад.

Здесь начинают появляться ваши три варианта для requiredExecutionLevel :

  • asInvoker : приложение будет работать с теми же разрешениями, что и процесс, который его запустил.Приложение можно повысить до более высокого уровня разрешений, выбрав «Запуск от имени администратора».

  • highAvailable : приложение будет работать с максимально возможным уровнем разрешений.Если пользователь, запускающий приложение, является членом группы «Администраторы», этот параметр совпадает с параметром requireAdministrator.Если максимальный доступный уровень разрешений выше, чем уровень процесса открытия, система запросит учетные данные.

  • requireAdministrator : приложение будет работать с правами администратора,Пользователь, запускающий приложение, должен быть членом группы «Администраторы».Если процесс открытия не выполняется с правами администратора, система запросит учетные данные.

Бонусное чтение

...