não pode ler a chave “net.ipv6.conf.all.stable_secret” em sysctl?

3

Estou executando a versão do kernel como segue em um computador Arch Linux:

[root@router ~ ]$ uname -a
Linux router 4.2.5-1-ARCH #1 SMP PREEMPT Tue Oct 27 08:13:28 CET 2015 

e notei que toda vez que eu faço um sysctl -a canalizado em um comando digamos grep eu recebi a seguinte mensagem

[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"
...

Execute o cat nesses arquivos:

[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

Até agora eu ainda não vi nenhum efeito ruim disso, mas eu me pergunto se é normal e, em particular, qual é a função desses stable_secret key? Agradecemos antecipadamente.

    
por Peng 24.12.2015 / 21:35

1 resposta

4

Isso é para suportar endereços RFC 7217

A variável sysctl stable_secret contém o segredo para a geração de identificadores de interface estáveis (normalmente os 64 bits inferiores em endereços IPv6), conforme definido em RFC 7217 , "Um Método para Gerar Identificadores de Interface Semanticamente Opacos com a Configuração Automática de Endereços Sem Estado IPv6 (SLAAC)."

O RFC descreve um método para definir identificadores de interface (IID) em redes IPv6 que não contêm o endereço MAC, como RFC 4862 < Os endereços do SLAAC funcionam, mas não mudam com o tempo, como os endereços de privacidade do RFC 4941 . Este IID deve ser gerado usando uma chave secreta e outras informações, incluindo o prefixo da rede. Assim, o IID será estável em uma sub-rede, mas diferente em outra sub-rede com outro prefixo (e provavelmente outra chave secreta e outros ingredientes). Isso deve impedir o rastreamento do nó quando estiver em roaming em redes diferentes, melhorando a privacidade, mas permitindo o gerenciamento mais fácil dele em cada uma delas.

Do RFC :

      secret_key:
          A secret key that is not known by the attacker.  The secret
          key SHOULD be of at least 128 bits.  It MUST be initialized to
          a pseudo-random number (see [RFC4086] for randomness
          requirements for security) when the operating system is
          installed or when the IPv6 protocol stack is "bootstrapped"
          for the first time.  An implementation MAY provide the means
          for the system administrator to display and change the secret
          key.

A variável é explicada na documentação do kernel :

stable_secret - IPv6 address
    This IPv6 address will be used as a secret to generate IPv6
    addresses for link-local addresses and autoconfigured
    ones. All addresses generated after setting this secret will
    be stable privacy ones by default. This can be changed via the
    addrgenmode ip-link. conf/default/stable_secret is used as the
    secret for the namespace, the interface specific ones can
    overwrite that. Writes to conf/all/stable_secret are refused.

    It is recommended to generate this secret during installation
    of a system and keep it stable after that.

    By default the stable secret is unset.

Esta postagem na lista de discussão do kernel Linux e esta mensagem de commit do git mostra que o RFC 7217 foi implementado no kernel Linux por Hannes Frederic Sowa em março de 2015. Infelizmente, não consegui determinar a versão do kernel lançada correspondente.

Um erro de E / S pode ocorrer quando stable_secret é lido, mas não é definido

O texto de confirmação sugere que a leitura da variável stable_secret retornará um erro de E / S até que seja definido:

The secret is formatted as an ipv6 address and will be stored per interface and per namespace. We track initialized flag and return EIO errors until the secret is set.

[ênfase minha]

    
por 18.01.2016 / 00:11