我用的是Fedora 33我被一个简单的事实弄糊涂了。
如果我试图运行一个没有安装的程序,dnf会搜索repos并建议安装它。如果我回答是,它将被安装,我能够正常使用它。
如果我尝试安装该软件(dnf install <package>),就会被要求提供超级用户密码。
对于我的例子,我尝试安装“护林员”的两种方式,我似乎找不到区别。两者都位于同一个bin目录中,并且都在进程中的用户下运行。
我的问题是:如果可以简单地安装没有密码的软件,为什么dnf要它呢?
发布于 2020-11-13 06:23:15
在您描述的场景中,“您”没有安装已安装的包-- PackageKit服务(它已经作为root用户运行)正在代表您进行安装。PackageKit使用PolicyKit来确定是否允许安装软件包--如果不希望非特权用户能够安装软件,则可以更改PolicyKit策略以不允许安装软件。PackageKit存在的原因之一是,用户不必在使用的任何发行版(无论是dnf、yum、apt、pacman还是其他什么)上知道包管理系统的细节--他们只需要求PackageKit安装软件包,PackageKit就可以处理包管理和安装的细节。当您手动使用dnf在Fedora上安装包时,您直接与包管理系统交互-- PackageKit并不代表您执行此操作--这就是为什么您需要以根用户身份运行(或提供根密码)才能在该级别上安装包。但是,作为普通用户,您可以使用pkcon install <packagename>要求PackageKit代表您进行安装(只要在PolicyKit中配置的系统策略允许您这样做),而不必以根用户身份运行(通过su或sudo等),也不必提供根密码。
如果您试图在命令行上运行您尚未安装的包所提供的某些内容,您所谈论的行为,即提示您安装包的行为,是由一个名为"PackageKit-命令未找到“的包驱动的。我绝对讨厌这种行为,在任何新安装的Linux系统上,我做的第一件事就是删除PackageKit-command-not-found包,这样就不会这样做.
发布于 2020-11-13 06:17:17
当您键入一个未安装的程序名时,它不是dnf安装它,而是PackageKit和它的找不到命令插件(包PackageKit-command-not-found)。PackageKit使用PolicyKit来决定是否在执行特权任务时询问密码,并且本地活动管理员用户不需要为包安装提供密码(这不是Fedora特有的特性,它来自usptream,参见这次FESCO讨论)。这也是为什么在从GNOME软件等GUI工具安装或更新包时不需要提供密码的原因,GNOME软件也使用PackageKit作为后端。
您也可以从命令行使用PackageKit,命令是pkcon,pkcon install <package>也不会询问密码。
为什么dnf需要sudo?它根本不使用PolicyKit。
https://unix.stackexchange.com/questions/619397
复制相似问题