Agora que o El Capitan está “sem raízes”, existe alguma maneira de fazer o dtrace funcionar?

21

Eu achei o dtrace uma ferramenta inestimável para depuração e solução de problemas de todos os tipos de problemas, sem mencionar as duas dúzias de scripts do kit de ferramentas do dtrace enviados pela Apple como parte do El Capitan.

No El Cap, porém, executar o dtrace geralmente resulta em uma série interminável de erros, tornando o dtrace praticamente inútil.

bahamat
fonte

Respostas:

18

A Proteção de Integridade do Sistema no 10.11 pode ser desativada, embora não seja algo que você deva fazer de ânimo leve.

Você pode desativar o SIP completamente, fazendo o seguinte:

  1. Reinicie seu mac
  2. Mantenha pressionado ⌘R durante a reinicialização
  3. No menu Utilitários , execute o Terminal
  4. Digite o seguinte comando
csrutil disable

Como alternativa, você pode reativar o SIP enquanto ainda permite dtracetrabalhar executando o seguinte:

csrutil enable --without dtrace

Observe que, ao fazer isso, você receberá o seguinte aviso:

Essa é uma configuração não suportada, que provavelmente será interrompida no futuro e deixará sua máquina em um estado desconhecido.

Depois de reiniciar, dtracefuncionará como em Yosemite.

bahamat
fonte
Bem feito - eu perdi este post ao responder a outro segmento :-) Vou vídeo sessão re-plug de Rich e blog: derflounder.wordpress.com/2015/10/01/...
bmike
2
Isso não é bem verdade. Com o DTrace ativado via csrutil, você pode chamar o DTrace do kernel - mas apenas em binários que não possuem o sinalizador de direitos restritos. Você não pode remover o sinalizador de direitos restritos, mesmo como root, com todo o SIP desativado. Isso significa que, com o DTrace ativado, você pode apenas binários fora do sistema do DTrace. No entanto, se um binário que não seja do sistema usa uma lib compartilhada instalada nas pastas do sistema (o que muitos programas fazem), você também não pode fazer isso com o DTrace. Assim, a única maneira de obter o DTrace para o trabalho 'como o fez em Yosemite' é fazer uma cópia de todas as pastas do seu sistema, e chroot-lo
JJ
4

Copie o binário em um diretório que não seja "restrito", por exemplo, /tmp

csrutil disablenão funciona para dtruss até certo ponto. Mas como o @JJ disse que chrootfunciona, isso me inspirou.

Ainda não sei por que isso funciona. Pode ter algo a ver com os "diretórios protegidos", eu acho.

Aqui está o teste:

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
fonte