#c# #least-privilege
#c# #наименьшие привилегии
Вопрос:
Я хочу запустить свою программу под ограниченной учетной записью пользователя, но с правами администратора в Windows XP.
Я не могу найти ответ. Я думаю, что могу использовать два способа:
- Запустите мою программу другим способом, например, программой или сервисом
- Запустите мою функцию с помощью какого-нибудь метода, такого как PrincipalPermission space или что-то вроде этого
Но я не могу решить эту проблему.
Комментарии:
1. Это зависит от пользователя. У вас нет контроля над ней.
2. что именно делает ваше приложение, которому нужны права администратора?
3. Дорогой Дэвид… я хочу, чтобы моя программа могла получить доступ ко всем ресурсам системы… мои пользователи входят в систему в качестве ограниченного пользователя, и моя программа контролирует и помогает им….
Ответ №1:
Вы смотрели на команду «runas»? Например:
C:> runas /noprofile /netonly /user:MYCOMPUTERtestuser "C:Program FilesMy Special ProgramProgram.exe"
Комментарии:
1. да .. я вижу это решение.. но в этом решении у моей учетной записи администратора должен быть пароль, и если я хочу изменить этот пароль, я должен что-то изменить и отправить новый пароль в мою программу.. я хочу, чтобы моей программе не требовался пароль администратора для входа или чего-либо еще…
Ответ №2:
Я хочу запустить свою программу под ограниченной учетной записью пользователя, но с правами администратора.
Это невозможно сделать. Ограниченный пользователь не имеет прав администратора. Вам нужно запустить ее от имени администратора, например, с помощью runas.
Комментарии:
1. я думаю, что это хорошее решение для моей проблемы… я использую сервис для запуска своей программы, но я все еще не могу запустить приложение с графическим интерфейсом с помощью сервиса…
Ответ №3:
Один из способов решить эту проблему — разделить вашу программу на две части. Одна часть как служба Windows, а другая как пользовательское приложение. Вы можете настроить службу для запуска как сетевую службу, локальную службу или локальную систему в зависимости от необходимого вам уровня доступа. Все, что требует прав администратора, будет выполнено службой Windows. Пользовательское приложение может отвечать за отображение пользовательского интерфейса и других подобных вещей. Вам также необходимо иметь какой-то IPC (межпроцессное взаимодействие) между вашими приложениями, чтобы облегчить это.
Комментарии:
1. запускать от имени localsystem — плохая практика
2. @David, не обязательно. зависит от того, что вы хотите сделать. кроме того, вы можете запустить учетную запись службы от имени кого хотите. рекомендуется использовать учетную запись, которая предоставляет вам минимальное количество необходимых привилегий.
3. Запускать sql server как локальную систему — плохая практика, потому что ему не нужны все привилегии и он может нормально работать как сетевая служба. Я не знаю, что его приложение должно делать с системой, поэтому не могу сказать. Вы можете зайти в свой CP-> Services и увидеть множество служб, работающих от имени локальной системы, и они делают это по определенной причине, а не просто из-за плохой практики.
4. @Can: Как только приложение получает доступ к локальной системе, все ставки отменяются. Microsoft (и многие исследователи безопасности) рекомендуют запускать приложение от имени ограниченного пользователя и писать программное обеспечение от имени ограниченного пользователя, потому что запуск от имени учетной записи административного типа просто опасен.
5. @0A0DA Я полностью осознаю это. Как я уже сказал, мы не знаем, что хочет сделать приложение. Возможно, для этого действительно нужен низкоуровневый доступ к системе. Возможно, нет. Это зависит от того, какие операции приложение хочет выполнять в системе. Я упомянул локальную систему в качестве примера. Я обновил свой ответ, чтобы отразить это.