Обновить текущий профиль пользователя - PullRequest
1 голос
/ 11 августа 2011

... Я хочу предоставить пользователю временные права администратора с помощью инструмента ac #.Поэтому я добавляю пользователя в группу пользователей-администраторов (эту работу выполняет фоновая служба, работающая под учетной записью привилегированной службы).Однако изменения вступают в силу только в новых сеансах (после выхода из системы / повторного входа в систему), что неудобно.Есть ли способ обновить текущий профиль пользователя?

Я пробовал несколько способов:

  • через .net Process.Start со свойством LoadUserProfile, установленным в true.
  • Следующая попытка была выполнена через WinI Api-функцию LoadUserProfile.
  • Другим способом было выдать себя за пользователя с помощью .net Impersonation

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

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

Было бы здорово, если есть другой вариант?Может быть, есть инструмент, который может это сделать?


Хорошо, я повторно регистрирую пользователя, а затем использую новый токен в сочетании, например, с CreateProcessAsUser для запуска нового процесса.используя новый токен.Есть ли способ назначить текущей среде Windows новый токен и, следовательно, все действия, которые пользователь выполняет в Windows, используют этот новый токен?В противном случае я мог бы использовать некоторые другие инструменты, такие как lsrunas, чтобы открыть процесс в новом контексте и избежать вызовов winapi.

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

1 Ответ

2 голосов
/ 11 августа 2011

При входе в Windows создается токен безопасности, в котором разрешаются все членства в группах (включая вложенные). Маркер содержит список идентификаторов безопасности (идентификаторов безопасности), к которым принадлежит пользователь. Первый SID - это собственный идентификатор пользователя, а затем включаются любые группы и роли (такие как интерактивный вход в систему, все и т. Д.). Это означает, что членство в группе не нужно искать в пользовательской БД - возможно, на сервере Active Directory - каждый раз, когда выполняется контроль доступа. Вместо этого ACL (список контроля доступа) объекта (например, файла) проверяется по токену.

Чтобы обновить членство в группе, необходимо создать новый токен. Либо вы можете выйти из системы, а затем снова войти в нее, как вы ее описали, или вы должны выполнить другую регистрацию с помощью LogonUser для того же пользователя. Однако эта функция недоступна для обычного пользователя.

Я думаю, что все сводится к поиску другого дизайна. Добавление и удаление пользователя из группы администраторов динамически выглядит странно с точки зрения безопасности. Есть ли другой способ предоставить пользователю доступ к необходимым ресурсам? Можете ли вы выполнить реальную работу из службы Windows, работающей под учетной записью LocalSystem?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...