【问题标题】:Howto debug program that needs to run as root from gdb (Eclipse) as user (set gdb suid root?)如何调试需要以用户身份从 gdb (Eclipse) 以 root 身份运行的程序(设置 gdb suid root?)
【发布时间】:2011-03-26 05:41:17
【问题描述】:

我需要使用 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 位。

您还有其他建议吗?

【问题讨论】:

标签: linux eclipse gdb eclipse-cdt suid


【解决方案1】:

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

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

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

通常只有极少数真正需要 root 权限的操作,并且此类操作(如果足够少的话)最好由“帮助程序二进制文件”(它是 suid-root,但不会运行所有时间,而且很小 => 不太可能有错误)。

【讨论】:

  • “失去连接”这个词是不对的,它看起来更像是一个同步问题。 gdbserver 协议出现奇怪的错误。
【解决方案2】:

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

sudo xauth 合并 ~/.Xauthority

sudo gdb

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 2021-06-22
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多