¿Se pueden usar las capacidades en scripts sin configurar el intérprete binario?

14

En este momento estoy usando cap_net_bind_service MY_USERNAMEen /etc/security/capability.conf.
Ahora solo necesito configurar cap_net_bind_service+iel intérprete de mi lenguaje de script favorito para poder agregar CAP_NET_BIND_SERVICEal conjunto efectivo a través de libcap [-ng].

Esto funciona bien, pero me pregunto si hay una manera de lograr lo mismo sin establecer ningún límite en el binario del intérprete. Si bien no es un gran problema (otras cuentas de usuario no tienen el límite, por lo que no pueden usarlo incluso con el bit establecido en el binario del intérprete) es algo molesto ya que tengo que volver a configurar el indicador cada vez que el intérprete está actualizado.

ThiefMaster
fuente

Respuestas:

4

Por lo general, las capacidades se heredan a los hijos. Como se indica en la página de manual :

Un hijo creado mediante fork (2) hereda copias de los conjuntos de capacidades de sus padres.

El problema con los scripts es que no son directamente ejecutables. El núcleo pasa por una lista de comprobaciones (el código del núcleo se encuentra en fs / binfmt _ *. C). Uno de ellos es "binfmt_script.c", que comprueba la primera línea para un shebang, luego llama al intérprete real (el que está en el shebang) con su script como argumento. Como tal, se llama al intérprete estándar / común, y simplemente lee su guión como argumento.

Esto significa que tendrá que establecer la capacidad en el intérprete, no en el guión. Lo mismo se aplica a suidbits y otras banderas especiales.

Entonces, ya sea que haga una copia de su intérprete, establezca las capacidades que desea (también verifique que nadie pueda acceder a través de chmod / chown) y llame a este intérprete copiado en su shebang. También puede hacer la lógica setcap en su script.

Adrien M.
fuente
Ok, no vi que la pregunta se hizo hace 2 años pero nunca se cerró ... Además, parece un duplicado de unix.stackexchange.com/questions/87348/…
Adrien M.
pero solo i(heredar), pasa exec. Y ino hace nada por sí solo, solo funciona si el archivo tiene una coincidencia i, y creo que el ebit (efectivo) (a menos que el script / ejecutable lo establezca). Es aún más complejo que setuid, este no es un efecto de script.
ctrl-alt-delor
1
Pensé que el kernel leía el shebang, no la cáscara. ( stackoverflow.com/questions/3009192/how-does-the-shebang-work/… )
Philip Couling
Couling tienes razón. Fue una mala interpretación que entendí más tarde. Lo arreglé con pistas sobre dónde se encuentra el código del núcleo para la ejecución de scripts.
Adrien M.