GNU/Linux >> Linux Esercitazione >  >> Linux

Impossibile eseguire sudo; riporta che l'uid effettivo è diverso da zero

Come tracciare sudo

$ sudo  strace -u <username>  sudo -k <command>
  1. sudo esegue strace come root.
  2. strace esegue sudo come <username> passato tramite il -u opzione.
  3. sudo elimina le credenziali memorizzate nella cache dal precedente sudo 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.


Linux
  1. Creare un utente Sudo su Debian - Processo passo dopo passo?

  2. Linux:è il processo che ha un terminale di controllo o è la sessione che ha un terminale di controllo?

  3. Come tenere traccia del processo figlio usando strace?

  4. XAMPP:un altro demone del server Web è già in esecuzione?

  5. Impossibile avviare Nvidia nsight

Quale codice di errore restituisce un processo che restituisce i segfault?

Impossibile avviare php-fpm - impossibile ottenere uid per l'utente 'apache'

ERRORE:ld.so:l'oggetto 'libgtk3-nocsd.so.0' da LD_PRELOAD non può essere precaricato

Monitora continuamente i file aperti/accessibili da un processo

Equivalente di Process Monitor per Linux?

Docker-compose:impossibile compilare SENZA sudo ma posso eseguire i contenitori senza di esso