我知道我们不能对 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 是否可能使用 saved-uid 状态来确定我不是所有者?
最佳答案
你的 yama ptrace scope可能会阻止您附加到该过程。本质上,当今大多数 Linux 内核默认不允许附加到任意进程。
一个进程可以请求被它的父进程跟踪(ptrace(PTRACE_TRACEME)
),但是如果你想使用PTRACE_ATTACH
,你要么需要指定那个进程,使用 prctl
,它希望您的进程附加到它,或者需要将 yama 范围设置为 0(或者,您的进程当然可以作为 root 运行)。
关于linux - ptrace suid 进程(在它放弃特权之后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37333618/