Estoy depurando un programa que hace uso de libnetfilter_queue
. La documentación indica que una aplicación de manejo de colas en el espacio de usuario necesita la función CAP_NET_ADMIN
para funcionar. He hecho esto con la utilidad setcap
de la siguiente manera:gdb parece ignorar las capacidades ejecutables
$ sudo setcap cap_net_raw,cap_net_admin=eip ./a.out
He comprobado que las capacidades se aplican correctamente como) funciona el programa y b) getcap
devuelve el siguiente resultado:
$ getcap ./a.out
./a.out = cap_net_admin,cap_net_raw+eip
Sin embargo , cuando intento depurar este programa utilizando gdb
(por ejemplo, $ gdb ./a.out
) desde la línea de comandos, falla debido a que no se han establecido los permisos correctos. La funcionalidad de depuración de gdb
funciona perfectamente de lo contrario y se depura como de costumbre.
Incluso he intentado aplicar estas capacidades al gdb
binario en sí mismo en vano. Hice esto como parecía (como lo demuestra la manpages que el "i
" bandera podría permitido depurando un programa para heredar la capacidad del depurador.
¿Hay algo trivial que me falta o puedo no realmente puede hacer?
GDB usa el subsistema ptrace. ¿Tiene la capacidad CAP_SYS_PTRACE? Funciona con cualquier otro binario? P.ej. un programa hola mundo? – thkala
@thkala: He editado la pregunta para ser más preciso. 'gdb' funciona bien, puede depurar cualquier programa (incluido este) de lo contrario. –
¿Te importaría mencionar el mensaje de error exacto? – thkala