Удаление привилегий в C++ в Windows
Возможно ли для приложения C++, работающего в Windows, сбросить привилегии во время выполнения?
Например, если пользователь запускает мое приложение от имени администратора, но нет причин запускать мое приложение от имени администратора, могу ли я каким-то образом отказаться от прав администратора?
Короче говоря, я хотел бы написать код в функции main(), который отбрасывает ненужные мне привилегии (например, доступ на запись в каталог Windows).
1 ответ
Да, вы можете использовать AdjustTokenPrivileges, чтобы удалить ненужные и опасные привилегии из вашего токена. Вы можете либо отключить, если не нужно сразу (привилегия может быть включена позже), либо полностью удалить привилегию из своего токена.
Вы также можете создать токен с ограничениями с помощью CreateRestrictedToken и перезапустить приложение, работающее с этим токеном с ограничениями. CreateRestrictedToken может использоваться для отключения привилегий и удаления групп (например, группы администраторов) из токена.
Возможно, вы сможете использовать AdjustTokenGroups для удаления группы администраторов из маркера вашего запущенного процесса, но я никогда не пробовал это на уже запущенном процессе.
Обратите внимание, что доступ для записи в каталог Windows не распространяется на привилегию. Ресурсы в системе имеют ACL, которые определяют, кто имеет доступ. Система и администраторы имеют доступ на запись в каталог Windows.