我正在自动配置虚拟机(Debian Buster OS),
在安装系统后的配置过程中,自动化工具就会启动。除其他操作外(按顺序):
- 安装
NetworkManager
- 添加用户X,将用户添加到
sudo
组 - 使用以下命令导入用户 X 的连接
nmcli
最后一步失败并显示:Error: Failed to add 'REDACTED' connection: Insufficient privileges.
但是,当我登录到虚拟机(作为 root 或用户 X)并手动添加连接时 - 它可以工作(用户 X 属于sudo
NetworkManager 使用的 polkit 所需的组)
我能找到的唯一相关日志:
> journalctl -xe -u NetworkManager
...
audit: op="connection-add" ... result="fail" reason="Insufficient privileges"
没有polkit
或 的日志dbus
我在自动化工具中添加了一些日志记录,即在nmcli general permissions
导入连接之前转储:
PERMISSION VALUE
org.freedesktop.NetworkManager.enable-disable-network no
org.freedesktop.NetworkManager.enable-disable-wifi no
org.freedesktop.NetworkManager.enable-disable-wwan no
org.freedesktop.NetworkManager.enable-disable-wimax no
org.freedesktop.NetworkManager.sleep-wake no
org.freedesktop.NetworkManager.network-control auth
org.freedesktop.NetworkManager.wifi.share.protected no
org.freedesktop.NetworkManager.wifi.share.open no
org.freedesktop.NetworkManager.settings.modify.system no
org.freedesktop.NetworkManager.settings.modify.own auth
org.freedesktop.NetworkManager.settings.modify.hostname auth
org.freedesktop.NetworkManager.settings.modify.global-dns auth
org.freedesktop.NetworkManager.reload auth
org.freedesktop.NetworkManager.checkpoint-rollback auth
org.freedesktop.NetworkManager.enable-disable-statistics no
org.freedesktop.NetworkManager.enable-disable-connectivity-check no
这清楚地表明用户无法执行任何操作。
但是当我登录时:
PERMISSION VALUE
org.freedesktop.NetworkManager.enable-disable-network yes
org.freedesktop.NetworkManager.enable-disable-wifi yes
org.freedesktop.NetworkManager.enable-disable-wwan yes
org.freedesktop.NetworkManager.enable-disable-wimax yes
org.freedesktop.NetworkManager.sleep-wake no
org.freedesktop.NetworkManager.network-control yes
org.freedesktop.NetworkManager.wifi.share.protected yes
org.freedesktop.NetworkManager.wifi.share.open yes
org.freedesktop.NetworkManager.settings.modify.system yes
org.freedesktop.NetworkManager.settings.modify.own yes
org.freedesktop.NetworkManager.settings.modify.hostname auth
org.freedesktop.NetworkManager.settings.modify.global-dns auth
org.freedesktop.NetworkManager.reload auth
org.freedesktop.NetworkManager.checkpoint-rollback auth
org.freedesktop.NetworkManager.enable-disable-statistics yes
org.freedesktop.NetworkManager.enable-disable-connectivity-check yes
我尝试使用手动在虚拟机上复制此内容:
apt update && apt install -y network-manager network-manager-openvpn && useradd userx && usermod -a -G sudo userx && su - userx -c "nmcli connection import type openvpn file ...."
没有任何运气。它只是有效...
我用于设置自动化的工具:salt
(SaltStack)
用户通过添加用户.present状态。
我怀疑这是 Salt 的问题
谁能帮我查明这里到底是什么问题?
答案1
当远程登录(通过 ssh)时,policykit 可以以不同的方式对待请求进程。
NetworkManager 的 PolicyKit 权限的默认配置就是这样设置的,因为当您坐在计算机前面时,您也可能会篡改电缆。因此,与非 root 远程用户相比,对非 root 本地用户的信任度更高。
(顺便说一句,root 用户总是可以获得免费通行证,甚至无需询问 PolicyKit)。
基本上,使用具有权限的用户和/或相应地配置 PolicyKit。
看https://wiki.archlinux.org/index.php/Polkit。查看<allow_inactive>
权限。我不熟悉如何最好地配置PolicyKit。在某些发行版上,您需要编写 JavaScript 片段,而在 Debian 上则需要编写其他内容......