4

我知道我们不能对 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 状态来确定我不是所有者?

4

1 回答 1

0

您的yama ptrace 范围可能会阻止您附加到该进程。本质上,当今大多数 Linux 内核默认不允许附加到任意进程。

ptrace(PTRACE_TRACEME)一个进程可以要求被它的父PTRACE_ATTACH进程prctl( (或者,您的进程当然可以以 root 身份运行)。

于 2016-06-27T07:37:45.830 回答