2015-11-02 10 views
38

Sembra in OS X 10.11 El Capitan, dtruss e dtrace non possono più fare ciò che devono fare. Questo è l'errore che ottengo quando provo a fare funzionare sudo dtruss curl ...:Esiste una soluzione alternativa per: "dtrace non può controllare gli eseguibili firmati con autorizzazioni limitate"?

DTrace: Impossibile eseguire ricciolo: dtrace non può controllare eseguibili firmato con diritti limitati

ho incontrato persone notando questo problema, ma finora nessuna soluzione.

C'è un modo per risolvere il problema o aggirare questo problema?

+2

Questo sembra a proposito: http://apple.stackexchange.com/questions/208478/how-do-i-disable-system-integrity-protection-sip-aka-rootless-on-os-x-10-11 –

+0

Possibile duplicato di [dtruss non riesce su ps su OS X 10.11] (http: // stackoverflow.it/questions/33275204/dtruss-fail-on-ps-on-os-x-10-11) – kenorb

risposta

7

Come Andrew nota che è a causa di System Integrity Protection, noto anche come "senza radici".

È possibile disabilitarlo completamente o parzialmente (abilitare solo dtrace con alcune limitazioni).

disabilitare completamente SIP

Anche se non è raccomandato da Apple, è possibile disattivare completamente Sistema Integrità protezione su di voi Mac. Ecco come:

  1. Avviare il Mac in modalità di ripristino: riavviarlo e tenere premuto cmd + R finché non viene visualizzata una barra di avanzamento.
  2. Passare al menu Utilità. Scegli Terminale lì.
  3. immettere questo comando per disattivare il sistema di protezione Integrità:

$ csrutil disable

Ti verrà chiesto di riavviare - farlo e tu sei libero da SIP!

disabilitare parzialmente SIP

Fortunatamente, SIP non è monolitica: è costruito da diversi moduli che possibile disattivare/attivare separatamente.

Ripetere i passaggi 1 e 2 dalla sezione «Disabilita completamente SIP» sopra. Ora nel Terminal immettere questi comandi:

$ csrutil clear # restore the default configuration first 
$ csrutil enable --without dtrace # disable dtrace restrictions *only* 

Reboot e godere di nuovo il sistema operativo.

DTrace inizia a lavorare ma siete ancora in grado di allegare DTrace per processi ristrette

Istruzioni fonte: http://internals.exposed/blog/dtrace-vs-sip.html

+2

Si noti che alla fine di queste istruzioni si accenna che fare questo * non funziona *. Non ne sono del tutto sicuro, ma dato che l'errore riguarda cose "firmate con diritti limitati", penso che potrebbe non essere correlato a SIP. – Glyph

+1

@glyph Ho provato questa istruzione e funziona per me. L'avviso alla fine riguarda "Parzialmente disabilitato SIP" - in questo caso se abiliti solo dtrace non sei ancora in grado di rintracciare ** processi di sistema ** che sono ** limitati **. Ma sarai in grado di dtrace di altri processi. –

+0

Assicurati di indirizzare l'eseguibile effettivo; se c'è uno script intermedio che alla fine chiama l'eseguibile, dtrace proverà a collegarsi all'interprete, il che probabilmente non funziona anche con SIP disabilitato. –

4

Sembra completamente invalidante SIP ancora blocchi dtruss per i processi ristretti:

$ /usr/bin/csrutil status 
System Integrity Protection status: disabled. 
$ sudo dtruss /bin/echo "blah" 
dtrace: failed to execute /bin/echo: dtrace cannot control executables signed with restricted entitlements 
$ sw_vers 
ProductName: Mac OS X 
ProductVersion: 10.11.2 
BuildVersion: 15C50 
19

Per coloro che desiderano dtrace sistema spedito in binario dopo csrutil disable,.098.692.706,23321 milioni in una directory che non è "limitato", per esempio, /tmp

[email protected]~ $ csrutil status 
System Integrity Protection status: disabled. 
[email protected]~ $ cp /bin/echo /tmp 
[email protected]~ $ 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 

See commento @ JJ: https://apple.stackexchange.com/questions/208762/now-that-el-capitan-is-rootless-is-there-any-way-to-get-dtrace-working/224731#224731

+1

solo un avviso che non funziona per me su El Capitan 10.11.4. Sto cercando di capire perché Picasa non sta iniziando e così copiato in/tmp ma vedi: '~ $ sudo dtruss -f -t aperto sudo -u $ USER/tmp/Picasa dtrace: impossibile eseguire sudo : dtrace non può controllare i file eseguibili firmati con autorizzazioni limitate ' – sming

+2

Ciò potrebbe causare che dturss sta cercando di rintracciare l'eseguibile sudo. Il secondo sudo non è necessario. –

17

Una volta csrutil enable --without dtrace, c'è un'alternativa a copiare il file binario: eseguire il binario in una finestra di Terminale e traccia il processo stesso del Terminale in un'altra finestra di Terminale.

Nella prima finestra del terminale, trovare il suo PID:

$ echo $$ 
1154 

Nella seconda finestra di terminale, iniziare la traccia:

$ sudo dtruss -p 1154 -f 

indietro, nella prima finestra di terminale, eseguire il processo si desidera tracciare:

$ ls 

A questo punto, si dovrebbe vedere la traccia nella seconda finestra. Ignorare le voci per il PID si sta tracciando (ad esempio, 1154), e il resto sono per il processo (e dei suoi discendenti) che ti interessa.

1154/0x1499: sigprocmask(0x3, 0x7FFF53E5C608, 0x0)  = 0x0 0 
1154/0x1499: sigprocmask(0x1, 0x7FFF53E5C614, 0x7FFF53E5C610)  = 0x0 0 
3100/0xa9f3: getpid(0x7FFF82A35344, 0x7FFF82A35334, 0x2000)   = 3100 0 
3100/0xa9f3: sigprocmask(0x3, 0x10BE32EF8, 0x0)   = 0x0 0 
+1

In altre parole è possibile allegare a un processo in esecuzione ma dtruss non lo avvia. Quello è strano. Sorta sembra un insetto. anche 'dtruss -n' funziona. Si tratta di una soluzione molto più efficace rispetto alla copia. –

1

Vedere my answer sul relativo question "Come può ottenere DTrace per eseguire il comando tracciato con privilegi non-root? " [Sic].

DTrace can snoop processi già in esecuzione. Quindi, avvia un processo in background che aspetta 1sec affinché DTrace si avvii (mi dispiace per le condizioni di gara) e curioso il PID di quel processo.

sudo true && \ 
(sleep 1; ps) & \ 
sudo dtrace -n 'syscall:::entry /pid == $1/ {@[probefunc] = count();}' $! \ 
&& kill $! 

Spiegazione completa nella risposta collegata.

3

Vorrei postare questo come commento ma non sono autorizzato.

Disabilitare SIP è non necessario. Basta copiare il file binario in un percorso alternativo e funziona bene:

$ sudo dtruss ping google.com 
dtrace: system integrity protection is on, some features will not be available 

dtrace: failed to execute ping: dtrace cannot control executables signed with restricted entitlements 
$ sudo cp $(which ping) . 
$ sudo dtruss ./ping google.com 
dtrace: system integrity protection is on, some features will not be available 

SYSCALL(args)  = return 
PING google.com (172.217.10.78): 56 data bytes 
^C 
$ csrutil status 
System Integrity Protection status: enabled. 

per i binari che può ancora funzionare normalmente dopo la copia, questa è l'opzione migliore in quanto cattura l'intera durata del processo e non lo fa richiedere la disabilitazione di eventuali protezioni.

+0

questo lavoro non funziona per me. Sto cercando di rintracciare i miei binari che non sono limitati e ho ancora errori da parte dei dtruss. – horseyguy

Problemi correlati