Le funzionalità possono essere utilizzate negli script senza impostare il codice binario dell'interprete?


14

In questo momento sto usando cap_net_bind_service MY_USERNAMEin /etc/security/capability.conf.
Ora ho solo bisogno di impostare cap_net_bind_service+il'interprete del mio linguaggio di scripting preferito per poterlo aggiungere CAP_NET_BIND_SERVICEal set efficace tramite libcap [-ng].

Funziona bene, ma mi chiedo se c'è un modo per ottenere la stessa cosa senza impostare alcun limite al binario dell'interprete. Sebbene non sia un grosso problema (altri account utente non hanno il limite, quindi non possono usarlo nemmeno con il bit impostato sul binario dell'interprete) è piuttosto fastidioso poiché devo reimpostare il flag ogni volta che l'interprete è aggiornato.

Risposte:


4

Di solito, le capacità sono ereditate dai bambini. Come indicato nella manpage :

Un figlio creato tramite fork (2) eredita copie dei set di capacità dei suoi genitori.

Il problema con gli script è che non sono eseguibili direttamente. Il kernel passa attraverso un elenco di controlli (il codice del kernel si trova in fs / binfmt _ *. C). Uno di questi è "binfmt_script.c", che controlla la prima riga per un shebang, quindi chiama il vero interprete (quello nel shebang) con il tuo script come argomento. Come tale, viene chiamato l'interprete standard / comune e legge semplicemente il tuo script come argomento.

Questo significa che dovrai impostare la capacità sull'interprete, non sullo script. La stessa cosa si applica ai suidbit e ad altri flag speciali.

Quindi, o fai una copia del tuo interprete, imposta le capacità che desideri su di esso (controlla anche che nessuno possa accedervi tramite chmod / chown) e chiama questo interprete copiato nel tuo shebang. Puoi anche fare la logica setcap nel tuo script.


Ok, non ho visto che la domanda è stata posta 2 anni fa ma non è mai stata chiusa ... Inoltre, sembra un duplicato di unix.stackexchange.com/questions/87348/…
Adrien M.

ma solo i(eredita), supera exec. E inon fa nulla da solo, funziona solo se il file ha una corrispondenza i, e io il ebit (efficace) (a meno che lo script / eseguibile non lo imposti). È ancora più complesso di setuid, questo non è un effetto di script.
ctrl-alt-delor,

1
Pensavo che lo shebang fosse letto dal kernel e non dalla shell? ( stackoverflow.com/questions/3009192/how-does-the-shebang-work/… )
Philip Couling

perché hai ragione. È stata una cattiva interpretazione che ho capito in seguito. L'ho risolto con suggerimenti su dove si trova il codice del kernel per l'esecuzione degli script.
Adrien M.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.