Может ли процесс Windows .Net потерять права администратора для себя во время работы? - PullRequest
1 голос
/ 01 апреля 2019

Этот вопрос закрыт [ Отбрасывание прав процесса под окнами ], но он очень старый, и решение не было точным соответствием.Я надеюсь найти современный ответ, который мог бы работать непосредственно с C # с BCL .Net Framework.

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

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

Конечно, в качестве консольного приложения может быть запущен второй процесс без прав администратора, но дляслужба, мне может понадобиться две службы.

Я надеюсь, что есть способ в рамках одного рабочего процесса.

Ответы [ 3 ]

0 голосов
/ 01 апреля 2019

Для файла конфигурации вы можете попросить установщика создать подкаталог config и открыть для него разрешения, чтобы служба имела права на запись в него.Для частей обновления не рекомендуется, чтобы MSI устанавливал кучу файлов, а затем самостоятельно обновлял приложение самостоятельно.Это нарушение разделения интересов с точки зрения установщика.Если вы должны сделать это, я предлагаю установить более новые биты в его собственную папку (также предоставленные разрешения установщиком) и использовать некоторое время IoC / DI времени выполнения, чтобы использовать эти файлы вместо тех, которые установлены установщиком.

Существуют также способы создания MSI, чтобы его можно было обновить, не требуя прав администратора.

В противном случае возможны также две службы.Один для управления историей обновления / конфигурации, а другой - для бизнес-обработки.Некоторые сторонние структуры существуют для такого типа ситуации.Я знаю, как их написать, но решил не использовать их в своих консультациях из соображений безопасности / ответственности.

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

0 голосов
/ 25 апреля 2019

Очевидно, что в Windows невозможно выполнить один процесс.

Вот как это будет работать в качестве обходного пути с двумя службами.

Настройка двух сервисов:

  • Сервис 1 - Режим запуска. Запускается при запуске Windows. Имеет Системные права. Делает то, что ему нужно, затем запускает Service 2, затем останавливается.
  • Сервис 2 - Текущий режим. Запускается Service 1 и имеет очень ограниченные права (возможно, Network Service).

Обе службы могут быть установлены с MSI один раз.

Фон

Существует два способа иметь два режима работы для всего решения - запуск и продолжающийся:

  1. Одна программа может работать в двух режимах с разными аргументами командной строки; или
  2. Может быть две отдельные программы EXE.

Кроме того, программе startup может потребоваться отправить информацию о состоянии на ongoing, и есть несколько способов сделать это (это может быть через канал IPC памяти, локальный TCP и т. Д.).

0 голосов
/ 01 апреля 2019

Обходной путь - вы можете использовать AppDomains , чтобы создать песочницу с более низким уровнем доверия.

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

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

Примечание: в DotNetCore нет AppDomain - у них другой подход, при котором «сборки» можно загружать и выгружать, но вам нужно быть осторожным, чтобы не ссылаться на какие-либо объекты из ссылочной сборки.

...