2011-12-01 15 views

回答

0

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

+0

是的我相信,setuid不能改变/ proc/self所有权,而使用prctl(pr_set_dumpavlr,1)改变它。 –

+0

我很确定'setuid'(或'seteuid'和其他类似的系统调用)正在改变它。否则,所有的'/ proc /'目录都属于根目录(因为所有进程都有'init'作为他们的祖先,但是'prctl'几乎从不使用),并且它们不会。 –

+0

这就是我曾经的想法!但prctl(pr_set_dumpavlr,1)仅在/ proc/self /文件夹中相应地更改所有者:组。 –

2

为了记录在案,我只是绊倒了这个自己试图将核心转储关闭,和我没有使用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 
相关问题