이제 El Capitan은 "루트리스"상태이므로 dtrace를 작동시킬 수있는 방법이 있습니까?


21

필자는 dtrace 가 El Capitan의 일환으로 Apple 에서 제공 24 가지 dtrace 툴킷 스크립트는 말할 것도없이 모든 종류의 문제를 디버깅하고 문제를 해결하는 데 유용한 도구라는 것을 알았습니다 .

그러나 El Cap에서 dtrace를 실행하면 일반적으로 dtrace를 쓸모 없게 만드는 오류가 끝없이 퍼집니다.

답변:


18

10.11의 시스템 무결성 보호는 비활성화 할 수 있지만 가볍게 수행해서는 안됩니다.

다음을 수행하여 SIP를 완전히 비활성화 할 수 있습니다.

  1. Mac 재부팅
  2. 재부팅하는 동안 ⌘R을 누르십시오.
  3. 로부터 유틸리티 메뉴를 실행 터미널
  4. 다음 명령을 입력하십시오
csrutil disable

또는 dtrace다음을 실행하여 계속 작동 하면서 SIP를 다시 활성화 할 수 있습니다 .

csrutil enable --without dtrace

이렇게하면 다음과 같은 경고가 표시됩니다.

이것은 지원되지 않는 구성으로, 나중에 중단되어 시스템을 알 수없는 상태로 남겨 둘 수 있습니다.

재부팅하면 dtraceYosemite에서와 같이 작동합니다.


잘 했어요 - 다른 스레드 :-) 내가 하겠어 응답 때이 게시물을 놓친 다시 플러그 리치의 세션 비디오 및 블로그 : derflounder.wordpress.com/2015/10/01/...
bmike

2
이것은 사실이 아닙니다. csrutil을 통해 DTrace를 활성화하면 커널의 DTrace를 호출 할 수 있지만 제한된 권한 플래그가없는 바이너리에서만 호출 할 수 있습니다. 모든 SIP가 해제 된 상태에서 루트로도 제한된 권한 부여 플래그를 제거 할 수 없습니다. 이는 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.