Безопасный вызов команд с правами администратора под Windows - PullRequest
0 голосов
/ 23 марта 2009

Мне нужно пунктуально вызывать команды (net share, netsh ...), требующие прав администратора от программного обеспечения, запускаемого учетной записью пользователя.

В варианте Unix я установил бы вместе с моим программным обеспечением пользовательского режима небольшой, осторожно написанный скрипт с битом suid, который вызывал бы необходимые команды.

Какова эквивалентная лучшая практика под Microsoft Windows? Меня особенно заинтересовало бы дружественное к Vista, но совместимое с XP решение.

Ответы [ 3 ]

1 голос
/ 23 марта 2009

Как говорит BobbyShaftoe, каноническим способом решения этой проблемы в Windows является использование службы, поскольку службы по умолчанию выполняются под учетной записью LocalSystem. Любой другой метод должен войти в систему как пользователь-администратор, что потребует учетных данных.

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

То же решение будет хорошо работать в XP.

1 голос
/ 23 марта 2009

Одним из способов может быть служба, которая работает с административными привилегиями. Затем из вашего приложения скажите службе, чтобы она вызывала эти команды. Я предполагаю, что вы не хотите, чтобы пользователь был обязан знать учетные данные администратора.

0 голосов
/ 23 марта 2009

Вы можете использовать функции WinAPI LogonUser и CreateProcessAsUser для программного запуска нового процесса с различными правами доступа.

Для вашего сценария я бы написал пакетный скрипт с необходимыми командами net и, если необходимо, создал новый процесс cmd.exe, который получает имя скрипта в качестве параметра.

Это решение требует, чтобы вы каким-то образом хранили учетные данные, используемые в LogonUser, в вашем приложении, так что могут возникнуть угрозы безопасности.

...