如下面代码所示:
#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,使得配置立即生效
本文讨论了在Linux中,如何通过setuid函数影响子进程的core文件生成。当子进程使用setuid改变uid后,abort通常不会产生core文件,这是出于安全考虑。文章还介绍了如何临时和永久设置系统参数以允许core文件生成。
5856

被折叠的 条评论
为什么被折叠?



