Os recursos podem ser usados em scripts sem ajustar o binário do interpretador?

13

Agora mesmo estou usando cap_net_bind_service MY_USERNAME em /etc/security/capability.conf.
Agora eu só preciso definir cap_net_bind_service+i no interpretador da minha linguagem de script favorita para poder adicionar CAP_NET_BIND_SERVICE ao conjunto efetivo via libcap [-ng].

Isso funciona bem, mas me pergunto se há uma maneira de conseguir a mesma coisa sem configurar limites para o binário do interpretador. Embora não seja um grande problema (outras contas de usuário não têm o limite, então eles não podem usá-lo mesmo com o bit definido no binário do interpretador) é um pouco irritante já que eu tenho que re-definir o sinalizador toda vez que o interpretador for atualizado.

    
por ThiefMaster 01.09.2012 / 21:37

1 resposta

2

Normalmente, os recursos são herdados para as crianças. Conforme declarado na página de manual :

A child created via fork(2) inherits copies of its parent's capability sets.

O problema com os scripts é que eles não são executáveis. Seu programa de chamada (geralmente o shell) tem que verificar a primeira linha para um shebang, então chame o intérprete real (definido no shebang) com seu script como argumento.

Isso significa que você terá que definir o recurso no interpretador, não no script. O mesmo se aplica a suid bits e outros sinalizadores especiais.

Então, você faz uma cópia do seu intérprete, configura os recursos que deseja nele (também verifica se ninguém pode acessá-lo através de chmod / chown), e chama este interpretador copiado em sua shebang. Você também pode fazer a lógica setcap no seu script.

    
por 24.10.2014 / 16:19