C# - как запустить процесс от имени текущего пользователя, а не администратора?

MaxTraff

Client
Регистрация
16.06.2024
Сообщения
46
Благодарностей
22
Баллы
8
Процессы ZD*, PM запускаются от имени администратора, соответственно все порождаемые им процессы тоже стартуют от имени админа.

Как без ввода пароля запустить или понизить права запускаемому процессу (в моем случае команда в cmd.exe) до текущего пользователя/сесссии windows?

Может кто-то решил уже подобную проблему ранее?
 

Alex91

Активный пользователь
Регистрация
15.08.2024
Сообщения
118
Благодарностей
29
Баллы
28
Чтобы запустить процесс с пониженными правами в среде Windows, когда его родительский процесс (например, ZD* или PM) работает от имени администратора, можно воспользоваться следующими подходами:

Использование команды runas:
Команда runas позволяет запускать программы от имени другого пользователя. Однако в класическом варианте она требует ввода пароля. Вы можете создать скрипт или использовать планировщик задач для запуска команды от текущего пользователя, но это также может потребовать некоторых настроек.

Скрипты PowerShell:
Вы можете написать PowerShell-скрипт, который запускает программу с нужными правами.

powershell
Start-Process cmd.exe -Credential (Get-Credential)
В этом случае вам будет предложено ввести учетные данные. Если вы хотите избежать ввода пароля, это не самый подходящий вариант.

Смена контекста с помощью PsExec:
Утилита PsExec из пакета Sysinternals позволяет запускать процессы с измененными правами. Вы можете передать текущего пользователя и его учетные данные без необходимости ввода пароля.

Пример команды:

bash
psexec -u имя_пользователя -p пароль cmd.exe
Хотя этот метод подразумевает ввод пароля, если использовать файл учетных данных, то можно обойтись без ввода пароля вручную.

Создание задачи в планировщике:
Вы можете создать задачу в планировщике задач Windows, настроив её на исполнение от имени текущего пользователя и вызвать её с помощью командной строки:

powershell
schtasks /run /tn "Имя_задачи"
Использование утилит для снижения прав:
Некоторые утилиты из интернет-репозиториев могут помочь в снижении привилегий процессов. Однако их использование может быть небезопасным, и следует выбирать только проверенные инструменты.

Для доступа к процессам в режиме низких привилегий без ввода пароля под администрацией, к сожалению, могут быть сложности, так как это может быть связано с политиками безопасности Windows. Всегда следует быть осторожным при выполнении действий, которые могут снизить уровень безопасности системы.
 

Alex91

Активный пользователь
Регистрация
15.08.2024
Сообщения
118
Благодарностей
29
Баллы
28
Вон со голова электронная накидала... Пробуй ....
 

MaxTraff

Client
Регистрация
16.06.2024
Сообщения
46
Благодарностей
22
Баллы
8
Жесть, спрашиваешь у людей, а получаешь ответ от железки, даже не отфильтрованной человеком. Во что превращаются форумы...

Я нашел частинно готовый к ипользованию способ через CreateProcessWithToken ( GetShellWindow -> GetWindowThreadProcessId -> OpenProcessToken -> DuplicateTokenEx -> CreateProcessWithToken ), но токен через такую попу пиходится выдирать, что мне это не нравится, хотелось бы какой-то более элегантный и нативный способ. Очень странно, что на поверхности не лежит возможность понизить права до уже залогиненного юзера, от которого стартовал процесс с повышением прав...
 

Alex91

Активный пользователь
Регистрация
15.08.2024
Сообщения
118
Благодарностей
29
Баллы
28
Жесть, спрашиваешь у людей, а получаешь ответ от железки, даже не отфильтрованной человеком. Во что превращаются форумы...
Нигде не указано что вопрос был для людей...
Нигде не запрещено постить ответ от ИИ...
Поэтому что есть, увы и ах...
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)