Повышенные права доступа для команд dotnet

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

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

  • команды dotnet tool, например dotnet tool install;
  • dotnet run --no-build
  • dotnet-core-uninstall

Выполнять другие команды с повышенными правами не рекомендуется. В частности, мы не рекомендуем выполнять с повышенными правами команды, использующие MSBuild, например dotnet restore, dotnet build и dotnet run. Основная проблема связана с управлением разрешениями, когда пользователь переключается между привилегированной учетной записью и учетной записью с ограниченным доступом после выполнения команд dotnet. У пользователя с ограниченным доступом может не оказаться доступа к файлу, созданному привилегированным пользователем. Эту проблему можно разрешить, но лучше стараться ее избегать.

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

Установка глобального средства

Ниже описывается рекомендованный способ установки, запуска и удаления средств .NET, для выполнения которых требуется повышенный уровень прав.

Установка средства

Если папка %ProgramFiles%\dotnet-tools уже существует, выполните указанные ниже действия, чтобы проверить, имеет ли группа "Пользователи" разрешение на запись в нее или ее изменение.

  • Щелкните правой кнопкой мыши папку %ProgramFiles%\dotnet-tools и выберите пункт Свойства. Откроется диалоговое окно Общие свойства.
  • Перейдите на вкладку "Безопасность". В группе или именах пользователей проверка, имеет ли группа "Пользователи" разрешение на запись или изменение каталога.
  • Если группа "Пользователи" может производить запись в каталог или изменять его, используйте при установке средств другой каталог вместо dotnet-tools.

Чтобы установить средства, выполните в командной строке с повышенными привилегиями приведенную ниже команду. Во время установки будет создана папка dotnet-tools.

dotnet tool install PACKAGEID --tool-path "%ProgramFiles%\dotnet-tools".

Запуск глобального средства

Способ 1. Используйте полный путь в командной строке с повышенными привилегиями:

"%ProgramFiles%\dotnet-tools\TOOLCOMMAND"

Способ 2. Добавьте созданную папку в %Path%. Это нужно сделать только один раз.

setx Path "%Path%;%ProgramFiles%\dotnet-tools\"

Запустите средство с помощью команды:

TOOLCOMMAND

Удаление глобального средства

В командной строке с повышенными привилегиями введите следующую команду:

dotnet tool uninstall PACKAGEID --tool-path "%ProgramFiles%\dotnet-tools"

Локальные средства

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

Повышение прав во время разработки

Во время разработки вам может требоваться доступ с повышенными правами в целях тестирования приложения. Например, такое часто бывает в случае с приложениями Интернета вещей. Мы рекомендуем выполнять сборку приложения без повышенных прав, а затем запускать его с повышенными правами. Есть несколько подходов.

  • Использование созданного исполняемого файла (обеспечивает максимальную производительность при запуске):

    dotnet build
    sudo ./bin/Debug/netcoreapp3.0/APPLICATIONNAME
    
  • Использование команды dotnet run с флагом —no-build во избежание создания новых двоичных файлов:

    dotnet build
    sudo dotnet run --no-build
    

См. также