GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿se pueden usar las capacidades en secuencias de comandos sin configurar el binario del intérprete?

En este momento estoy usando cap_net_bind_service MY_USERNAME en /etc/security/capability.conf.
Ahora solo necesito configurar cap_net_bind_service+i en el intérprete de mi lenguaje de secuencias de comandos favorito para poder agregar CAP_NET_BIND_SERVICE a la efectiva establecido a través de libcap[-ng].

Esto funciona bien, pero me pregunto si hay una manera de lograr lo mismo sin establecer límites 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 configurado en el binario del intérprete), es algo molesto ya que tengo que restablecer el indicador cada vez que el intérprete está actualizado.

Respuesta aceptada:

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

Un hijo creado a través de fork(2) hereda copias de los conjuntos de capacidades de su padre.

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 verifica la primera línea en busca de 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 secuencia de comandos como un argumento.

Esto significa que tendrá que establecer la capacidad en el intérprete, no en el script.
Lo mismo se aplica a suid bits y otras banderas especiales.

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


Linux
  1. Comprender los scripts rc en Linux

  2. ¿Cómo establecer el nombre de un hilo en Linux pthreads?

  3. ¿Cómo puedo configurar el 'backend' en matplotlib en Python?

  4. ¿Cómo puedo eliminar un usuario en Linux cuando el sistema dice que actualmente se usa en un proceso?

  5. ¿Puedo ejecutar un binario de Linux sin que se establezca el bit de permiso de ejecución?

Cómo establecer o cambiar la zona horaria en Linux

Comando Linux DF – Las 3 opciones más utilizadas

Linux:¿cómo configurar la afinidad del procesador de un proceso en Linux?

Cómo configurar el cortafuegos UFW en Linux

Cómo configurar la dirección IP desde C en Linux

Establecer una página HTML como fondo de pantalla en Linux