我想知道系统是由echo (命令,而不是shell内置的)创建的,所以我决定通过dtrace窥探它。特别是我使用了dtruss。
请考虑以下工作(跟踪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中。
布兰登的博客建议在诸如ls这样的命令上使用dtruss是可能的(他的例子是sudo dtruss ls -l hfsslower.d,其中hfsslower.d是一个普通文本文件)。这篇博文是2011年写的,是关于Mac的,但我知道OS从那时起就有了各种各样的安全增强。
会不会是我遇到了某种OS安全问题?我正在使用OS 10.12塞拉利昂。
发布于 2016-11-29 11:02:33
我应该试着搜索错误信息。
看来这确实是系统完整性保护。
您不能再将DTrace附加到Mac上受限制的进程。所谓限制,我指的是每个内置的实用程序、守护进程或应用程序。
我对这篇文章的解释是:
csrutil enable --without dtrace不足以将DTrace附加到内置可执行文件。csrutil disable (这完全关闭了SIP,这是过度的,在您的安全中造成了缺口,但似乎是唯一的解决方案)。https://stackoverflow.com/questions/40863873
复制相似问题