如下面代码所示:
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <grp.h>
void mysetuid()
{
setuid(1003);
}
int main()
{
int pid = 0;
pid = fork();
if(pid == 0)
{
///调用mysetuid不会产生core文件,否则会产生core文件
mysetuid();
abort();
}
while(1)sleep(1);
return 0;
}
父进程创建一个子进程,子进程里面调用abort,默认情况下abort会产生core,但是前面通过mysetuid修改了进程的uid,导致core文件不能产生,这主要是操作系统基于安全考量,而不产生core。
可以通过下列命令进行修改产生core文件,默认情况下suid_dumpable里面的值是0
echo 1 > /proc/sys/fs/suid_dumpable
如果要长期生效,需要修改/etc/sysctl.conf,在末行添加fs.suid_dumpable=1,
然后执行命令:sysctl -p /etc/sysctl.conf,使得配置立即生效