使用 dnf 安装时 sudo 的必要性

sab*_*bak 6 root sudo dnf

我正在使用 Fedora 33。我可能对一个简单的事实感到困惑。

如果我尝试运行未安装的程序,dnf 将搜索 repos 并建议安装它。如果我回答是,它将被安装并且我可以正常使用它。

如果我要尝试安装该软件 ( dnf install <package>),则会要求我提供超级用户密码。

对于我的示例,我尝试以两种方式安装“游侠”,但似乎找不到区别。两者都位于同一个 bin 目录中,并且都在进程中的用户下运行。

我的问题如下:如果可以在没有密码的情况下简单地安装软件,为什么 dnf 会要求它?

pat*_*ron 10

在您描述的场景中,“您”没有安装已安装的包 - PackageKit服务(已经以 root 身份运行)正在代表您进行安装。PackageKit 使用 PolicyKit 来确定允许或不允许谁安装软件包 - 如果您不希望非特权用户能够安装软件,您可以更改 PolicyKit 策略以禁止它。PackageKit 存在的原因之一是用户不必知道正在使用的任何发行版上的包管理系统的详细信息(无论是dnf, or yum, or apt, orpacman,或其他) - 他们只需要让 PackageKit 安装包,PackageKit 处理该特定发行版上包管理和安装的细节。当您dnf在 Fedora 上手动使用安装包时,您是直接与包管理系统交互 - PackageKit 不会代表您执行此操作 - 这就是您需要以 root 身份运行(或提供 root 密码)的原因在该级别安装软件包。但是,作为普通用户,您可以使用pkcon install <packagename>请求 PackageKit 代表您进行安装(只要 PolicyKit 中配置的系统策略允许您这样做),而不必以 root 身份运行(通过susudo等)。 ),或提供 root 密码。

您正在谈论的行为,如果您尝试在命令行上运行由您尚未安装的软件包提供的某些内容,则会提示您安装软件包,这是由名为“ PackageKit-command- ”的软件包驱动的。未找到”。我绝对讨厌这种行为,我在任何新安装的 Linux 系统上做的第一件事就是删除PackageKit-command-not-found软件包,所以这没有完成......

  • “PackageKit 存在的原因之一是用户不必知道包管理系统的细节”——天哪。这是一个多标准抽象标准。很快就会有两个。然后你将有一个在 PackageKit 和 OtherPackageKit 之间抽象的东西。 (3认同)

Voj*_*fny 5

当您键入未安装的程序名称时,它不会dnf安装它,而是安装PackageKit和它的命令未找到插件(package PackageKit-command-not-found)。PackageKit 使用 PolicyKit 来决定在执行特权任务时是否要求输入密码,并且本地活动管理员用户不需要为软件包安装提供密码(这不是 Fedora 特定功能,它来自 usptream,请参阅此 FESCO 讨论)。这也是为什么在从 GUI 工具(例如也使用 PackageKit 作为后端的 GNOME Software)安装或更新软件包时不需要提供密码的原因。

您还可以从命令行使用 PackageKit,该命令pkconpkcon install <package>不会要求输入密码。

以及为什么dnf需要sudo?它根本不使用PolicyKit。