[Share Experiences] 以root权限运行命令配置无需输入密码(sudo和pkexec)
Tofloor
default avatar
Maicss
deepin
2021-12-18 20:27
Author

一般来说,想要以root权限运行命令可以借助sudo 和 pkexec

要想省略输入密码的步骤,需要分别配置他们。

sudo可针对用户进行统一管理,而pkexec可以针对每一个命令配置,并且pkexec是支持图形界面授权的。

配置sudo

可以通过命令sudo visudo来编辑sudo的配置文件。

在该文件末尾添加如下行:

maicss ALL=(ALL:ALL) NOPASSWD:ALL

一定要在末尾(%sudo那一行的后边),否则无效。

保存后maicss用户在使用sudo时就不会要求输入密码了。

配置pkexec

pkexec的策略文件存储于:/usr/share/polkit-1/actions/中,要实现修改某程序的策略,需要为其添加策略文件(可以复制一个其他程序的然后进行修改)。

设置提示信息

(这里我是在Fedora下操作的,使用了dnf命令作为例子,大家可以根据需要配置修改。)

如要设置dnf命令的提示信息,要新增一个配置文件,名为:org.maicss.dnf.policy原则上这个名字需要和对应的程序ID相同,但是我们可以随便起一个,后缀名为 .policy 是固定的。

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd"> <policyconfig> <vendor>Dnf Package Manager</vendor> <icon_name>x-package-repository</icon_name> <action id="org.maicss.dnf"> <description>要使用包管理器需要root权限</description> <message>要使用dnf命令进行包管理需要获得root权限</message> <defaults> <allow_any>auth_admin</allow_any> <allow_inactive>auth_admin</allow_inactive> <allow_active>auth_admin</allow_active> </defaults> <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/dnf</annotate> <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate> </action> </policyconfig>

其中一些重要信息说明:

  • 5行:设置该配置的名称,可以随便写。
  • 6行:图标名称,可能会在图形界面弹窗要求输入密码时显示。
  • 7行:这行要写ID,需要和文件名保持一致(不包括后缀名)。
  • 8行:说明,可以随便写。
  • 9行:消息,会在图形界面弹窗要求输入密码时显示。
  • 15行:可执行程序的路径,如果是命令,可以使用 whereis 命令获得其路径。
  • 16行:是否允许 GUI 打开 X 显示器。

设置无需密码

设置无需密码需要修改下面代码中的11-13行内容为yes,如下所示:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd"> <policyconfig> <vendor>Dnf Package Manager</vendor> <icon_name>x-package-repository</icon_name> <action id="org.maicss.dnf"> <description>要使用包管理器需要root权限</description> <message>要使用dnf命令进行包管理需要获得root权限</message> <defaults> <allow_any>yes</allow_any> <allow_inactive>yes</allow_inactive> <allow_active>yes</allow_active> </defaults> <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/dnf</annotate> <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate> </action> </policyconfig>

这时使用命令 pkexec dnf update 将不再弹出任何输入密码的提示,直接就可以运行。

Reply Favorite View the author
All Replies
Maicss
deepin
2021-12-18 20:33
#1

这个代码框竟然不显示行号,不过好在不多😂

Reply View the author
jjcui8595
deepin
Resources Team Moderator
2021-12-18 21:21
#2

收藏了

Reply View the author
pzm9012
Moderator
2021-12-18 22:26
#3

感谢分享

Reply View the author
sammy-621
deepin
2021-12-19 00:33
#4
It has been deleted!