Recursos para um script no Linux

8

Se eu quiser definir um recurso ( capabilities(7) ), como CAP_NET_BIND_SERVICE , em um arquivo executável e esse arquivo é um script , eu tenho que definir o recurso ( setcap(8) ) no interpretador iniciando esse script ou é suficiente para configurá-lo no próprio arquivo de script?

Nota: a questão refere-se ao Scientific Linux 6.1 em particular, mas penso que pode ser respondido genericamente.

    
por 0xC0000022L 19.08.2013 / 16:01

1 resposta

7

A configuração da capacidade no script não será eficaz. É a situação semelhante como não funcionando setuid bit no script. Semelhante, como no último caso, é a implementação de como execve manipula o shebang e o raciocínio de segurança por trás dele (para obter detalhes, consulte: Permitir setuid em scripts de shell ).

Eu acho que você tem essas opções

  1. define os recursos do próprio interpretador (na verdade, uma cópia dele)

    • você tem um problema aqui que qualquer um que seja capaz de executá-lo será executado com esses recursos elevados (será capaz de executar algum script arbitrário ou iniciá-lo de forma interativa)
  2. escreva um executável de wrapper que terá uma lógica codificada para executar seu script e definir os recursos desejados neste executável

    • certifique-se de que ninguém possa modificar nem remover / substituir o script
    • ainda fazendo chroot , pode-se usar esse wrapper

Em ambos os casos, você deve garantir que as capacidades configuradas sobrevivam a execve definindo inheritable flag. Você também pode usar pam_cap distribuído com libcap normalmente para ativar os recursos desejados por configuração apenas para usuários selecionados.

E, em geral, você quer ter certeza de que ninguém é capaz de modificar o comportamento do seu intérprete alterando o ambiente, por exemplo. PYTHON_PATH ou algo semelhante.

    
por 19.08.2013 / 21:07