2016-11-29 20 views
1

Мне было интересно, какие системные вызовы сделаны echo (команда, а не встроенная оболочка), поэтому я решил отследить ее через dtrace. В частности, я использовал dtruss.Почему я не могу отследить системные вызовы, сделанные `/ bin/echo`?

Считает, что следующие работы (трассировка всех системных вызовов, сделанные sed):

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

Но если попробовать то же самое с echo, я получаю следующее:

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

В самом деле: есть Многие команды, с которыми я получаю эту ошибку. Общность заключается в том, что все эти команды были в /bin или /usr/bin.

Brendan's blog предполагает, что можно использовать dtruss на такие команды, как ls (его пример sudo dtruss ls -l hfsslower.d, где hfsslower.d это обычный текстовый файл). Сообщение в блоге было написано в 2011 году относительно Mac OS X. Но я знаю, что с тех пор OS X имеет различные улучшения безопасности.

Может быть, я нахожусь в какой-то безопасности OS X? Я использую OS X 10.12 Sierra.

ответ

2

Я должен был попытаться найти сообщение об ошибке.

Looks like it is indeed System Integrity Protection.

Вы уже не можете прикреплять DTrace к «ограниченным» процессам на вашем Mac. И под «ограниченным» я имею в виду каждую отдельную утилиту, демон или приложение.

Моя интерпретация статьи:

  • csrutil enable --without dtrace не достаточно, чтобы прикрепить DTrace для встроенных исполняемых файлов
  • Вам нужно вместо того, чтобы сделать полный csrutil disable (это отключает SIP полностью, что является излишним и создает пробел в вашей безопасности, но, похоже, является единственным решением)