Capacidades para un script en Linux

8

Si quiero establecer una capacidad ( capabilities(7)), como CAP_NET_BIND_SERVICEen un archivo ejecutable y ese archivo es un script , ¿tengo que configurar la capacidad ( setcap(8)) en el intérprete que inicia ese script o es suficiente configurarlo en el archivo de script ¿sí mismo?

Nota: la pregunta se refiere a Scientific Linux 6.1 en particular, pero creo que puede responderse genéricamente.

0xC0000022L
fuente

Respuestas:

8

Establecer la capacidad en el script no será efectivo. Es una situación similar a la de no funcionar un setuidpoco en el script. Al igual que en el último caso, es la implementación de cómo execvemaneja shebang y el razonamiento de seguridad detrás de él (para más detalles, consulte: Permitir setuid en scripts de shell ).

Creo que tienes estas opciones

  1. establecer las capacidades en el propio intérprete (en realidad, más bien una copia del mismo)

    • tiene un problema aquí, cualquiera que pueda ejecutarlo ejecutará con esas capacidades elevadas (podrá ejecutar algún script arbitrario o iniciarlo interactivamente)
  2. escriba un ejecutable de envoltura que tendrá una lógica codificada para ejecutar su script y establezca las capacidades deseadas en este ejecutable

    • asegúrese de que nadie pueda modificar ni eliminar / reemplazar el script
    • todavía haciendo chrootuno podría mal usar tal envoltorio

En ambos casos, deberá asegurarse de que el conjunto de capacidades sobreviva execveestableciendo el inheritableindicador. También puede usar pam_capdistribuido con libcap, por lo general, para activar las capacidades deseadas mediante la configuración solo para usuarios seleccionados.

Y, en general, desea asegurarse de que nadie pueda modificar el comportamiento de su intérprete cambiando el entorno, por ejemplo. PYTHON_PATHo algo similar.

Miroslav Koškár
fuente