Answers:
PolicyKit更具可配置性,尽管pkexec
没有利用此可配置性。另外,pkexec
向用户显示将要启动的程序的完整路径,以使用户更加确定会发生什么。PolicyKit的所谓“策略”可用于设置更多的预付款设置。例如,是否应该记住密码。
我从pkexec
手册中得到的东西:
为了避免通过LD_LIBRARY_PATH或类似机制注入代码,将PROGRAM运行它的环境设置为最小的已知和安全环境。另外,PKEXEC_UID环境变量被设置为调用pkexec的进程的用户ID。结果,由于未设置$ DISPLAY环境变量,pkexec将不允许您以另一个用户身份运行X11应用程序。
关于更多信息,政策或行动的定义从pkexec
手册:
To specify what kind of authorization is needed to execute the program /usr/bin/pk-example-frobnicate as another user, simply write an action definition file like this <?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>Examples for the PolicyKit Project</vendor> <vendor_url>http://hal.freedesktop.org/docs/PolicyKit/</vendor_url> <action id="org.freedesktop.policykit.example.pkexec.run-frobnicate"> <description>Run the PolicyKit example program Frobnicate</description> <description xml:lang="da">Kør PolicyKit eksemplet Frobnicate</description> <message>Authentication is required to run the PolicyKit example program Frobnicate</message> <message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate</message> <icon_name>audio-x-generic</icon_name> <defaults> <allow_any>no</allow_any> <allow_inactive>no</allow_inactive> <allow_active>auth_self_keep</allow_active> </defaults> <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pk-example-frobnicate</annotate> </action> </policyconfig> and drop it in the /usr/share/polkit-1/actions directory under a suitable name (e.g. matching the namespace of the action). Note that in addition to specifying the program, the authentication message, description, icon and defaults can be specified. For example, for the action defined above, the following authentication dialog will be shown: [IMAGE][2] +----------------------------------------------------------+ | Authenticate [X] | +----------------------------------------------------------+ | | | [Icon] Authentication is required to run the PolicyKit | | example program Frobnicate | | | | An application is attempting to perform an | | action that requires privileges. Authentication | | is required to perform this action. | | | | Password: [__________________________________] | | | | [V] Details: | | Command: /usr/bin/pk-example-frobnicate | | Run As: Super User (root) | | Action: org.fd.pk.example.pkexec.run-frobnicate | | Vendor: Examples for the PolicyKit Project | | | | [Cancel] [Authenticate] | +----------------------------------------------------------+ If the user is using the da_DK locale, the dialog looks like this: [IMAGE][3] +----------------------------------------------------------+ | Autorisering [X] | +----------------------------------------------------------+ | | | [Icon] Autorisering er påkrævet for at afvikle | | PolicyKit eksemplet Frobnicate | | | | Et program forsøger at udføre en handling der | | kræver privilegier. Autorisering er påkrævet. | | | | Kodeord: [___________________________________] | | | | [V] Detaljer: | | Bruger: Super User (root) | | Program: /usr/bin/pk-example-frobnicate | | Handling: org.fd.pk.example.pkexec.run-frobnicate | | Vendor: Examples for the PolicyKit Project | | | | [Annullér] [Autorisering] | +----------------------------------------------------------+ Note that pkexec does no validation of the ARGUMENTS passed to PROGRAM. In the normal case (where administrator authentication is required every time pkexec is used), this is not a problem since if the user is an administrator he might as well just run pkexec bash to get root. However, if an action is used for which the user can retain authorization (or if the user is implicitly authorized), such as with pk-example-frobnicate above, this could be a security hole. Therefore, as a rule of thumb, programs for which the default required authorization is changed, should never implicitly trust user input (e.g. like any other well-written suid program).
pkexec
用来运行图形应用程序(我从未这样做过……)。您的答案说明了为什么没有(或者至少为什么必须指定自定义环境才能这样做)。
pkexec
,在什么意义上可以限制功能(“权限”)?我授予程序使用sudo
或sudo
前端运行程序时执行任何操作的能力...在什么意义上以root身份运行程序pkexec
也不能这样做?
pkexec
促进了这一点,还是pkexec
只是以不受限制的能力作为root运行事物?pkexec
您包含在答案中的手册摘录记录了如何编写规则来确定谁可以以root用户(或另一个非root用户)身份运行程序,而不是程序可以做什么。
pkexec
比更具可配置性sudo
,并且鉴于我们在评论中进行的讨论,情况似乎并非如此。您会考虑编辑答案以说明explicate sudo
的可配置性并将其与pkexec
s 进行比较/对比,还是会编辑您的答案以说区别不在于可配置性?
使用sudo可以在sudo上下文中为每个用户和每个程序设置有关保留或重置调用者环境的策略。默认情况下设置env_reset策略。
如果没有显式配置,则无法通过pkexec运行图形应用程序。因为这仅仅是环境重置的结果,所以对于sudo显然也是如此。但是请注意,pkexec和sudo都不能阻止恶意应用程序以root身份运行以从显示管理器或用户X11-cookie文件中检索所有必要信息。后者,或者两者相似,甚至可以根据情况通过非root用户应用程序来完成。
Sudo不需要明确的用户列表。列出任何用户组,甚至一般都可以为所有用户设置权限。target_pw指令允许那些用户在想要运行应用程序(即root)的上下文中使用用户的凭据进行身份验证。除此之外,同样传统的su(su / gtksu / kdesu)程序无需特殊配置即可用于执行相同的操作。
sudo也允许用户在指定时间内保持身份验证。该选项名为超时,可以按用户或每个应用程序全局配置。可以按tty保留身份验证,也可以按用户全局保留身份验证。
虽然pkexec可能不验证传递给PROGRAM的ARGUMENTS,但sudo确实具有此功能。当然,您可以轻松地将其弄乱,并且通常不会这样做。
您可以稍微调整一下如何通过pkexec运行程序:图标,要显示的文本,甚至还可以包含本地化内容。视情况而定,这确实很不错。可悲的是,有人觉得有必要为此功能重新发明轮子。这可能会放入图形化的gtksudo / kdesu包装器中。
那时,Policykit只是一个集中式配置框架。不幸的是不是一个漂亮的人。PK XML文件比应用程序本可以提供的缺少二进制文件的任何文件都要复杂得多。而且没有人会如此疯狂地使用二进制文件...哦gconf ...没关系。
pkexec
可以不配置即可运行GUI:askubuntu.com/a/332847/89385
有几件事情是如何pkexec
不同于sudo
其前端:
pkexec
没有显式配置图形应用程序,则无法运行它。pkexec
:图标,显示的文字,是否记住密码,是否允许其以图形方式运行等等。sudo
您必须在sudoers
文件中以admin身份列出。 gksudo
要求输入密码时锁定键盘,鼠标和焦点pkexec
。在这两种情况下,击键都是可闻的。pkexec
您一起在稍微消毒的环境中工作。尝试例如:
cd /etc/init.d
sudo cat README
# and now the same with pkexec
pkexec cat README
# nice, huh?
root
用pkexec
。它是可配置的,哪些用户可以使用pkexec
(即使他们知道允许这样做的另一个用户的密码)?su
可以通过这种方式配置。当我尝试在Oneiric系统上尝试使用su
另一个非root
用户时guest
,它告诉我不允许这样做。(相反,当我尝试在Oneiric或Precise上使用pkexec
as guest
时,我得到了看起来像断言错误的错误,我可能会很快将其报告为错误,因为即使不允许,我也不会得到该错误。)
pkexec
即可运行GUI:askubuntu.com/a/332847/89385