GUIの代わりにコマンドライン(nmcli)でNetworkManagerを制御する権限

GUIの代わりにコマンドライン(nmcli)でNetworkManagerを制御する権限

NetworkManager GUIを使用すると、ユーザーはXセッション内で必要に応じてVPNに接続したり切断したりできます。ただし、nmcliSSHセッションでそのコマンドを使用すると、認証エラーが発生します。

> 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がユーザーが特定の接続を無効にするのを防ぐ方法に関する質問がすでに存在しています。

関連情報