Ora che El Capitan è "senza root", c'è un modo per far funzionare dtrace?


21

Ho trovato dtrace uno strumento prezioso per il debug e la risoluzione di tutti i tipi di problemi, per non parlare delle due dozzine di script Dtrace Toolkit forniti da Apple come parte di El Capitan.

Su El Cap, tuttavia, eseguire dtrace di solito si traduce in un'infinità di errori che rendono dtrace quasi inutile.

Risposte:


18

La protezione dell'integrità del sistema in 10.11 può essere disabilitata, sebbene non sia qualcosa che dovresti fare alla leggera.

È possibile disabilitare completamente SIP procedendo come segue:

  1. Riavvia il Mac
  2. Tenere premuto ⌘R durante il riavvio
  3. Dal menu Utilità , eseguire Terminal
  4. Immettere il comando seguente
csrutil disable

In alternativa è possibile riattivare SIP pur consentendo dtracedi funzionare eseguendo anche quanto segue:

csrutil enable --without dtrace

Tieni presente che quando lo fai riceverai il seguente avviso:

Questa è una configurazione non supportata, che potrebbe interrompersi in futuro e lasciare la macchina in uno stato sconosciuto.

Una volta riavviato, dtracefunzionerà come in Yosemite.


Ben fatto - Ho perso questo post quando ho risposto all'altro thread :-) Ho intenzione di ricollegare il video e il blog della sessione di Rich : derflounder.wordpress.com/2015/10/01/…
bmike

2
Questo non è del tutto vero. Con DTrace abilitato tramite csrutil puoi invocare il DTrace del kernel, ma solo su binari che non hanno il flag dei diritti limitati. Non è possibile rimuovere il flag dei diritti limitati, anche come root, con tutto il SIP disattivato. Ciò significa che con DTrace abilitato è possibile solo D binari non di sistema. Tuttavia, se un binario non di sistema utilizza una libreria condivisa installata nelle cartelle di sistema (cosa che fanno molti programmi), non è nemmeno possibile eseguire DTrace. Quindi l'unico modo per far funzionare dtrace "come ha fatto in Yosemite" è fare una copia di tutte le cartelle del sistema e chroot
JJ,

4

Copia il file binario in una directory che non è "limitata", ad esempio, /tmp

csrutil disablenon funziona per dtruss in una certa misura. Ma poiché @JJ ha detto che chrootfunziona, questo mi ha ispirato.

Ancora non so perché funzioni. Potrebbe avere qualcosa a che fare con le "directory protette", immagino.

Ecco il test:

CC@~ $ csrutil status
System Integrity Protection status: disabled.
CC@~ $ sudo dtruss /bin/echo
dtrace: failed to execute /bin/echo: dtrace cannot control executables signed with restricted entitlements
CC@~ $ cp /bin/echo /tmp
CC@~ $ sudo dtruss /tmp/echo

SYSCALL(args)        = return
thread_selfid(0x0, 0x0, 0x0)         = 46811 0
csops(0x0, 0x0, 0x7FFF51B6CA20)      = 0 0
issetugid(0x0, 0x0, 0x7FFF51B6CA20)      = 0 0
shared_region_check_np(0x7FFF51B6A918, 0x0, 0x7FFF51B6CA20)      = 0 0
stat64("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0x7FFF51B6BEA8, 0x7FFF51B6CA20      = 0 0
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.