Come tracciare sudo
$ sudo strace -u <username> sudo -k <command>
sudo
eseguestrace
come root.strace
eseguesudo
come<username>
passato tramite il-u
opzione.sudo
elimina le credenziali memorizzate nella cache dal precedentesudo
con-k
opzione (per chiedere nuovamente la password) ed esegue<command>
.
Il secondo sudo
è il tracee (il processo che viene tracciato).
Per aver messo automaticamente l'utente corrente al posto di <username>
, usa $(id -u -n)
.
Perché sudo non funziona con strace
Oltre a questa risposta di Charles, ecco cosa execve()
la pagina di manuale dice:
Se il bit set-user-ID è impostato sul file di programma a cui fa riferimento il nome percorso, l'ID utente effettivo del processo chiamante viene modificato in quello del proprietario del file di programma. Allo stesso modo, quando il bit set-group-ID del file di programma è impostato, l'ID di gruppo effettivo del processo chiamante è impostato sul gruppo del file di programma.
Le suddette trasformazioni degli ID effettivi non vengono eseguite (ovvero, i bit set-user-ID e set-group-ID vengono ignorati) se si verifica una qualsiasi delle seguenti condizioni:
- l'attributo no_new_privs è impostato per il thread chiamante (vedi prctl(2));
- il filesystem sottostante è montato nosuid (il flag MS_NOSUID per mount(2)); o
- il processo di chiamata è in fase di ptracing.
Anche le capacità del file di programma (vedi capacità(7)) vengono ignorate se una delle condizioni precedenti è vera.
I permessi per tracciare un processo, ispezionarne o modificarne la memoria, sono descritti nella sottosezione Controllo della modalità di accesso Ptrace nella sezione NOTE della pagina di manuale di ptrace(2). Ho commentato questo in questa risposta.
Per motivi di sicurezza, il bit setuid e ptrace (utilizzato per eseguire i binari in un debugger) non possono essere onorati entrambi contemporaneamente. La mancata applicazione di questa restrizione in passato ha portato a CVE-2001-1384.
Di conseguenza, qualsiasi sistema operativo progettato con un occhio alla sicurezza smetterà di onorare ptrace all'esecuzione di un binario setuid o non riuscirà a onorare il bit setuid quando ptrace è in uso.
Su Linux, prendi invece in considerazione l'utilizzo di Sysdig -- che, essendo in grado solo di visualizzare ma non modificare il comportamento, non corre gli stessi rischi.