Для справки, я просто споткнулся об этом сам, пытаясь отключить 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