Como definir recursos com o comando setcap?

5

Eu gostaria de configurar o wpa_supplicant e openvpn para ser executado como usuário não-root, como a configuração recomendada para o wireshark . Não consigo encontrar nenhuma documentação para o que +eip neste exemplo significa:

sudo setcap cap_net_raw,cap_net_admin,cap_dac_override+eip /usr/bin/dumpcap
    
por T0m4t0s4uc3 02.09.2017 / 00:17

1 resposta

6

Como os recursos funcionam no Linux estão documentados em man 7 capabilities .

Os recursos do processo no conjunto eficaz são contra os quais as verificações de permissão são concluídas. Recursos de arquivo são usados durante a chamada execv (que acontece quando você quer executar outro programa 1 ) para calcular os novos conjuntos de recursos para o processo.

Os arquivos têm dois conjuntos de recursos, permitido e hereditário e bit eficaz .

Os processos têm três conjuntos de recursos: efetivo , permitido e herdável . Há também um conjunto de limites, que limita quais recursos podem ser adicionados posteriormente ao processamento do conjunto herdado e afeta como os recursos são calculados durante execv . Os recursos só podem ser removidos do conjunto de limites , não adicionados.

As verificações de permissões para o processo são verificadas em relação ao processo ' conjunto efetivo . O processo pode aumentar suas capacidades de permitido para conjunto efetivo (usando capget e capset syscalls, a API recomendada é respectivamente cap_get_proc e cap_set_proc ).

Conjuntos Herdáveis e delimitadores e recursos de arquivos entram em jogo durante o execv syscall. Durante os conjuntos execv new efetivo e permitido são calculados e herdados set e conjunto de limites permanecer inalterado. O algoritmo é descrito na página capabilities man:

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

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

P'(inheritable) = P(inheritable)    [i.e., unchanged]

Where P is old capability set, P' is capability set after execv and F is file capability set.

Se um recurso estiver em ambos os processos ' herdável conjunto e em arquivo herdado conjunto (intersecção / lógica AND) ele será adicionado ao conjunto permitido . O arquivo conjunto permitido é adicionado (união / lógica OR) a ele (se estiver dentro do conjunto de limites).

Se o bit efetivo nas capacidades dos arquivos for definido, todos os recursos permitidos serão elevados para efetivo após execv .

Os recursos no kernel são definidos para encadeamentos, mas, no que diz respeito a recursos de arquivos, essa distinção é geralmente relevante apenas se o processo alterar seus próprios recursos.

No seu exemplo, os recursos cap_net_raw , cap_net_admin e cap_dac_override são adicionados aos conjuntos herdados e permitidos e eficaz bit é conjunto. Quando seu binário é executado, o processo terá esses recursos nos conjuntos efetivos e permitidos se eles não estiverem limitados por um conjunto de limites.

[1] Para o fork syscall, todos os recursos e o conjunto de limites são copiados do processo pai. As alterações no uid também têm sua própria semântica de como os recursos são definidos nos conjuntos efetivos e permitidos .

    
por 02.09.2017 / 05:47