使用c语言将用户从根目录更改为无人目录后,无法生成核心文件

在将用户从根目录更改为无人使用c语言后 ,我确信程序核心转储,但始终无法生成核心文件 。 我相信没有人有权在当前目录生成文件。 和ulimit -c是无限的,我使用:

system("echo 'tesstestestestestetestestet!!!!!!' > hahahahhaahahah"); 

将用户从根目录更改为无人后,文件hahahahhahahahah创build!

所以,我很混乱!

这里是我的C文件:

 #include <pwd.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <stdlib.h> int main() { #if 1 struct passwd *pw; //char *username = "root"; char *username = "nobody"; if (getuid() == 0 || geteuid() == 0) { if (username == 0 || *username == '\0') { fprintf(stderr, "can't run as root without the -u switch\n"); exit(-1); } if ((pw = getpwnam(username)) == NULL) { fprintf(stderr, "can't find the user %s to switch to\n", username); exit(-1); } if (setgid(pw->pw_gid) < 0 || setuid(pw->pw_uid) < 0) { fprintf(stderr, "failed to assume identity of user %s\n", username); exit(-1); } } #endif printf("now user change to group id %d, user id %d\n", getgid(), getuid()); system("echo 'tesstestestestestetestestet!!!!!!' > hahahahhaahahah"); char *test_a = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; char *test_b; strcpy(test_b, test_a); *(char *)1=1; printf("test_b:%s\n", test_b); } 

仔细阅读core(5)手册页:

核心转储文件没有产生的情况有很多种:

…. 从手册页跳过一些文本 ….

  • 该过程正在执行由进程的真实用户(组)ID以外的用户(组)所拥有的set-user-ID(set-group-ID)程序。

所以基本上,一个成功的setuid(2)系统调用后,核心不会被倾倒(出于安全原因)

另请参阅Linux特定的prctl(2)系统调用,使用PR_SET_DUMPABLE

另请阅读http://advancedlinuxprogramming.com/

NB。 有一个nobody写的目录可能是一个坏主意。 nobody用户通常不应该拥有任何文件或目录!