我在prctl(pr_set_dumpable, 1)
调用后使用setuid()
来启用coredumps生成。
我发现使用prctl(pr_set_dumpable, 1)
也会更改所有者:/proc/(pid)
位置的所有文件组,这是副作用还是预期?
答案 0 :(得分:2)
为了记录,我自己试图将coredumps 关闭,而我没有使用setuid
。当我运行这个程序时:
#include <stdio.h>
#include <stdlib.h>
#include <sys/prctl.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
char ls_cmd[64];
snprintf(ls_cmd, sizeof(ls_cmd), "/bin/ls -ld /proc/%d/fd", getpid());
system(ls_cmd);
if (0 > prctl(PR_SET_DUMPABLE, 0)) {
perror("can't prctl(PR_SET_DUMPABLE)");
return 1;
}
system(ls_cmd);
return 0;
}
我得到了这个结果(编辑):
$ ./prctl-and-proc
dr-x------ 2 myuname mygroup 0 Feb 2 17:08 /proc/23999/fd
dr-x------ 2 root root 0 Feb 2 17:08 /proc/23999/fd
答案 1 :(得分:1)
是的,它是由dumpable完成的。你可以通过查看
来了解原因并搜索&#39; dumpable&#39;。 inode uid首先设置为GLOBAL_ROOT_UID,然后仅在任务可转储时才设置为所有者uid。
答案 2 :(得分:0)
您确定prctl
而不是setuid
系统调用会更改/proc/self/
的所有权吗?我猜测setuid
应该改变它......