не может генерировать файл ядра после изменения пользователя от root до никого на языке c

после изменения пользователя от root до никого на c-языке , и я уверен, что дамп ядра программы, но всегда не может генерировать файл ядра . Я уверен, что никто не имеет права генерировать файл в текущем каталоге. и ulimit -c неограничен, и я использую:

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

после изменения пользователя от root до никого, файл hahahahhaahahah был создан!

поэтому, я очень смущаюсь!

вот мой файл c:

 #include  #include  #include  #include  #include  #include  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) pw_uid)  hahahahhaahahah"); char *test_a = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; char *test_b; strcpy(test_b, test_a); *(char *)1=1; printf("test_b:%s\n", test_b); } 

Внимательно прочитайте основную страницу (5) :

Существуют различные обстоятельства, при которых файл дампа ядра не создается:

…. пропуская текст с страницы man ….

  • Процесс выполняет программу set-user-ID (set-group-ID), которая принадлежит пользователю (группе), отличному от реального пользователя (группы) идентификатора процесса.

Итак, в принципе, после успешного слияния setuid (2) kernel не сбрасывается (по соображениям безопасности)

См. Также системный вызов prctl (2) для Linux с PR_SET_DUMPABLE .

Читайте также http://advancedlinuxprogramming.com/

NB. У вас нет ни одного записываемого каталога, вероятно, плохая идея. nobody должен, как правило, не иметь никакого файла или каталога!