Maintenant qu'El Capitan est «sans racine», existe-t-il un moyen de faire fonctionner dtrace?

21

J'ai trouvé que dtrace était un outil inestimable pour le débogage et le dépannage de toutes sortes de problèmes, sans parler des deux douzaines de scripts de trousse à outils dtrace livrés par Apple dans le cadre d'El Capitan.

Cependant, sur El Cap, l'exécution de dtrace entraîne généralement un nombre infini d'erreurs, ce qui rend dtrace presque inutile.

bahamat
la source

Réponses:

18

La protection de l'intégrité du système dans 10.11 peut être désactivée, mais ce n'est pas quelque chose que vous devez faire à la légère.

Vous pouvez désactiver complètement SIP en procédant comme suit:

  1. Redémarrez votre Mac
  2. Maintenez ⌘R pendant le redémarrage
  3. Dans le menu Utilitaires , exécutez Terminal
  4. Entrez la commande suivante
csrutil disable

Vous pouvez également réactiver SIP tout en permettant dtracede travailler en exécutant également les éléments suivants:

csrutil enable --without dtrace

Notez que, ce faisant, vous obtiendrez l'avertissement suivant:

Il s'agit d'une configuration non prise en charge, susceptible de se casser à l'avenir et de laisser votre machine dans un état inconnu.

Une fois que vous aurez redémarré, dtracecela fonctionnera comme dans Yosemite.

bahamat
la source
Bien joué - J'ai raté ce message en répondant à l'autre fil :-) Je vais re-brancher la vidéo et le blog de la session de Rich : derflounder.wordpress.com/2015/10/01/…
bmike
2
Ce n'est pas tout à fait vrai. Avec DTrace activé via csrutil, vous pouvez appeler DTrace du noyau - mais uniquement sur les binaires qui n'ont pas l'indicateur de droits restreints. Vous ne pouvez pas supprimer l'indicateur de droits restreints, même en tant que root, avec tous les SIP désactivés. Cela signifie qu'avec DTrace activé, vous ne pouvez utiliser que les binaires non système DTrace. Cependant, si un binaire non système utilise une bibliothèque partagée installée dans les dossiers système (ce que font de nombreux programmes), vous ne pouvez pas non plus le faire. Donc, la seule façon de faire fonctionner dtrace 'comme il l'a fait dans Yosemite' est de faire une copie de tous vos dossiers système, et de la chrooter
JJ
4

Copiez le binaire dans un répertoire qui n'est pas "restreint", par exemple, /tmp

csrutil disablene fonctionne pas pour dtruss dans une certaine mesure. Mais comme @JJ l'a dit chroot, cela m'a inspiré.

Je ne sais toujours pas pourquoi cela fonctionne. Cela peut avoir quelque chose à voir avec les "répertoires protégés", je suppose.

Voici le test:

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
la source