Ahora que El Capitán está "desarraigado", ¿hay alguna manera de hacer que dtrace funcione?

21

He encontrado que dtrace es una herramienta invaluable para depurar y solucionar problemas de todo tipo, sin mencionar las dos docenas de scripts de dtrace toolkit enviados por Apple como parte de El Capitan.

Sin embargo, en El Cap, ejecutar dtrace generalmente resulta en una serie interminable de errores que hacen que dtrace sea casi inútil.

bahamat
fuente

Respuestas:

18

La Protección de integridad del sistema en 10.11 puede deshabilitarse, aunque no es algo que deba hacer a la ligera.

Puede deshabilitar SIP por completo haciendo lo siguiente:

  1. Reinicia tu mac
  2. Mantenga presionado ⌘R durante el reinicio
  3. Desde el menú Utilidades , ejecute Terminal
  4. Ingrese el siguiente comando
csrutil disable

Alternativamente, puede volver a habilitar SIP mientras aún permite dtracetrabajar al ejecutar también lo siguiente:

csrutil enable --without dtrace

Tenga en cuenta que, al hacerlo, recibirá la siguiente advertencia:

Esta es una configuración no compatible, que probablemente se rompa en el futuro y deje su máquina en un estado desconocido.

Una vez que reinicie, dtracefuncionará como lo hizo en Yosemite.

bahamat
fuente
Bien hecho: me perdí esta publicación al responder el otro hilo :-) Voy a volver a enchufar el video y el blog de la sesión de Rich : derflounder.wordpress.com/2015/10/01/…
bmike
2
Esto no es del todo cierto. Con DTrace habilitado a través de csrutil, puede invocar el DTrace del kernel, pero solo en binarios que no tienen el indicador de derechos restringidos. No puede eliminar el indicador de derechos restringidos, incluso como root, con todo SIP desactivado. Esto significa que con DTrace habilitado puede DTrace solo binarios que no son del sistema. Sin embargo, si un binario que no es del sistema usa una biblioteca compartida instalada en las carpetas del sistema (lo que hacen muchos programas), tampoco puede DTrace eso. Entonces, la única forma de hacer que dtrace funcione 'como lo hizo en Yosemite' es hacer una copia de todas las carpetas de su sistema y copiarla
JJ
4

Copie el binario en un directorio que no esté "restringido", por ejemplo, /tmp

csrutil disableno funciona para dtruss hasta cierto punto. Pero como dijo @JJ chrootfunciona, esto me inspiró.

Aún no sé por qué esto funciona. Supongo que puede tener algo que ver con los "directorios protegidos".

Aquí está la prueba:

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
Charles
fuente