UFO ET IT

"dtrace는 제한된 권한으로 서명 된 실행 파일을 제어 할 수 없습니다"에 대한 해결 방법이 있습니까?

ufoet 2020. 12. 1. 20:10
반응형

"dtrace는 제한된 권한으로 서명 된 실행 파일을 제어 할 수 없습니다"에 대한 해결 방법이 있습니까?


그것은 OS X 10.11 엘 캐피 탄처럼 보지 않는다, dtruss그리고 dtrace더 이상은 할 의미있는 일을 할 수 있습니다. 이것은 내가 실행하려고 할 때 얻는 오류입니다 sudo dtruss curl ....

dtrace : curl 실행 실패 : dtrace는 제한된 권한으로 서명 된 실행 파일을 제어 할 수 없습니다.

이 문제를 알아 차리는 사람들을 만났지만 지금까지 해결책은 없습니다.

이 문제를 해결하거나 해결하는 방법이 있습니까?


일단 csrutil enable --without dtrace바이너리를 복사하는 대신 다른 방법이 있습니다. 한 터미널 창에서 바이너리를 실행하고 다른 터미널 창에서 터미널 프로세스 자체를 추적합니다.

첫 번째 터미널 창에서 해당 PID를 찾습니다.

$ echo $$
1154

두 번째 터미널 창에서 추적을 시작합니다.

$ sudo dtruss -p 1154 -f

돌아가서 첫 번째 터미널 창에서 추적하려는 프로세스를 실행하십시오.

$ ls

이 시점에서 두 번째 창에서 추적을 볼 수 있습니다. 추적중인 PID (예 : 1154)에 대한 항목은 무시하고 나머지는 관심있는 프로세스 (및 그 하위 항목)에 대한 것입니다.

1154/0x1499:  sigprocmask(0x3, 0x7FFF53E5C608, 0x0)      = 0x0 0
1154/0x1499:  sigprocmask(0x1, 0x7FFF53E5C614, 0x7FFF53E5C610)       = 0x0 0
3100/0xa9f3:  getpid(0x7FFF82A35344, 0x7FFF82A35334, 0x2000)         = 3100 0
3100/0xa9f3:  sigprocmask(0x3, 0x10BE32EF8, 0x0)         = 0x0 0

DTrace를 시스템을 원하는 사람들의 진 후 출하 csrutil disable, copy예를 들어, "제한"되지 않은 디렉토리에/tmp

CC@~ $ csrutil status
System Integrity Protection status: disabled.
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

@JJ의 의견을 참조하십시오 : https://apple.stackexchange.com/questions/208762/now-that-el-capitan-is-rootless-is-there-any-way-to-get-dtrace-working/224731#224731


Andrew가 알다시피 이는 "rootless"라고도 하는 시스템 무결성 보호 때문입니다 .

완전히 또는 부분적으로 비활성화 할 수 있습니다 (일부 제한이있는 dtrace 만 활성화).

SIP를 완전히 비활성화

Apple에서 권장하지는 않지만 Mac에서 시스템 무결성 보호를 완전히 비활성화 할 수 있습니다. 방법은 다음과 같습니다.

  1. Mac을 복구 모드로 부팅 : 재부팅하고 진행률 표시 줄이 나타날 때까지 cmd + R을 누릅니다.
  2. 유틸리티 메뉴로 이동합니다. 거기에서 터미널을 선택하십시오.
  3. 시스템 무결성 보호를 비활성화하려면 다음 명령을 입력하십시오.

$ csrutil disable

재부팅하라는 메시지가 표시됩니다. 그렇게하면 SIP에서 벗어날 수 있습니다!

부분적으로 SIP 비활성화

다행히 SIP는 모 놀리식이 아닙니다. SIP는 개별적으로 비활성화 / 활성화 할 수있는 다양한 모듈로 구축되었습니다.

위의«SIP 완전히 비활성화»섹션의 1 단계와 2 단계를 반복합니다. 이제 터미널에서 다음 명령을 입력하십시오.

$ csrutil clear # restore the default configuration first
$ csrutil enable --without dtrace # disable dtrace restrictions *only*

재부팅하고 OS를 다시 즐기십시오.

Dtrace가 작동하기 시작하지만 여전히 제한된 프로세스에 dtrace를 연결할 수 없습니다.


나는 이것을 코멘트로 게시 할 것이지만 나는 허용되지 않는다.

SIP 비활성화는 필요 하지 않습니다. 바이너리를 대체 위치에 복사하면 정상적으로 작동합니다.

$ sudo dtruss ping google.com
dtrace: system integrity protection is on, some features will not be available

dtrace: failed to execute ping: dtrace cannot control executables signed with restricted entitlements
$ sudo cp $(which ping) .
$ sudo dtruss ./ping google.com
dtrace: system integrity protection is on, some features will not be available

SYSCALL(args)        = return
PING google.com (172.217.10.78): 56 data bytes
^C
$ csrutil status
System Integrity Protection status: enabled.

복사 된 후에도 정상적으로 작동 할 수있는 바이너리의 경우 프로세스의 전체 수명을 캡처하고 보호를 비활성화 할 필요가 없기 때문에 이것이 최선의 옵션입니다.


SIP를 완전히 비활성화하면 제한된 프로세스에 대한 dtruss가 여전히 차단됩니다.

$ /usr/bin/csrutil status
System Integrity Protection status: disabled.
$ sudo dtruss /bin/echo "blah"
dtrace: failed to execute /bin/echo: dtrace cannot control executables signed with restricted entitlements
$ sw_vers 
ProductName:    Mac OS X
ProductVersion: 10.11.2
BuildVersion:   15C50

관련 질문에 대한 내 대답참조하십시오 . "루트가 아닌 권한으로 추적 된 명령을 실행하기 위해 dtrace를 얻으려면 어떻게해야합니까?" [원문].

DTrace 는 이미 실행중인 프로세스를 스누핑 할 수 있습니다 . 따라서 DTrace가 시작될 때까지 1 초를 기다리는 백그라운드 프로세스를 시작하고 (경쟁 상태로 인해 죄송합니다) 해당 프로세스의 PID를 스누핑합니다.

sudo true && \
(sleep 1; ps) & \
sudo dtrace -n 'syscall:::entry /pid == $1/ {@[probefunc] = count();}' $! \
&& kill $!

연결된 답변의 전체 설명.

참고URL : https://stackoverflow.com/questions/33476432/is-there-a-workaround-for-dtrace-cannot-control-executables-signed-with-restri

반응형