有什么办法可以永久禁用“可用时自动连接到此网络”?
到目前为止,我已经能够关闭 Kubuntu 中的 NetworkManager,尝试安装 network-manager-gnome,检查列出的配置文件,包括sudo NetworkManager --print-config
主/etc/NetworkManager/NetworkManager.conf
文件(no-auto-default=*
在 [main] 下添加)和每个网络连接的单独配置文件ll /etc/NetworkManager/system-connections/
。其中一些确实显示autoconnect=false
,但我需要 false 作为默认布尔值。
/etc 中必须有一个模板文件或某个配置文件。我刚刚sudo grep -R 'autoconnect=true' /etc
在 /usr 和 /var 中也试过了,但没成功。还有其他位置建议吗?或者有人知道实际默认的“true”设置存储在哪里吗?或者是否有地方可以创建这样的设置。我意识到我可以为每个预期的网络连接创建一个 conf 文件,但我希望对所有新连接都关闭它。
问题是,默认情况下连接到新网络显然存在安全漏洞。另外,我想将“所有用户都可以连接到此网络”更改为默认开启,以阻止 KDEWallet 弹出窗口干扰每个网络更改以及默认开启的自动连接。最后,如果您知道如何默认取消设置“限制到此设备”,那就更好了。为什么我要始终将每个网络连接限制在一个设备上?谢谢!
PS,我很确定这适用于所有 Buntus。
编辑1:下面是对@thallers 回答的更长的回复。
我认为问题在于未指定的“默认值”是布尔值 True。这是逻辑上的原始缺陷。并且它可能存在安全问题。
例如,如果我将所有连接密码存储在受根保护的密钥环或钱包中,并且攻击者可以访问用户级操作,那么他们所要做的就是创建一个新连接,让它自动连接到附近的 wifi 热点,无需开放身份验证。
最安全的默认设置是将自动连接设置为 False,但我理解希望新 Ubuntu 用户能够更轻松地连接网络(在首次安装时可能也很重要)。但是,至少应该有一个选项可以将新配置文件的默认设置为 False。同样,必须有一段代码,说明如果不存在则设置为 True,即使该代码位于操作系统结构深处。
“无自动默认”的问题在于您必须提前知道新的配置文件名称,如果我购买了新的 wifi 路由器,这是不可能的。
“解决方案:删除文件时,在未设置自动连接设置的情况下创建它。”这不符合逻辑...?这也会默认为 True...?
再次,我承认有些默认设置不是我的偏好,但应该可以以不同的方式设置默认值。由于“无设置等于 True”的逻辑,这似乎是不可能的。
我不同意将网络与设备绑定在一起是有用的。所以如果我插入另一个 wifi 适配器来排除连接故障,或者只是为了改变它,我应该进入连接设置来允许这样做。另一方面,我确实看到了锁定它的安全目的,但同样,应该可以设置默认允许任何设备。同样,这必须有一段代码,除非通过定义“限制设备”功能作为负面功能,与“无设置等于 True”逻辑相结合,否则这是相同的问题。因此,可能的解决方案是创建一个补丁,使“不限制设备”功能默认为 True。自动连接可能也是如此,尽管第一个要点中的底层逻辑问题可能是其根源。
答案1
NetworkManager 仅连接到您有配置文件的网络。而且 NetworkManager 不会创建配置文件,因为它不知道您需要哪些设置。因此,这种安全问题似乎是没有根据的。是的,如果您在没有配置文件的 Wi-Fi 上单击 nm-applet、gnome-shell 或 plasma-nm,则会创建一个配置文件。但如果您不想这样做,请不要单击。如果您不小心单击了,请再次删除配置文件,这似乎不会造成太大的伤害。
“NetworkManager 不创建配置文件”有一个例外。如果您没有在 NetworkManager.conf 中配置 no-auto-default,并且您的以太网设备没有合适的配置文件,则 NetworkManager 将创建一个名为“有线连接 1”的配置文件。但是如果您有配置文件,则不会发生这种情况。此外,如果您删除或修改生成的配置文件,NM 会在 /var/lib/NetworkManager/no-auto-default.state 文件中记住这一点。
除了无自动默认情况(您已禁用)外,NetworkManager 不会生成配置文件。连接配置文件完全由用户创建(或由某些 NetworkManager 客户端工具创建,可能代表用户创建)。我认为 NetworkManager 对连接配置文件的属性具有默认值的想法是不对的,因此您无法配置默认值。
请注意,有一个例外:某些属性允许明确设置为表示默认值的值,您可以在 NetworkManager.conf 中覆盖该默认值。在这种情况下,配置文件的属性明确表示使用默认值。但这仅适用于某些属性,对于自动连接几乎没有意义,因为这些类型的默认值取决于设备(而自动连接属性独立于设备)。请参阅man NetworkManager.conf
这些类型的连接默认值)。
当然,当您使用某个工具创建配置文件时,该工具可能有一个默认值。
例如,如果您将文件拖放到/etc/Networkmanager/system-connections
并省略自动连接设置,则默认为 true。解决方案:拖放文件时,在未设置自动连接设置的情况下创建该文件。
或者例如,如果您使用nmcli connection add
创建配置文件,则新配置文件将默认创建并启用自动连接。解决方案:传递autoconnect no
命令行,或使用对您有帮助的 shell 脚本,或使用完全不同的工具。
或者例如,如果您通过 创建配置文件nmcli device connect
(如果不存在配置文件,则创建配置文件),则将创建启用自动连接的配置文件。解决方案:不要使用此方式创建配置文件,也不要事后使用 调整配置文件nmcli connection modify
。
或者例如,如果您使用 nm-connection-editor 创建配置文件,则 GUI 会预先初始化以自动连接。解决方案:在单击“保存”之前取消勾选该选项。
当然,通常情况下,您只需使用所需的设置创建一次配置文件,之后就可以使用它。因此,在配置文件创建步骤之后,请执行类似 的操作nmcli connection modify "$PROFILE" autoconnect no
。
甚至for U in $(nmcli -g UUID connection) ; do nmcli connection modify uuid $U autoconnect no; done
。
不,大多数工具(nmcli、nm-connection-editor)不允许您在创建时为设置定义默认值。相反,它们通常允许您在创建设置时指定设置。或者创建您自己的工具。NetworkManager 的主要目标是提供网络配置 API。使用该 API 并根据您的喜好创建配置文件。
至于为什么大多数工具都有特定的默认值而没有其他默认值,答案是这通常被认为更有用,大多数用户都想要。很明显,默认值并不适合所有人,否则该选项一开始就无法配置。将配置文件绑定到某个接口名称(或 MAC 地址)的原因并不十分充分,但这是因为(除非您设置connection.multi-connect
)配置文件一次只能激活一次。在这种情况下,将配置文件绑定到设备上似乎更可取。
答案2
不幸的是,目前无法覆盖默认值,autoconnect=true
因为 Network Manager 代码库中没有定义默认值。请参阅init
此处的函数 [https://github.com/NetworkManager/NetworkManager/blob/master/libnm-core/nm-setting-connection.c#L1728],该函数priv->autoconnect
设置为TRUE
无所谓。
您可以要求对此进行更改,以允许它被配置覆盖,或者/etc/NetworkManager/NetworkManager.conf
更好的是类似这样的配置/etc/NetworkManager/conf.d/default-wifi-autoconnect-false.conf
。如果您想覆盖 WiFi 设备不自动连接的默认设置,您可以在该文件中输入以下内容...
[connection-wifi]
match-device=type:wifi
autoconnect=false
如果有充分的理由,请求可能会被考虑。
答案3
我同意你的观点,这是一个安全问题,而且(根据@ConceptRat)你不能简单地覆盖自动连接设置的默认值,这真的很烦人。
我的解决方案是将/etc/NetworkManager/dispatcher.d/disable-autoconnect
以下内容放入 Bash 脚本中:
#!/bin/bash
# Limit ourselves to specific interfaces
# This avoids unintended site-effects like disabling autoconnect for LAN/VPN connections
INTERFACES=("<YOUR WIFI INTERFACE NAME>")
function containsElement () {
local e match="$1"
shift
for e; do [[ "$e" == "$match" ]] && return 0; done
return 1
}
interface=$1 state=$2
if [ "$state" = "up" ] && containsElement "$interface" "${INTERFACES[@]}"; then
nmcli connection modify "$(iwgetid -r)" autoconnect no
fi
这会将自动连接属性设置为false
每次指定接口上的连接建立时自动连接。