提升的 Dotnet 命令访问权限

软件开发最佳做法指导开发人员编写需要最少特权的软件。 但是,由于作系统规则,某些软件(如性能监视工具)需要管理员权限。 以下指南介绍了使用 .NET Core 编写此类软件时支持的方案。

可以运行以下提升的命令:

  • dotnet tool 命令,例如 dotnet 工具安装
  • dotnet run --no-build
  • dotnet-core-uninstall

不建议运行其他提升的命令。 具体而言,我们不建议使用带有 MSBuild 的命令进行权限提升,例如 dotnet restoredotnet builddotnet run。 主要问题是在发出 dotnet 命令后,用户来回转换根帐户与受限帐户之间的权限管理问题。 你可能会发现,作为一个受限的用户,你无权访问根用户生成的文件。 有办法解决这种情况,但最初没有必要去考虑这些办法。

只要不在root用户和受限帐户之间来回切换,你就可以以root身份执行命令。 例如,Docker 容器默认作为根运行,因此它们具有此特征。

全局工具安装

以下说明演示了安装、运行和卸载需要提升权限来执行的 .NET 工具的建议方法。

安装工具

如果文件夹 %ProgramFiles%\dotnet-tools 已存在,请执行以下作以检查“Users”组是否有权写入或修改该目录:

  • 右键单击 %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 选项和上述全局工具指南。

开发过程中海拔的上升

在开发过程中,可能需要提升的访问权限来测试应用程序。 例如,此方案适用于 IoT 应用。 建议在不进行权限提升的情况下构建应用程序,然后在具有权限提升的状态下运行该应用程序。 有一些模式,如下所示:

  • 使用生成的可执行文件(它提供最佳的启动性能):

    dotnet build
    sudo ./bin/Debug/netcoreapp3.0/APPLICATIONNAME
    
  • 使用 dotnet run 命令,加上 —no-build 标志,以避免生成新的二进制文件。

    dotnet build
    sudo dotnet run --no-build
    

另请参阅