无权通过cron控制网络

ele*_*bby 5 cron networking

我正在使用命令nmcli c up id networkname在脚本中更改网络。从终端运行脚本时,脚本运行良好,但是从cron运行脚本时,出现错误:

Error: Connection activation failed: Not authorized to control networking.
Run Code Online (Sandbox Code Playgroud)

在网上搜索时,我发现了2011年有关此问题的错误报告:https : //bugs.launchpad.net/ubuntu/+source/network-manager/+bug/681708,但没有解决方案。

从终端而不是cron运行时,为什么脚本可以工作?如果可能的话,我想避免将此放在根目录中。

小智 7

@vidstige 描述的解决方案帮助我解决了这个问题。正如@partofthething 所评论的,问题是,如果/var/lib/polkit-1/localauthority/10-vendor.d/是存储 .pkla 的最佳位置。

看完后man pklocalauthority觉得不是。

/etc/polkit-1/localauthority 层次结构用于本地配置,/var/lib/polkit-1/localauthority 用于第 3 方软件包。

我们是否构建了第 3 方包?我想不是。

10-vendor.d 供操作系统供应商使用。

我们是操作系统供应商吗?我想不是。

我认为/etc/polkit-1/localauthority/50-local.d/.pkla 是更好的地方。

使用这种方式也解决了排序的问题:

  1. 50-local.d 被评估后 10-vendor.d
  2. /etc/polkit-1/localauthority/ 被评估后 /var/lib/polkit-1/localauthority

(我会把这个写成评论,但 50 声望……)


vid*_*ige 5

宝洁

决定是否授予对脚本的访问权限的守护程序称为polkitd。

要获取有关出了什么问题的信息,可以发出

nmcli general permissions
Run Code Online (Sandbox Code Playgroud)

它将列出与相关的一些权限nmcli。您会注意到,从cron运行并在登录时会给出不同的结果。

当前针对桌面使用的dists(例如Ubuntu和更多版本)使用Active alot权限,这意味着它将向登录到本地和活动X11会话的用户授予访问权限。

您也可以像这样在终端中运行polkitd

killall polkitd  # first kill running polkitd
G_MESSAGES_DEBUG=all /usr/lib/policykit-1/polkitd
Run Code Online (Sandbox Code Playgroud)

这将使您了解polkitd正在进行的工作以及正在做出的决定。

在其中添加一个.pkla文件/var/lib/polkit-1/localauthority/10-vendor.d/,将其命名为x.pklaImortant:它需要按其他字典顺序排序,org.freedesktop.NetworkManager.pkla否则该文件将覆盖您的可爱文件。

放置类似这样的内容以向该adm组中的用户授予权限。您还可以授予特定用户等。

[Let adm group modify system settings for network]
Identity=unix-group:adm
Action=org.freedesktop.NetworkManager.settings.modify.system
ResultAny=yes
Run Code Online (Sandbox Code Playgroud)

如果您需要更多权限(例如启用/禁用wifi),则可能需要向该文件添加多个部分。

  • 在 CentOS 7 上,“systemctl restart polkit”足以应用新“.pkla”文件中的配置。 (2认同)