Linux setcap e alterações feitas no executável

3

Um programa que estou desenvolvendo usa sockets raw. Por razões de segurança para rodar um programa que usa soquetes brutos, o programa deve ser executado sob um usuário com ID 0 (root?) Efetivo ou ter o recurso: CAP_NET_RAW configurado.

Então, após a compilação, eu defini o recurso com:

sudo setcap cap_net_raw+ep <executable>

O arquivo no terminal muda para um fundo vermelho com texto preto, e não tenho certeza do que isso significa. Ele ainda tem todos os outros atributos de arquivo de outros programas ao executar ls -l , por isso não tenho certeza do que exatamente tem alterações para ele. Verifiquei que o recurso está configurado com getcap

O problema é depois de executar setcap . O carregador não carrega outros objetos compartilhados com a mensagem de erro "não é possível localizar o arquivo". Sem setcap o programa funciona e carrega todos os objetos compartilhados necessários (quando executado como root), mas eu preferiria não fazer isso. O caminho do objeto compartilhado é definido na variável de ambiente LD_LIBRARY_PATH .

Quaisquer sugestões ou dicas sobre o que mudou com o executável para fazer com que o carregador não carregue outros objetos compartilhados? Poderia ser porque outros objetos compartilhados que ele vincula não tem esse recurso?

Obrigado por qualquer ajuda.

    
por kris 15.12.2014 / 22:12

1 resposta

2

Pelo menos para programas setuid, variáveis de ambiente como LD_LIBRARY_PATH ou LD_PRELOAD são ignoradas por motivos de segurança. Veja a página de manual ld.so(8) para detalhes.

Eu posso imaginar que é o mesmo ou pelo menos semelhante para programas com recursos definidos. (Nem a página de manual capabilities(7) nem a página de manual ld.so(8) mencionam tais restrições, no entanto.)

    
por 15.12.2014 / 23:50