2016-11-29 6 views
1

Je me demandais quels appels système sont faits par echo (la commande, pas le shell intégré), j'ai donc décidé de l'espionner via dtrace. Plus précisément, j'ai utilisé dtruss.Pourquoi ne puis-je pas suivre les appels système effectués par `/ bin/echo`?

Tenir compte que les travaux suivants (traçabilité de tous les syscalls faites par sed):

sudo dtruss /usr/local/bin/sed 's/a/e/' <<< 'cat' 
SYSCALL(args)  = return 
thread_selfid(0x0, 0x0, 0x0)   = 470642 0 
# and many more… 

Mais si je tente la même chose avec echo, je reçois les éléments suivants:

sudo dtruss /bin/echo 'cat' 
dtrace: failed to execute /bin/echo: unknown error 

En fait: il sont nombreuses commandes avec lesquelles j'obtiens cette erreur. Le point commun est que ces commandes étaient toutes dans /bin ou /usr/bin.

Brendan's blog suggère qu'il est possible d'utiliser dtruss sur des commandes telles que ls (son exemple est sudo dtruss ls -l hfsslower.d, où hfsslower.d est un fichier texte normal). Le blog a été écrit en 2011, concernant Mac OS X. Mais je suis conscient que OS X a eu diverses améliorations de sécurité depuis lors.

Se pourrait-il que je me heurte à la sécurité OS X d'une certaine sorte? J'utilise OS X 10.12 Sierra.

Répondre

2

J'aurais dû essayer de chercher le message d'erreur.

Looks like it is indeed System Integrity Protection.

Vous ne pouvez plus attacher DTrace aux processus «restreints» sur votre Mac. Et par «restreint», je veux dire chaque utilitaire intégré, démon ou application.

Mon interprétation de l'article est:

  • csrutil enable --without dtrace ne suffit pas à joindre DTrace à executables intégrés
  • Vous avez besoin au lieu de faire un plein csrutil disable (cela se complètement SIP, qui est exagéré et crée une lacune dans votre sécurité, mais semble être la seule solution)