prctl(pr_set_dumpable,1)有明显的副作用吗?

时间:2011-12-01 07:55:12

标签: linux process

我在prctl(pr_set_dumpable, 1)调用后使用setuid()来启用coredumps生成。 我发现使用prctl(pr_set_dumpable, 1)也会更改所有者:/proc/(pid)位置的所有文件组,这是副作用还是预期?

3 个答案:

答案 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完成的。你可以通过查看

来了解原因

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/fs/proc/base.c?id=refs/tags/v3.14

并搜索&#39; dumpable&#39;。 inode uid首先设置为GLOBAL_ROOT_UID,然后仅在任务可转储时才设置为所有者uid。

答案 2 :(得分:0)

您确定prctl而不是setuid系统调用会更改/proc/self/的所有权吗?我猜测setuid应该改变它......