我在setuid()调用之后使用prctl(pr_set_dumpable, 1)启用了核心转储生成。我发现使用prctl(pr_set_dumpable, 1)还会改变/proc/(pid)位置的所有文件的所有者:组,这是一个副作用还是预期的影响?
发布于 2012-02-03 06:37:00
需要说明的是,我自己在尝试关闭核心转储时被这个问题给绊倒了,而且我也没有使用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发布于 2014-04-12 06:06:05
是的,它是由dumpable完成的。您可以通过查看以下内容了解原因
然后搜索“dumpable”。inode uid首先设置为GLOBAL_ROOT_UID,然后仅当任务可转储时才设置为所有者uid。
发布于 2011-12-01 17:02:03
您确定是prctl而不是setuid系统调用更改了/proc/self/的所有权吗?我猜setuid应该改变它……
https://stackoverflow.com/questions/8338065
复制相似问题