首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让dtrace以非root权限运行traced命令?

如何让dtrace以非root权限运行traced命令?
EN

Stack Overflow用户
提问于 2010-06-10 00:36:26
回答 8查看 22.9K关注 0票数 62

OS没有linux的strace,但它的dtrace应该要好得多。

但是,我很怀念对单个命令进行简单跟踪的能力。例如,在linux上,我可以编写strace -f gcc hello.c来捕获所有系统调用,这给出了编译器编译我的程序所需的所有文件名列表(优秀的memoize脚本就是基于这个技巧构建的)。

我想在mac上移植memoize,所以我需要一些strace。我实际需要的是gcc读取和写入的文件列表,所以我需要更多的truss。当然,我可以说dtruss -f gcc hello.c并获得一些相同的功能,但是编译器是以根权限运行的,这显然是不可取的(除了巨大的安全风险,一个问题是a.out文件现在归根用户所有:-)

然后我尝试了dtruss -f sudo -u myusername gcc hello.c,但感觉有点不对劲,而且无论如何都不能工作(我一直没有得到a.out文件,不知道为什么)

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-01-15 20:16:04

不是对你问题的回答,而是一些需要知道的事情。OpenSolaris用“特权”(见this page )(部分)解决了这个问题。即使在OpenSolaris中,也不可能允许用户在没有任何额外特权的情况下破坏他们自己的进程。原因在于dtrace的工作方式--它在内核中启用探测。因此,允许非特权用户探测内核意味着用户可以做许多不想要的事情,例如通过在键盘驱动程序中启用探测来嗅探其他用户的密码!

票数 5
EN

Stack Overflow用户

发布于 2012-07-29 10:46:51

最简单的方法是使用sudo:

代码语言:javascript
复制
sudo dtruss -f sudo -u $USER whoami

其他解决方案是首先运行调试器,然后监视新的特定进程。例如。

代码语言:javascript
复制
sudo dtruss -fn whoami

然后在另一个终端中只需运行:

代码语言:javascript
复制
whoami

就这么简单。

你可以在手册中找到更多微妙的论点:man dtruss

或者,您可以将dtruss附加到正在运行的用户进程,例如在Mac上:

代码语言:javascript
复制
sudo dtruss -fp PID

或者在Linux/Unix上使用strace:

代码语言:javascript
复制
sudo strace -fp PID

另一个棘手的技巧可能是执行命令,然后立即附加到进程。下面是一些示例:

代码语言:javascript
复制
sudo true; (./Pages &); sudo dtruss -fp `pgrep -n -x Pages`
sudo true; (sleep 1 &); sudo dtruss -fp `pgrep -n -x sleep`
sudo true; (tail -f /var/log/system.log &); sudo dtruss -fp `pgrep -n -x tail`

注意:

  • first sudo仅用于在第一次运行时缓存密码,
  • 此技巧不适用于像ls, date这样的快速命令行,因为它需要一些时间才能将调试器附加到进程,
  • 您必须在两个位置键入命令,
  • 您可以忽略&要在后台运行进程,如果它已经在执行此操作,
  • 完成调试后,您必须手动终止后台进程(例如,sudo
票数 53
EN

Stack Overflow用户

发布于 2014-01-03 05:28:11

dtruss-n参数将导致dtruss等待并检查与-n参数匹配的进程。-f选项仍然可以跟踪从-n匹配的进程派生的进程。

所有这些都意味着,如果您想dtruss一个以非特权用户身份运行的进程(为了便于讨论,假设它是whoami),请执行以下步骤:

  1. 打开根exist

  • 运行dtruss -fn whoami
  • 这将等待一个名为“exist

”的进程执行shell

  1. 打开非特权shell
  2. 运行whoami
    • 这将执行并退出shell

  1. 观察dtruss窗口中的系统调用跟踪
    • dtruss将不会自动退出-它将继续等待匹配的进程-所以当您是dtruss时,请中断它。

这个答案复制了@kenorb回应的后半部分,但它值得成为一流的答案。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3007868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档