我明白,我们不能对suid二进制文件进行跟踪。 然而,我想知道为什么我们不能在二进制文件放弃使用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”的情况下,它是进程的用户名,但不是进程的所有者。 当程序正在等待垃圾邮件input时,我试图以uid作为用户名附加到正在运行的进程,但即使二进制文件已经放弃了该特权,但仍然失败。 ptrace attach是否可能使用saved-uid状态来决定我不是所有者?
您的ytra ptrace范围可能会阻止您附加到进程。 实质上,今天大多数Linux内核默认不允许附加到任意进程。
一个进程可以要求通过父进程来跟踪( ptrace(PTRACE_TRACEME) ),但是如果你想使用PTRACE_ATTACH ,你需要使用prctl来指定进程要附加进程的进程,或者是yama作用域需要设置为0(或者,你的进程当然可以以root身份运行)。