以非 root 身份調試 setuid 二進製文件
我有一個 CentOS 7 系統。我需要將我的 GDB 附加到一個已經執行的應用程序,但得到(顯然是通常的)“ptrace:不允許操作”。錯誤。以 root 身份執行 GDB 可以防止該錯誤,但我不想這樣做。
我已經研究了這個問題,並確實找到了多個答案,說明您只需要修改
/proc/sys/kernel/yama/ptrace_scope
該值0
或對文件進行永久修復/etc/sysctl.d/10-ptrace.conf
…好吧,顯然每個人都認為您使用的是 YAMA,但這裡似乎並非如此。然而,我還沒有找到在我的情況下該怎麼做。
我檢查過,我的系統似乎配置了 SELinux,但沒有啟用。我的核心啟動設置包括標誌
selinux=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。
調試具有特權的程序有效地賦予調試器相同的特權。因此,無論任何安全設置如何,調試具有額外權限的程序都必須要求調試器至少具有所有這些權限。例如,setuid 程序具有原始使用者和目標使用者的權限,因此調試器必須具有這兩個使用者的權限。實際上,這意味著調試器必須是 root。在 Linux 上,為調試器提供功能就足夠了
CAP_SYS_PTRACE
(這不會降低調試器的有效權限,但這意味著調試器不會意外覆蓋其他使用者的文件)。在沒有額外權限的情況下執行時調試程序通常更方便。相應地調整文件權限、路徑等。如果您需要在實際條件下使用特權調試程序,則調試器需要以 root 身份執行。在 Linux 上,這可以是包含所涉及的兩個使用者的使用者命名空間中的 root。