GNU/Linux >> Linux Esercitazione >  >> Linux

gdb sembra ignorare le capacità eseguibili

Mi imbatto nello stesso problema e all'inizio ho pensato come sopra che forse gdb sta ignorando la capacità dell'eseguibile per motivi di sicurezza. Tuttavia, la lettura del codice sorgente e persino l'utilizzo di Eclipse per il debug di gdb stesso quando esegue il debug del mio ext2fs-prog che apre /dev/sda1 , mi rendo conto che:

  1. gdb non è speciale come qualsiasi altro programma. (Proprio come è nella matrice, anche gli stessi agenti obbediscono alla stessa legge fisica, gravità ecc., tranne per il fatto che sono tutti guardiani della porta.)
  2. gdb non è il processo genitore dell'eseguibile sottoposto a debug, invece è il nonno.
  3. Il vero processo padre dell'eseguibile sottoposto a debug è "shell", cioè /bin/bash nel mio caso.

Quindi, la soluzione è molto semplice, a parte l'aggiunta di cap_net_admin,cap_net_raw+eip a gdb, devi applicarlo anche alla tua shell. cioè setcap cap_net_admin,cap_net_raw+eip /bin/bash

Il motivo per cui devi farlo anche con gdb è perché gdb è il processo padre di /bin/bash prima di creare il processo di debug.

La vera riga di comando eseguibile all'interno di gdb è la seguente:

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

E questo è il parametro per vfork all'interno di gdb.


Per coloro che hanno lo stesso problema, puoi aggirare questo eseguendo gdb con sudo.


Tempo fa ho riscontrato lo stesso problema. La mia ipotesi è che l'esecuzione del programma sottoposto a debug con le funzionalità aggiuntive sia un problema di sicurezza.

Il tuo programma ha più privilegi dell'utente che lo esegue. Con un debugger un utente può manipolare l'esecuzione del programma. Quindi, se il programma viene eseguito nel debugger con i privilegi extra, l'utente potrebbe utilizzare questi privilegi per scopi diversi da quelli per cui il programma intendeva utilizzarli. Questo sarebbe un grave buco di sicurezza, perché l'utente non ha i privilegi in primo luogo.


Linux
  1. Linguaggio di programmazione C - Introduzione

  2. Come gestire le capacità dei file Linux

  3. Tenere traccia dei programmi?

  4. Incorporamento di un'icona in un eseguibile Linux

  5. GDB può modificare il codice assembly di un programma in esecuzione?

Come installare gdb in RHEL 8

Come rendere eseguibile un file in Linux

5 consigli per padroneggiare Linux

Viaggio di un programma C verso un eseguibile Linux in 4 fasi

Come analizzo il file core dump di un programma con GDB quando ha parametri da riga di comando?

Puoi ottenere qualsiasi programma in Linux per stampare una traccia dello stack se si verifica un segfault?