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

14

Agora eu estou usando cap_net_bind_service MY_USERNAMEno /etc/security/capability.conf.
Agora só preciso definir cap_net_bind_service+io intérprete da minha linguagem de script favorita para poder adicionar CAP_NET_BIND_SERVICEao conjunto efetivo via libcap [-ng].

Isso funciona bem, mas gostaria de saber se existe uma maneira de conseguir a mesma coisa sem definir limites para o binário do intérprete. Embora não seja um grande problema (outras contas de usuário não têm limite, por isso não podem ser usadas mesmo com o bit definido no binário do intérprete), é um pouco irritante, pois tenho que redefinir a flag toda vez que o intérprete é Atualizada.

ThiefMaster
fonte

Respostas:

4

Geralmente, os recursos são herdados para os filhos. Conforme indicado na página de manual :

Um filho criado via fork (2) herda cópias dos conjuntos de recursos de seus pais.

O problema com os scripts é que eles não são executáveis ​​diretamente. O kernel passa por uma lista de verificações (o código do kernel está localizado em fs / binfmt _ *. C). Um deles é "binfmt_script.c", que verifica a primeira linha em busca de um shebang e, em seguida, chame o intérprete real (aquele no shebang) com seu script como argumento. Como tal, o intérprete padrão / comum é chamado e simplesmente lê seu script como argumento.

Isso significa que você precisará definir o recurso no intérprete, não no script. O mesmo se aplica aos suidbits e outros sinalizadores especiais.

Então, você faz uma cópia do seu intérprete, define os recursos que deseja (também verifique se ninguém pode acessá-lo através do chmod / chown) e chame esse intérprete copiado no seu shebang. Você também pode executar a lógica setcap no seu script.

Adrien M.
fonte
Ok, não viu a pergunta foi feita de 2 anos atrás, mas nunca fechado ... Além disso, parece ser uma duplicata de unix.stackexchange.com/questions/87348/...
Adrien M.
mas apenas i(herdar), passa pelo exec. E inão faz nada por si só, ele só funciona se o arquivo tiver uma correspondência ie o ebit (efetivo) (a menos que o script / executável defina isso). É ainda mais complexo que setuid, esse não é um efeito de script.
ctrl-alt-Delor
1
Eu pensei que o shebang foi lido pelo kernel e não pelo shell? ( stackoverflow.com/questions/3009192/how-does-the-shebang-work/… )
Philip Couling
acoplando você está certo. Foi uma interpretação errada que eu entendi depois. Eu o corrigi com dicas de onde o código do kernel para execução de scripts está localizado.
Adrien M.