Тепер, коли Ель-Капітан "без коріння", чи є можливість зайнятися роботою dtrace?


21

Я виявив, що dtrace є цінним інструментом для налагодження та усунення несправностей, не кажучи вже про два десятки сценаріїв інструментарію dtrace, що постачаються Apple у складі El Capitan.

На El Cap, однак, запуску dtrace зазвичай призводить до нескінченного викривлення помилок, що робить dtrace всіма, але марними.

Відповіді:


18

Захист цілісності системи в 10.11 можна відключити, хоча це не те, що слід робити з легкістю.

Ви можете повністю відключити SIP, виконавши вказані нижче дії.

  1. Перезавантажте комп'ютер
  2. Утримуйте ⌘R під час перезавантаження
  3. У меню Утиліти запустіть термінал
  4. Введіть наступну команду
csrutil disable

Крім того, ви можете знову ввімкнути SIP, одночасно дозволяючи dtraceпрацювати, виконавши вказані нижче дії.

csrutil enable --without dtrace

Зауважте, що при цьому ви отримаєте таке попередження:

Це непідтримувана конфігурація, яка може в майбутньому зламатися і залишити ваш апарат у невідомому стані.

Після перезавантаження dtraceбуде працювати так, як це було в Yosemite.


Молодці - я пропустив цю публікацію, відповідаючи на іншу тему :-) Я збираюся повторно підключити відео та блог із сеансу Rich : derflounder.wordpress.com/2015/10/01/…
bmike

2
Це не зовсім так. Якщо DTrace увімкнено через csrutil, ви можете викликати DTrace ядра, але лише на бінарних файлах, які не мають прапор обмежених прав. Ви не можете видалити прапор обмежених прав, навіть як root, із вимкненим усім SIP. Це означає, що з увімкненою DTrace ви можете DTrace використовувати лише несистемні бінарні файли. Однак якщо несистемний бінарний файл використовує спільну конфігурацію, встановлену в системних папках (що робить багато програм), ви також не зможете DTrace. Тож єдиний спосіб змусити dtrace працювати "так, як це було в Йосеміті", - це зробити копію всіх папок вашої системи та chroot
JJ

4

Скопіюйте двійковий файл у каталог, який не "обмежений", наприклад, /tmp

csrutil disableне працює для dtruss до певної міри. Але як @JJ сказав chroot, що це працює, це мене надихнуло.

Досі не знаю, чому це працює. Можливо, це може мати щось спільне із "захищеними каталогами".

Ось тест:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.