GNU/Linux >> Tutoriales Linux >  >> Linux

gdb parece ignorar las capacidades ejecutables

Me encontré con el mismo problema y al principio pensé lo mismo que arriba, que tal vez gdb está ignorando la capacidad del ejecutable debido a razones de seguridad. Sin embargo, leer el código fuente e incluso usar eclipse depurando gdb cuando está depurando mi ext2fs-prog que abre /dev/sda1 , me doy cuenta de que:

  1. gdb no es especial como cualquier otro programa. (Al igual que en la matriz, incluso los propios agentes obedecen la misma ley física, la gravedad, etc., excepto que todos son porteros).
  2. gdb no es el proceso principal del ejecutable depurado, sino que es el abuelo.
  3. El verdadero proceso principal del ejecutable depurado es "shell", es decir, /bin/bash en mi caso.

Entonces, la solución es muy simple, además de agregar cap_net_admin,cap_net_raw+eip a gdb, también ha aplicado esto a su shell. es decir, setcap cap_net_admin,cap_net_raw+eip /bin/bash

La razón por la que también tiene que hacer esto con gdb es porque gdb es un proceso padre de /bin/bash antes de crear un proceso depurado.

La verdadera línea de comando ejecutable dentro de gdb es como la siguiente:

/bin/bash exec /my/executable/program/path

Y este es un parámetro para vfork dentro de gdb.


Para aquellos que tienen el mismo problema, pueden omitir este ejecutando gdb con sudo.


Hace un tiempo me encontré con el mismo problema. Supongo que ejecutar el programa depurado con capacidades adicionales es un problema de seguridad.

Su programa tiene más privilegios que el usuario que lo ejecuta. Con un depurador, un usuario puede manipular la ejecución del programa. Entonces, si el programa se ejecuta bajo el depurador con los privilegios adicionales, entonces el usuario podría usar estos privilegios para fines distintos a los que el programa pretendía usar. Esto sería un grave agujero de seguridad, porque el usuario no tiene los privilegios en primer lugar.


Linux
  1. ¿Hacer un seguimiento de los programas?

  2. ¿Por qué Cd no es un programa?

  3. Listar los archivos a los que accede un programa?

  4. ¿Cómo redirigir la información de error del programa C ejecutable a la salida estándar? (Mac OS X)?

  5. Cómo depurar el programa C usando gdb en 6 pasos simples

Cómo instalar gdb en RHEL 8

Cómo hacer un archivo ejecutable en Linux

5 consejos para dominar Linux

Viaje de un programa en C a un ejecutable de Linux en 4 etapas

¿Por qué el encabezado del programa es ejecutable?

¿Puede obtener algún programa en Linux para imprimir un seguimiento de la pila si falla?