エルキャピタンが「ルートレス」になった今、dtraceを機能させる方法はありますか?


21

El Capitanの一部としてAppleが出荷した 20個のdtraceツールキットスクリプトは言うまでもなく、dtraceはあらゆる種類の問題をデバッグおよびトラブルシューティングするための貴重なツールであることがわかりました。

ただし、El Capでは、dtraceを実行すると、通常、無限のエラーが発生し、dtraceがほとんど役に立たなくなります。

回答:


18

10.11のシステム整合性保護は無効にできますが、軽く行うべきではありません。

以下を実行することにより、SIPを完全に無効にできます。

  1. Macを再起動します
  2. 再起動中に⌘Rを押したままにする
  3. [ ユーティリティ ]メニューから、ターミナルを実行します
  4. 次のコマンドを入力してください
csrutil disable

またはdtrace、次のコマンドも実行して、SIPを再度有効にして作業を許可できます。

csrutil enable --without dtrace

これを行うと、次の警告が表示されることに注意してください。

これはサポートされていない構成であり、将来破損し、マシンが不明な状態のままになる可能性があります。

再起動dtraceすると、Yosemiteの場合と同じように機能します。


よくやった-他のスレッドに答えるとき、私はこの記事を逃した:-)私がするつもりです再プラグリッチのセッション動画とブログ:derflounder.wordpress.com/2015/10/01/...を
bmike

2
これはまったく真実ではありません。csrutilを介してDTraceを有効にすると、カーネルのDTraceを呼び出すことができます-ただし、制限された資格フラグを持たないバイナリでのみです。すべてのSIPがオフになっていると、rootであっても制限付き資格フラグを削除できません。これは、DTraceを有効にすると、システム以外のバイナリのみをDTraceできることを意味します。ただし、非システムバイナリがシステムフォルダーにインストールされた共有ライブラリ(多くのプログラムで使用)を使用している場合、それもDTraceできません。「それはヨセミテに行ったように」仕事には、dtraceを取得する唯一の方法は、すべてのシステムフォルダのコピーを作成し、それをchrootしすることであるので
JJ

4

バイナリを「制限されていない」ディレクトリにコピーします。たとえば、 /tmp

csrutil disabledtrussではある程度機能しません。しかし、@ 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.