4

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

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

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

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

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

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

你有什么其他的建议?

4

2 回答 2

3

侵入性较小(无需与 suid 混淆)是配置自己以在 /etc/sudoers 中以 root 身份运行 gdb,然后运行:

sudo xauth 合并 ~/.Xauthority

须藤gdb

需要第一个命令来允许根打开到 X 服务器的连接

于 2010-12-02T15:00:38.153 回答
1

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

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

您也可以考虑 4:首先将程序更改为不需要root 权限。任何大型程序都会有错误。错误 + suid-root => OWND 机器。大概您会将此程序发送给您的客户。如果他们遭受 OWND 机器,他们可以追究您的损失。

通常只有非常少的一组操作真正需要 root 权限,并且这些操作(如果足够少的话)最好由“辅助二进制文件”(它是 suid-root,但它不会一直运行,并且很小=>不太可能有错误)。

于 2010-08-06T16:41:34.743 回答