借助 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 允许用户禁用特定连接的问题已经存在。