如何调试需要以root用户身份从gdb(Eclipse)运行的程序作为用户(设置gdb suid root?)

时间:2010-08-06 08:56:04

标签: linux eclipse gdb eclipse-cdt suid

我需要使用Eclipse(gdb)在Linux上调试程序。该程序以root身份运行并且非常大。带调试符号的二进制文件大约250MB,启动后有超过60个运行线程。

我正在考虑最佳解决方案:

  1. 使用gdbserver
  2. 以root身份运行Eclipse
  3. 设置gdb suid
  4. 我认为1号(gdbserver)是最好的解决方案,遗憾的是它不可靠。 gdb和gdbserver之间的连接丢失。我认为在eclipse< - >之间传输的大量数据存在问题。 gdb< - > gdbserver的。

    Number 2(以root身份运行eclipse)意味着以root身份运行每个进程,因此也会干扰版本控制系统,因为Eclipse插件将使用root用户而不是我的用户来更改版本控制的文件。

    我没有尝试过3号(suid gdb)。你怎么看待这件事?它有用吗? 我知道suid root gdb和没有root-Password一样安全,但是我的机器仅用于开发和调试。当然,可能会有一个“启用/禁用”脚本,仅在必要时设置suid位。

    你还有其他建议吗?

2 个答案:

答案 0 :(得分:2)

较少侵入性(不需要乱用suid)是将自己配置为在/ etc / sudoers中以root身份运行gdb,然后运行:

sudo xauth merge~ / .Xauthority

sudo gdb

其中需要第一个命令以允许root连接到X服务器

答案 1 :(得分:1)

1)或3)听起来像是很好的解决方案。

gdb< - > gdbserver流量的数量永远不会很大。丢失的连接意味着你没有使用可靠的传输协议(你使用哪个连接协议 你试过本地套接字吗?),或者你的gdb / gdbserver版本中有一个错误(它的版本是什么?)

您也可以考虑4:首先将程序更改为而不是需要root权限。任何大型程序都会有bug。 Bugs + suid-root => OWND机器。大概你会把这个程序发给你的客户。如果他们遭受OWND机器,他们可以追查你的损失。

通常只有一小组操作真正需要root权限,而这些操作(如果不经常)最好由“辅助二进制”执行(这是suid-root,但不是全部运行)时间,并且很小=>不太可能有错误。)