无法读取 sysctl 中的密钥“net.ipv6.conf.all.stable_secret”?

Pen*_*eng 4 kernel proc ipv6 sysctl

我在 Arch Linux 计算机上运行的内核版本如下:

[root@router ~ ]$ uname -a
Linux router 4.2.5-1-ARCH #1 SMP PREEMPT Tue Oct 27 08:13:28 CET 2015 
Run Code Online (Sandbox Code Playgroud)

我注意到每次我通过sysctl -a管道输入 grep 命令时我都会收到以下消息

[root@router ~ ]$ sysctl -a | grep no_meaning
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
...
Run Code Online (Sandbox Code Playgroud)

对这些文件运行 cat:

[root@router ~ ]$ cat /proc/sys/net/ipv6/conf/all/stable_secret 
cat: /proc/sys/net/ipv6/conf/all/stable_secret: Input/output error
[root@router ~ ]$ ls -hl /proc/sys/net/ipv6/conf/all/stable_secret 
-rw------- 1 root root 0 Dec 24 14:57 /proc/sys/net/ipv6/conf/all/stable_secret
Run Code Online (Sandbox Code Playgroud)

到目前为止我还没有看到任何不良影响,但我想知道这是否正常,特别是这些stable_secret键的功能是什么?提前致谢。

Dub*_*ubu 5

这是为了支持 RFC 7217 地址

sysctl 变量stable_secret包含生成稳定接口标识符(通常是 IPv6 地址中的低 64 位)的秘密,如RFC 7217 “使用 IPv6 无状态地址自动配置 (SLAAC) 生成语义不透明接口标识符的方法”中所定义。

RFC 描述了一种在 IPv6 网络中定义接口标识符 (IID) 的方法,该网络不包含 MAC 地址(如RFC 4862 SLAAC 地址那样),但也不会像RFC 4941隐私地址那样随时间变化。应使用密钥和其他信息(包括网络前缀)生成此 IID。因此,IID 在一个子网中将是稳定的,但在具有另一个前缀(可能还有另一个密钥和其他成分)的另一个子网中会有所不同。这应该可以防止在漫游不同网络时跟踪节点,从而提高隐私性,但可以更轻松地在每个网络中对其进行管理。

来自 RFC

      密钥:
          攻击者不知道的秘密密钥。秘密
          密钥应至少为 128 位。它必须被初始化为
          伪随机数(有关随机性,请参阅 [RFC4086]
          安全要求)当操作系统
          安装或当 IPv6 协议栈“引导”时
          首次。实现可以提供方法
          供系统管理员显示和更改机密
          钥匙。

该变量在内核文档中有解释:

stable_secret - IPv6 地址
    该 IPv6 地址将用作生成 IPv6 的秘密
    链路本地地址和自动配置的地址
    那些。设置此秘密后生成的所有地址都将
    默认是稳定的隐私。这可以通过以下方式更改
    addrgenmode ip-link。conf/default/stable_secret 用作
    命名空间的秘密,接口特定的可以
    覆盖那个。对 conf/all/stable_secret 的写入被拒绝。

    建议在安装时生成此密钥
    系统并在此后保持稳定。

    默认情况下,稳定秘密未设置。

Linux 内核邮件列表中的这篇帖子git commit 消息显示 RFC 7217 是由 Hannes Frederic Sowa 于 2015 年 3 月在 Linux 内核中实现的。不幸的是,我无法确定相应的已发布内核版本。

stable_secret读取但未设置时可能会发生 I/O 错误

提交文本表明读取stable_secret变量将返回 I/O 错误,直到设置:

该秘密的格式为 ipv6 地址,并将按接口和命名空间存储。我们跟踪初始化标志并返回 EIO 错误,直到设置秘密为止。

[强调我的]

  • `stable_secret` 从 Linux [v4.1](https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=622c81d57b392cc9be836670eb464a4dfaa9adfe) 开始实现。它不适用于新接口,但在 Linux [v4.4](https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id =9b29c6962b70f232cde4076b1020191e1be0889d)。 (2认同)