我知道,对于 setuid 程序,如果没有 root 权限,ptrace 就无法正常工作。那么,gdb 如何与启用 setuid 位的可执行文件和非 root 权限一起工作呢?
为了探索,我使用一个简单的 exec("/bin/id","id",NULL) 可执行文件对其进行了测试。
在以非 root 权限在 gdb 上运行可执行文件的情况下,执行成功,但 euid 没有更改为 root 的(=0)。因此,我怀疑当 setuid 位被设置时,在 gdb 内部,可执行二进制文件在执行之前被复制为临时文件。这似乎是正确的,因为当可执行文件的“读取”权限被删除时,当非 root 用户使用 gdb 执行可执行文件时,gdb 会打印出“权限被拒绝”。
任何熟悉 gdb 的人都可以确认或更正这个想法吗?
感谢您的帮助!
ps 另外,我使用了 gdb (Debian 8.3.1-1) 8.3.1