授权从命令行 (nmcli) 而不是 GUI 控制 NetworkManager

授权从命令行 (nmcli) 而不是 GUI 控制 NetworkManager

借助 NetworkManager GUI,我的用户可以在 X 会话中随意连接和断开 VPN。但是,在nmcli(在 SSH 会话中)使用相应的命令会导致授权错误:

> nmcli connection up VPN
Error: Connection activation failed: Not authorized to control networking.
> sudo nmcli connection up VPN
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/###)
> nmcli connection down VPN
Connection 'VPN' deactivation failed: Not authorized to deactivate connections
> nmcli connection show VPN | grep -F 'connection.permissions'
connection.permissions:                 user:[my user]

我是否没有对 GUI 操作使用相应的命令?或者 NetworkManager 是否在其命令行界面上提供了 GUI 中提供的所有功能?

答案1

polkit正在阻止此操作,但允许其进行交互式(“活动”)会话。

我有一个/etc/polkit-1/rules.d文件,其本质上是:

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.NetworkManager.network-control")
        return (subject.active ? "yes" : "no");
});

如果我想通过 SSH 会话连接到 VPN,我必须yes无条件返回:

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.NetworkManager.network-control")
        return "yes";
});

不幸的是,如果我不小心的话,这会让我通过 SSH 连接搬起石头砸自己的脚(通过断开物理连接),但是关于如何阻止 NetworkManager 允许用户禁用特定连接的问题已经存在

相关内容