Gibt es eine Möglichkeit, Dtrace zum Laufen zu bringen, nachdem El Capitan "wurzellos" ist?

20

Ich habe festgestellt, dass Dtrace ein unschätzbares Tool für das Debuggen und die Fehlerbehebung bei allen möglichen Problemen ist, ganz zu schweigen von den zwei Dutzend Dtrace-Toolkit-Skripten, die Apple im Rahmen von El Capitan ausgeliefert hat.

Auf El Cap führt das Ausführen von dtrace normalerweise zu einer endlosen Fehlerhäufigkeit, die dtrace praktisch unbrauchbar macht.

Bahamat
quelle

Antworten:

18

Der Systemintegritätsschutz in 10.11 kann deaktiviert werden, was Sie jedoch nicht leichtfertig tun sollten.

Sie können SIP vollständig deaktivieren, indem Sie folgende Schritte ausführen:

  1. Starten Sie Ihren Mac neu
  2. Halten Sie ⌘R während des Neustarts gedrückt
  3. Führen Sie im Menü Dienstprogramme die Option Terminal aus
  4. Geben Sie den folgenden Befehl ein
csrutil disable

Alternativ können Sie SIP erneut aktivieren, während Sie noch dtracearbeiten können, indem Sie auch Folgendes ausführen:

csrutil enable --without dtrace

Beachten Sie, dass Sie dabei folgende Warnung erhalten:

Dies ist eine nicht unterstützte Konfiguration, die möglicherweise in der Zukunft unterbrochen wird und Ihren Computer in einem unbekannten Zustand lässt.

Funktioniert nach dem Neustart dtracewie in Yosemite.

Bahamat
quelle
Gut gemacht - ich habe diesen Beitrag verpasst, als ich auf den anderen Thread geantwortet habe :-) Ich werde Richs Sitzungsvideo und Blog erneut einstecken
bmike
2
Das ist nicht ganz richtig. Wenn DTrace über csrutil aktiviert ist, können Sie das DTrace des Kernels aufrufen - jedoch nur auf Binärdateien, die nicht über das Flag für eingeschränkte Berechtigungen verfügen. Sie können das Flag für eingeschränkte Berechtigungen nicht entfernen, auch nicht als Root, wenn alle SIP-Funktionen deaktiviert sind. Dies bedeutet, dass Sie bei aktiviertem DTrace nur Nicht-System-Binärdateien DTrace können. Wenn eine Nicht-System-Binärdatei jedoch eine gemeinsam genutzte Bibliothek verwendet, die in den Systemordnern installiert ist (was viele Programme tun), können Sie dies auch nicht nachvollziehen. Die einzige Möglichkeit, dtrace so wie in Yosemite zum Laufen zu bringen, besteht darin, eine Kopie aller Ihrer Systemordner
JJ
4

Kopieren Sie die Binärdatei in ein nicht "eingeschränktes" Verzeichnis, z. B. /tmp

csrutil disablefunktioniert für dtruss bis zu einem gewissen grad nicht. Aber wie @JJ sagte chroot, hat mich das inspiriert.

Ich weiß immer noch nicht, warum das so ist. Es kann etwas mit den "geschützten Verzeichnissen" zu tun haben, denke ich.

Hier ist der 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
Charles
quelle