Como devemos entender as regras de capacidades em relação a exec ()?

1

Da interface de programação do Linux:

The permitted set is a limiting superset for the capabilities that can be added to the effective and inheritable sets.

Significa que o conjunto permitido de um processo é um superconjunto do conjunto efetivo e do conjunto herdável do processo?

The kernel calculates the new capabilities of the process using the following rules:

P'(permitted) = (P(inheritable) & F(inheritable)) | (F(permitted) & cap_bset)

P'(effective) = F(effective) ? P'(permitted) : 0

P'(inheritable) = P(inheritable)

In the above rules, P denotes the value of a capability set prior to the exec(), P’ denotes the value of a capability set after the exec(), and F denotes a file capability set. The identifier cap_bset denotes the value of the capability bounding set.

Como as regras garantem que P '(permitido) é um superconjunto de P' (herdável)? Em outras palavras, pode P '(permitido) tornar-se não um superconjunto de P (herdável)?

O que significa "F (efetivo)? P '(permitido): 0" significa?

São P(xxx) e F(xxx) conjuntos ou conjuntos de bits? Se último, são as operações neles operações de bit? Se for o caso, as operações neles configuram operações (união e interseção)?

    
por Tim 07.09.2018 / 00:45

2 respostas

4

What does "F(effective) ? P'(permitted) : 0" mean?

A expressão predicate ? a : b , vem de C como idiomas. Isso significa a if predicate else b ou se o predicado for true, ele será avaliado como a else, será avaliado como b .

Portanto, P'(effective) = F(effective) ? P'(permitted) : 0 significa que, se o bit efetivo dos arquivos estiver definido, copie o conjunto permitido para o conjunto efetivo de processos, caso contrário, deixe o conjunto efetivo vazio.

Isso é necessário para aplicativos herdados que não entendem os recursos (provavelmente a maioria atualmente). Um aplicativo com reconhecimento de capacidade, iniciará sem recursos efetivos e copiará os recursos para o conjunto efetivo quando necessário, e limpará o conjunto efetivo quando concluído (reduzindo o dano que os erros podem causar).

The permitted set is a limiting superset for the capabilities that can be added to the effective and inheritable sets.

Você só pode adicionar recursos ao conjunto efetivo ou herdado, se estiverem no permitido. No entanto, para adicionar um recurso ao conjunto herdado, ele também deve estar no conjunto de limites. - este parágrafo está sendo discutido nos comentários (pode mudar).

Are P(xxx) and F(xxx) sets or bit sets? If latter, are the operations on them bit operations? If former, are the operations on them set operations (union and intersection)?

A maioria são conjuntos de bits, mas F(effective) é um único bit.

Você também perguntou:

How does the rules guarantee that P'(permitted) is a superset of P'(inheritable)? In other words, can P'(permitted) become not a superset of P(inheritable)?

Não, sua declaração é uma leitura errada.

[Permitted] is also a limiting superset for the capabilities that may be added to the inheritable set.

Assim, um processo pode herdar recursos para seu conjunto herdado, que não estão no conjunto permitido. Mas não pode adicionar um recurso ao conjunto herdado, a menos que já esteja no conjunto permitido.

    
por 07.09.2018 / 12:18
3

The permitted set is a limiting superset for the capabilities that can be added to the effective and inheritable sets.

     

Significa que o conjunto permitido de um processo é um superconjunto do conjunto efetivo e do conjunto herdável do processo?

Não, e essa declaração, enquanto concisa, não faz tal afirmação (superconjunto de coisas que podem ser adicionadas! = superconjunto de coisas que já estão lá). O conjunto herdável não precisa começar vazio.

A página do manual dos recursos (7) no meu sistema explica melhor:

Permitted:
          This is a limiting superset for the effective capabilities  that
          the  thread  may assume.  It is also a limiting superset for the
          capabilities that may be added  to  the  inheritable  set  by  a
          thread  that  does  not  have  the CAP_SETPCAP capability in its
          effective set.

How does the rules guarantee that P'(permitted) is a superset of P'(inheritable)? In other words, can P'(permitted) become not a superset of P(inheritable)?

Não garante tal coisa. Por exemplo, P '(permitido) se tornará o conjunto vazio (ou seja, não um superconjunto de P (herdável)) quando o encadeamento executar um programa sem "security.capability" no atributo estendido do arquivo (ou seja, com F vazio (herdável) e F (permitido)).

What does "P'(effective) = F(effective) ? P'(permitted) : 0" mean?

Se F (efetivo) não estiver vazio, defina P '(efetivo) como P' (permitido), isto é, torne todos os recursos permitidos efetivos desde o início. Como apenas o estado vazio / não vazio de F (efetivo) é importante, ele é implementado com apenas um bit / flag no atributo estendido "security.capability" do arquivo.

Are P(xxx) and F(xxx) sets or bit sets?

Eles são conjuntos de bits.

NB: Essa coisa está um pouco desatualizada; agora também há um conjunto de recursos ambiente que é considerado na computação do conjunto eficaz. Verifique o manual do recurso (7) em qualquer sistema mais recente.

    
por 07.09.2018 / 11:40