我知道我们不能对 suid 二进制文件执行 ptrace。但是,我想知道为什么在二进制文件将其优先权放到 uid 而不是 euid 之后我们不能执行 ptrace。
例如,在二进制文件中,suid 二进制文件在经过一些步骤后会放弃特权。
seteuid (euid); /* euid was obtained by geteuid() */
ret_chdir = chdir (path);
seteuid (ruid); /* ruid was obtained by getuid() */
system("whoami");
printf("Enter any char");
scanf("%c", &junk);
在我的情况下,当打印“whoami”时,它是进程的用户名,而不是进程的所有者。当程序等待垃圾输入时,我试图以 uid 作为用户名附加到正在运行的进程,但即使二进制文件已经放弃了特权,它也失败了。ptrace attach 是否有可能使用已保存的 uid 状态来确定我不是所有者?