我在 Arch Linux 计算机上运行的内核版本如下:
[root@router ~ ]$ uname -a
Linux router 4.2.5-1-ARCH #1 SMP PREEMPT Tue Oct 27 08:13:28 CET 2015
我注意到每次我通过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"
...
对这些文件运行 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
到目前为止我还没有看到任何不良影响,但我想知道这是否正常,特别是这些stable_secret
键的功能是什么?提前致谢。
答案1
这是为了支持 RFC 7217 地址
sysctl 变量stable_secret
包含生成稳定接口标识符(通常是 IPv6 地址中的低 64 位)的秘密,如RFC 7217,
“一种使用 IPv6 无状态地址自动配置 (SLAAC) 生成语义不透明接口标识符的方法。”
RFC 描述了一种在不包含 MAC 地址的 IPv6 网络中定义接口标识符 (IID) 的方法,如下所示RFC 4862SLAAC 地址确实如此,但不会像这样及时更改RFC 4941隐私地址也可以。应使用密钥和其他信息(包括网络前缀)生成此 IID。因此,IID 在一个子网中将是稳定的,但在具有另一个前缀(可能还有另一个密钥和其他成分)的另一个子网中会有所不同。这应该可以防止在漫游不同网络时跟踪节点,从而提高隐私性,但可以更轻松地在每个网络中对其进行管理。
密钥: 攻击者不知道的秘密密钥。秘密 密钥应至少为 128 位。它必须被初始化为 伪随机数(有关随机性,请参阅 [RFC4086] 安全要求)当操作系统 安装或当 IPv6 协议栈“引导”时 首次。实现可以提供方法 供系统管理员显示和更改秘密 钥匙。
变量已解释在内核文档中:
stable_secret - IPv6 地址 该 IPv6 地址将用作生成 IPv6 的秘密 链路本地地址和自动配置的地址 那些。设置此秘密后生成的所有地址都将 默认是稳定的隐私。这可以通过以下方式更改 addrgenmode ip-link。 conf/default/stable_secret 用作 命名空间的秘密,接口特定的可以 覆盖那个。对 conf/all/stable_secret 的写入被拒绝。 建议在安装时生成此密钥 系统并在此后保持稳定。 默认情况下,稳定秘密未设置。
这篇文章发布到 Linux 内核邮件列表和这个 git 提交消息显示 RFC 7217 是由 Hannes Frederic Sowa 于 2015 年 3 月在 Linux 内核中实现的。不幸的是,我无法确定相应的已发布内核版本。
stable_secret
读取但未设置时可能会发生 I/O 错误
提交文本表明读取stable_secret
变量将返回 I/O 错误,直到设置:
该秘密的格式为 ipv6 地址,并将按接口和命名空间存储。我们跟踪初始化标志并返回 EIO 错误,直到设置密码为止。
[强调我的]