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

Ian*_*anH 5 eclipse linux gdb eclipse-cdt suid

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

我正在考虑最好的解决方案:

  1. 使用gdb服务器
  2. 以 root 身份运行 Eclipse
  3. 设置 gdb suid

我认为第 1 号(gdbserver)将是最好的解决方案,不幸的是它工作不可靠。gdb 和 gdbserver 之间的连接丢失。我认为eclipse <-> gdb <-> gdbserver之间传输的大量数据存在问题。

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

我没有尝试第三个(suid gdb)。你怎么看待这件事?它到底有用吗?我知道 suid root gdb 和没有 root 密码一样安全,但该机器仅供我用于开发和调试。当然,可能有一个“启用/禁用”脚本,仅在必要时设置 suid 位。

你有什么其他的建议?

Emp*_*ian 1

1) 或 3) 听起来都是不错的解决方案。

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

您还可以考虑4:首先将程序更改为不需要root权限。任何大型程序都会有错误。Bugs + suid-root => 自己的机器。想必您会将此程序发送给您的客户。如果他们自己的机器受损,他们可以向您索赔。

通常只有一小部分真正需要 root 权限的操作,并且此类操作(如果足够不频繁的话)最好由“辅助二进制文件”(即 suid-root,但不会一直运行,并且很小 => 不太可能出现错误)。