关于setuid后不能产生core文件的现象和解决方法

如下面代码所示:

#include 
#include 
#include 
#include 

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,使得配置立即生效

你可能感兴趣的:(linux,服务器,算法)