我知道我们不能对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状态来判断我不是所有者?
答案 0 :(得分:0)
您的yama ptrace scope可能会阻止您附加到此过程中。从本质上讲,目前大多数Linux内核默认不允许附加到任意进程。
进程可以要求由其父进程(ptrace(PTRACE_TRACEME)
)进行跟踪,但如果要使用PTRACE_ATTACH
,则需要该进程使用prctl
指定它希望你的进程附加到它,或者yama范围需要设置为0(或者,你的进程当然可以以root身份运行)。