linux - ptrace suid 进程(在它放弃特权之后)

标签 linux memory process ptrace suid

我知道我们不能对 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/

相关文章:

python - 当我从终端运行 firefox 时,Youtube URL 被截断

linux - 日期命令linux中的无效日期错误

我可以执行驻留在数据段(ELF 二进制文件)中的代码吗?

java - 设置 int 值会导致性能问题

memory - 在 Linux 内核中分配超过 4 MB 的固定连续内存

VB.net 重定向实时进程输出

c++ - 为什么非阻塞套接字在 connect() 或 accept() 之前是可写的?

linux - ffmpeg:加载共享库时出错:libopenh264.so.5

java - Java如何在单独的进程树中执行批处理文件

bash - GNU screen 问题