问题标签 [polkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
514 浏览

c++ - 如何在 Linux 上使用 polkit 请求串口权限?

我正在编写一个跨平台应用程序,我想在基于 Linux 的操作系统(如 Fedora 和 Ubuntu)上运行。我使用QSerialPort它,它工作正常。我可以QSerialPortInfo用来获取系统中的串行端口列表,并将它们呈现给可以选择他/她想要使用的用户。

但是,在 Linux 系统上,默认情况下用户没有串行端口的权限。我知道运行我的应用程序是错误的,而且我也知道每次使用应用程序时sudo要求用户手动在串行端口上运行是不友好的。chmod 666所以我环顾四周,在我看来 polkit 是答案,但是我找不到任何可以告诉我如何做到这一点的示例。

你能告诉我如何使用 polkit(以前称为 policykit)来请求我的应用程序使用特定串行端口的权限吗?

编辑:

我正在寻找的是一种方法:

  1. 检查用户是否可以访问串口
  2. 如果没有,弹出一个请求权限的对话框(例如 Gnome 设置应用程序)
  3. 如果用户成功通过身份验证,则使串行端口可用于应用程序。

还有一些想法

  • 我不想设置一个允许每个串行端口的 udev 规则
  • 我不想让用户运行脚本
  • 我不希望我的应用以超级用户身份运行
  • 我不希望以 root 身份执行任何其他操作,只是串行端口访问

是的,我找到了官方的 polkit 文档,但他们对如何做到这一点不是很清楚。

0 投票
0 回答
1235 浏览

dbus - 使用没有 root 的 dbus 启动 systemd 服务

我制定了这个 polkit 规则:

它适用于下面的命令,我不需要 root 来启动/停止。

但是,我编写了一个 C 程序来启动/停止服务,但它不起作用,无论我做什么,我都会收到此错误(除非我以 root 身份运行):

这是该程序的源代码,为了清楚起见,我删除了错误检查。

这个应用程序似乎做了一些非常相似的事情。

0 投票
1 回答
1077 浏览

python - 如何将 dbus 和 policykit 连接到我在 python 中的函数?

我正在制作一个 python 应用程序,它有一个需要 root 权限的方法。从https://www.freedesktop.org/software/polkit/docs/0.105/polkit-apps.html,我找到了示例 2。通过 D-Bus 访问权限,这是下面代码的 python 版本,我执行了它并且我认为输入密码后我可以获得root权限,但我的应用程序仍然“权限被拒绝”。是我要连接的功能

0 投票
1 回答
583 浏览

authentication - 非法模块类型:etc/login.defs

我正在使用 Ubuntu 16.04.2 LTS,并且在互联网上多次提到“抖动身份验证窗口”问题,特别是在这里:

https://ubuntuforums.org/showthread.php?t=1761052&p=11267228#post11267228

在这里: http ://www.dahoba.xyz/2011/08/ubuntu-fix-cant-authenticate.html?m=1

它的长短是需要root privs的命令的身份验证窗口可能会出现一秒钟,来回摇晃,然后消失。

我经常遇到的一个推荐解决方案是:

“sudo chmod +s /usr/lib/policykit-1/polkit-agent-helper-1”

但这对我不起作用

这是我认为是我的 auth.log 的相关部分(注意时间,窗口字面上闪烁):

4 月 25 日 06:56:53 xxxx polkit-agent-helper-1 [4527]:PAM (polkit-1) 非法模块类型:etc/login.defs 4 月 25 日 06:56:53 xxxx polkit-agent-helper-1 [ 4527]:PAM pam_parse:期望返回值;[...to] Apr 25 06:56:53 xxxx polkit-agent-helper-1[4529]:PAM (polkit-1) 非法模块类型:etc/login.defs Apr 25 06:56:53 xxxx polkit- agent-helper-1[4529]:PAM pam_parse:期望返回值;[...to] Apr 25 06:56:53 xxxx polkit-agent-helper-1[4530]:PAM (polkit-1) 非法模块类型:etc/login.defs Apr 25 06:56:53 xxxx polkit- agent-helper-1 [4530]:PAM pam_parse:期望返回值;[...to] Apr 25 06:56:53 xxxx polkitd(authority=local): unix-session:c2 的操作员无法进行身份验证以获得对 unix-process:2310 的操作 org.freedesktop.policykit.exec 的授权: 5776 [bash](归 unix-user:computer_user 所有)

任何见解或帮助将不胜感激!

0 投票
2 回答
779 浏览

linux - 如果文件存在,如何设置 polkit 规则来锁定关机?

如果笔式驱动器连接到系统,我正在编写一个应用程序来控制系统关闭。

当 pendrive 连接时,它将其标识符写入文件。如果 pendrive 断开连接,它会删除文件的标识符,然后,如果文件为空,则删除文件。

然后,我想设置一个 polkit 规则来控制关机,使用这个文件。polkit 规则检测关闭顺序并检查文件是否存在。如果存在,则不允许关闭,否则允许。

我尝试将其设置为这种形式:

polkit 规则使用一个助手,带有一个检查文件是否存在的脚本

detect_pendrive.sh 是这样的:

我将规则复制到 /usr/share/polkit-1/rules.d/ 中。但是,当我尝试在连接了 pendrive 的情况下关闭时,系统只是关闭电源并忽略该规则。

我在 Debian GNOME 和 Gentoo Cinnamon 上测试了它

问题可能出在哪里?

0 投票
1 回答
72 浏览

c - 从服务生成 GUI

我有一个在通过 systemd 启动的 linux 系统中以 root 身份运行的服务。该服务有时可能会在用户的当前登录环境中生成一个 GUI(我通过 DBUS 从 Logind 获取 Display 和 Xauth 的值)。gui的启动工作,但环境搞砸了。

目前 gui 是通过fork和启动的execvp。在使用和删除调用execvp权限之前。setuidsetgid

使用正确的环境变量启动进程的合适方法是什么?目前,当尝试policykit从应用程序中使用时,我收到一个错误,即/dev/tty找不到当前的等等。

是否适合使用su -l?还是有其他方法可以以不同的用户身份启动进程?

0 投票
0 回答
378 浏览

amazon-ec2 - Wildfly 10 服务启动失败 - Centos7 | AWS EC2

我 使用在 AWS EC2 实例上运行的 centos 7 上的 systemd 将 wildfly 安装为服务。我使用了中描述的方法

{jboss.home.dir}/docs/contrib/scripts/systemd/README,在这里找到

但是当我尝试启动 wildfly 服务时,服务启动失败,我在日志上收到以下消息。

0 投票
1 回答
436 浏览

python - 使用 dbus 和 polkit 运行调用 root 脚本的 root 权限 python 服务

我已经编写了一个 python 脚本,它从启动板下载 deb 文件,然后调用一个 shell 脚本来使用外星人将 debs 转换为 rpms。

shell 脚本使用外星人,因此需要以 root 身份运行。

该程序使用线程池异步下载deb文件,使用threadpool.apply_async,然后使用处理池异步调用shell脚本,因此整个事情发生得相当快。

一切正常,但调用外星人的 shell 脚本需要是 root 否则无法正确构建包。当我第一次完成脚本时,我会在使用 sudo 之后使用 pkexec 调用外星人。在这两种情况下,我都有几个问题。

第一个是在root启动时,我丢失了用户的环境,因此丢失了pip安装的python库。也许我可以使用 sudo -s 或类似的,但第二个问题是我必须为构建的每个包输入我的 root 密码。

我想要做的是运行python脚本,qt gui和所有,作为普通用户,选择要转换的文件,然后点击安装按钮,只输入我的超级用户密码一次。

我决定过滤掉python的安装部分,包括线程下载和对shell脚本的线程调用,然后尝试以root/超级用户身份运行这些部分。

我为这个安装部分创建了一个 dbus 服务,并且在经历了一段陡峭的 dbus 学习曲线之后,设法让该服务正常工作。但是,让脚本通过身份验证并提高其权限,我并不高兴。

我已经能够使用 polkit 显示密码对话框并授权超级用户,但我不知道如何使用 polkit 的返回值

它显示密码对话框,用于授权,但不处理提升脚本权限。

我已将 python 安装服务设置为 0500 权限,因此希望一旦我弄清楚如何提升权限,root 用户就有能力读取和执行当前在会话总线上创建的服务。

如何提升权限,同时保留用户的环境变量,这样我就不必将 python 模块安装到 root 帐户中?

非常感谢您提前提供的帮助...

附言。我编写了一个 polkit 操作文件和一个 polkit 规则,但在每种情况下,我都不确定操作 id 与特权提升有何关系。pps。我可以/应该使用 pam 吗?

0 投票
1 回答
944 浏览

docker - 有没有办法从 docker 容器运行“pkexec”?

我正在尝试使用旧版本的 Firefox 和旧版本的 Java设置 Docker 映像(我的 Dockerfile 可在此处获得,抱歉法语自述文件: https ://framagit.org/Gwendal/firefox-icedtea-docker)运行旧的 Java 小程序来启动 VPN。我的图像确实有效,并且成功地允许我在 Firefox 中启动 Java 小程序。

不幸的是,所述小程序然后尝试在容器中运行以下命令(我只是--config从命令中删除了该部分,因为它在这里无关紧要):

然后小程序以错误方式静默退出。在调查时,我尝试使用pkexec相同的 Docker 映像运行命令,它给了我这个结果:

但我根本不知道 polkit,也无法理解这个错误。


编辑:重现问题的一种更简单的方法是使用这个 Dockerfile:

然后运行:

这再次导致:


我应该得出结论,pkexec不能在 docker 容器中工作吗?或者有什么方法可以使这个命令起作用?

旁注:我无法控制我尝试运行的 Java 小程序,它是一个可怕且非常过时的专有黑匣子,我应该在工作中使用它,我无法访问源代码,而且我必须按原样使用。

0 投票
1 回答
223 浏览

yocto - polkit-0.113-r0 do_configure:功能失败:do_configure

使用 yocto 构建策略工具包(polkit:存在于 meta-openembedded [branch : pyro] 中)并在构建期间出现以下错误:

请告诉我,如何解决这个问题?