/etc/network/interfaces 中的转义字符

hul*_*ist 8 networking wifi debian configuration wpa

我想确保我传递到行wpa-ssid "abc"中的任何字符串/etc/network/interfaces都不会用于打破配置。

我在手册中所能找到的只是\可以在一行的末尾使用以在下一行继续。

但是\"在一条线的中间呢?

我担心的是 SSID 之类的

A"
up rm -rf /\
Run Code Online (Sandbox Code Playgroud)

是否有任何通用编码可用于将任意字符输入到 SSID 字段中?

Gil*_*il' 5

在 Debian 的/etc/network/interfaces(或任何其他使用 Debian 的 ifupdown 实用程序的发行版)中,反斜杠-换行符序列被删除,反斜杠在其他任何地方都没有特殊之处。双引号字符也不是特别的。#如果该字符是(非连续)行上的第一个非空白字符,则该字符开始注释。空字节被视为换行符(我认为——解析器使用 C 字符串并且对空字节没有特殊处理,因此它们可能会导致额外的恶作剧)。

配置行采用选项名称后跟值的形式,以空格分隔。忽略前导和尾随空格。一些内置选项进一步将行解析为单词;options 的值iface始终运行到行尾。

例如,线

wpa-ssid  "a  b"  "cd"  
Run Code Online (Sandbox Code Playgroud)

将选项wpa-ssid设置为 12 个字符的字符串"a  b"  "cd"(保留内部空格)。

WPA Supplicant 的 ifupdown 脚本在wpa-ssid配置字符串的开头和结尾去掉双引号,上面的行等效于wpa-ssid a  b"  "cd. 这样,您就可以在 SSID 中包含前导和尾随空格。

我在 WPA Supplicant ifupdown 脚本中找不到引用问题,因此看起来 ifupdown 将产生的任何内容都是安全的。

因此,您可以允许将任何字符串作为 SSID 注入到 中/etc/network/interfaces,前提是它不包含任何换行符或空字节。在字符串周围添加双引号(如果不这样做,带有前导或尾随空格、以 结尾\、以 开头或结尾的SSID"将被破坏)。