以非 root 身份调试 setuid 二进制文件

以非 root 身份调试 setuid 二进制文件

我有一个CentOS 7系统。我需要将 GDB 连接到已经运行的应用程序,但得到(显然是常见的)“ptrace:不允许操作”。错误。以 root 身份运行 GDB 可以防止该错误,但我不想诉诸于此。

我研究了这个问题,并找到了多个答案,说明您只需要修改/proc/sys/kernel/yama/ptrace_scope该值0或对文件进行永久修复/etc/sysctl.d/10-ptrace.conf...

嗯,显然每个人都认为你使用的是 YAMA,但这里的情况似乎并非如此。然而,我还没有找到适合我的情况该怎么做。

我查了一下,好像我的系统配置了SELinux,但没有启用。我的内核启动设置包括 flagselinux=0和命令

grep CONFIG_SECURITY /boot/config-`uname -r`

# CONFIG_SECURITY_DMESG_RESTRICT is not set
CONFIG_SECURITY=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_NETWORK=y
CONFIG_SECURITY_NETWORK_XFRM=y
# CONFIG_SECURITY_PATH is not set
CONFIG_SECURITY_SECURELEVEL=y
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
CONFIG_SECURITY_SELINUX_DISABLE=y
CONFIG_SECURITY_SELINUX_DEVELOP=y
CONFIG_SECURITY_SELINUX_AVC_STATS=y
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
# CONFIG_SECURITY_SMACK is not set
# CONFIG_SECURITY_TOMOYO is not set
# CONFIG_SECURITY_APPARMOR is not set
# CONFIG_SECURITY_YAMA is not set

最后getsebool deny_ptrace返回getsebool: SELinux is disabled

据我了解,我的系统当前未启用 LSM,但我仍然受到 ptrace 限制。我在这里不知道下一步该去哪里,或者甚至是什么导致了 ptrace 在这一点上的限制。

我的可执行文件上设置的 setuid 位是否可能导致此问题? gdb 和应用程序本身都是使用同一用户启动的,没有专门添加任何超级用户权限。ps -eouid,comm还显示两者具有相同的 uid。只有应用程序使用setuid位运行,并且文件属于root:root。

答案1

调试具有特权的程序实际上为调试器提供了相同的特权。因此,无论任何安全设置如何,调试具有额外权限的程序都必须要求调试器至少具有所有这些权限。例如,setuid 程序同时拥有原始用户和目标用户的权限,因此调试器必须拥有这两个用户的权限。实际上,这意味着调试器必须是 root。在Linux 上,为调试器提供该功能就足够了CAP_SYS_PTRACE(这不会降低调试器的有效权限,但这意味着调试器不会意外覆盖其他用户的文件)。

通常,在运行时调试程序更方便,无需额外的权限。相应地调整文件权限、路径等。如果您需要在实际情况下使用特权调试程序,则调试器需要以 root 身份运行。在 Linux 上,这可以是包含所涉及的两个用户的用户命名空间中的 root。

相关内容