Recursos para um script no Linux

8

Se eu quiser definir um recurso ( capabilities(7)), como CAP_NET_BIND_SERVICEem um arquivo executável, e esse arquivo for um script , preciso definir o recurso ( setcap(8)) no intérprete que inicia esse script ou é suficiente defini-lo no arquivo de script em si?

Nota: a pergunta diz respeito ao Scientific Linux 6.1 em particular, mas acho que pode ser respondida genericamente.

0xC0000022L
fonte

Respostas:

8

A configuração do recurso no script não será eficaz. É a situação semelhante à de não trabalhar um setuidpouco no script. Semelhante no último caso, é a implementação de como execvetrata 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. definir os recursos no próprio intérprete (na verdade, uma cópia dele)

    • aqui você tem um problema de que qualquer pessoa que seja capaz de executá-lo executará com esses recursos elevados (poderá executar algum script arbitrário ou iniciá-lo interativamente)
  2. escreva um executável de invólucro que terá uma lógica codificada para executar seu script e defina os recursos desejados nesse executável

    • certifique-se de que ninguém possa modificar nem remover / substituir o script
    • ainda assim, chrootpode-se usar mal esse invólucro

Nos dois casos, você precisaria garantir que os recursos configurados sobreviverão execveconfigurando o inheritablesinalizador. Você também pode usar o pam_capdistribuído libcapnormalmente, para realmente ativar os recursos desejados pela configuração apenas para usuários selecionados.

E, em geral, você deseja garantir que ninguém seja capaz de modificar o comportamento do seu intérprete alterando o ambiente, por exemplo. PYTHON_PATHou algo semelhante.

Miroslav Koškár
fonte