我正在尝试为 PolicyKit 编写一个新.rules
文件。我的测试尝试(在目录中/etc/polkit-1/rules.d/
)如下所示:
polkit.addRule(function(action, subject) {
polkit.spawn(["rm","/home/gabriel/test"]);
if (action.id == "org.freedesktop.policykit.exec") {
polkit.log("action=" + action);
polkit.log("subject=" + subject);
}
return polkit.Result.NOT_HANDLED;
});
但据我所知,这段代码从未运行过。该test
文件仍在那里,运行类似以下代码后没有日志输出$ pkexec -u otheruser bash
(我已尝试将.rules
文件标记为可执行文件。)
答案1
如果你Ubuntu 22.04(或更低版本)那么您仍在使用旧版本的 PolKit,其中没有 .rules 文件,只有 .pkla 和 .conf 文件。
在命令提示符下,执行以下操作:
pkaction --version
如果显示 < 0.106,则您只能使用旧语法。
您可以在 中创建一个 .pkla 文件/etc/polkit-1/localauthority/
,请参阅man pklocalauthority
以获取说明和示例。
答案2
答案3
以下对我有用(ubuntu 22.04,带有 pkaction 版本 0.105):
编辑以下文件:
/var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
并使第一部分看起来像:
[Mounting, checking, etc. of internal drives]
Identity=unix-group:admin;unix-group:sudo
Action=org.freedesktop.udisks.filesystem-*;org.freedesktop.udisks.drive-ata-smart*;org.freedesktop.udisks2.encrypted-unlock-system;org.freedesktop.udisks2.filesystem-fstab;org.freedesktop.udisks2.filesystem-mount-system;org.freedesktop.udisks2.filesystem-mount-other-seat;
ResultAny=yes
ResultInactive=yes
ResultActive=yes
无需重启。编辑文件后即可工作。
注意我在这里添加了“org.freedesktop.udisks2.filesystem-mount-other-seat”。就我而言,当我尝试从命令行安装磁盘时,我收到了以下消息:
$ udisksctl mount -b /dev/sdb1
==== AUTHENTICATING FOR org.freedesktop.udisks2.filesystem-mount-other-seat ===
Authentication is required to mount WD Elements 25A3 (/dev/sdb1)
Authenticating as: User,,, (user)