Teraz, gdy El Capitan jest „pozbawiony root”, czy jest jakiś sposób, aby uruchomić dtrace?

21

Odkryłem, że dtrace jest nieocenionym narzędziem do debugowania i rozwiązywania wszelkiego rodzaju problemów, nie wspominając o dwóch tuzinach skryptów narzędzi dtrace dostarczonych przez Apple jako część El Capitan.

Jednak w El Cap uruchomienie dtrace zwykle powoduje nieskończoną liczbę błędów, co sprawia, że ​​dtrace jest prawie bezużyteczne.

bahamat
źródło

Odpowiedzi:

18

Ochronę integralności systemu w wersji 10.11 można wyłączyć, ale nie należy tego robić lekko.

Możesz całkowicie wyłączyć SIP, wykonując następujące czynności:

  1. Uruchom ponownie komputer Mac
  2. Przytrzymaj ⌘R podczas restartu
  3. Z menu Narzędzia uruchom Terminal
  4. Wpisz następujące polecenie
csrutil disable

Alternatywnie możesz ponownie włączyć SIP, jednocześnie pozwalając dtracena pracę, wykonując również następujące czynności:

csrutil enable --without dtrace

Pamiętaj, że jeśli to zrobisz, otrzymasz następujące ostrzeżenie:

Jest to nieobsługiwana konfiguracja, która może ulec awarii w przyszłości i pozostawić komputer w nieznanym stanie.

Po ponownym uruchomieniu dtracebędzie działać tak samo jak w Yosemite.

bahamat
źródło
Dobra robota - przegapiłem ten post, odpowiadając na inny wątek :-) Zamierzam ponownie podłączyć wideo sesji Richa i blog: derflounder.wordpress.com/2015/10/01/…
bmike
2
To nie do końca prawda. Po włączeniu DTrace przez csrutil możesz wywoływać DTrace jądra - ale tylko na plikach binarnych, które nie mają flagi ograniczonych uprawnień. Nie można usunąć flagi ograniczonych uprawnień, nawet jako root, przy wyłączonym wszystkich SIP. Oznacza to, że przy włączonym DTrace możesz DTrace tylko nie binaria binarne. Jeśli jednak niesystemowy plik binarny korzysta z biblioteki współużytkowanej zainstalowanej w folderach systemowych (co robi wiele programów), nie można tego również śledzić. Więc jedynym sposobem na to, aby dtrace działało „tak jak w Yosemite”, jest wykonanie kopii wszystkich folderów systemowych i uruchomienie go w chroot
JJ
4

Skopiuj plik binarny do katalogu, który nie jest „ograniczony”, na przykład /tmp

csrutil disabledo pewnego stopnia nie działa dla dtruss. Ale jak powiedział @JJ chroot, to mnie zainspirowało.

Nadal nie wiem, dlaczego to działa. Chyba ma to coś wspólnego z „chronionymi katalogami”.

Oto 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
źródło