首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改用户时未生成Coredump文件

更改用户时未生成Coredump文件
EN

Stack Overflow用户
提问于 2016-01-13 19:53:56
回答 2查看 122关注 0票数 0

以下代码生成coredump文件:

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <pwd.h>
#include <grp.h>
#include <sys/resource.h>

int main() {
    int b = 0;
    int a = 140/b;

    return 0;
}   

输出:Floating point exception (core dumped)

Coredump在/opt/cores中生成

代码语言:javascript
复制
$ ls -al /opt/cores
total 188
drwxrwxrwx  2 root root   4096 Jan 13 16:46 .
drwxr-xr-x 28 root root   4096 Jan 12 11:57 ..
-rw-------  1 root root 344064 Jan 13 16:46 core.prueba.6776.8

但是,这不会生成coredump文件:

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <pwd.h>
#include <grp.h>
#include <sys/resource.h>

int main() {
    std::string usr = "nobody";
    std::string grp = "oinstall";

    group* gp = getgrnam(grp.data());
    passwd* user = getpwnam(usr.data());
    if (gp && user && setgid(gp->gr_gid) == 0 && setuid(user->pw_uid) == 0) {
        std::cout << "changed!" << std::endl;
    } else {
        std::cout << "not changed =(" << std::endl;
    }   
    struct rlimit rlim;
    rlim.rlim_cur = RLIM_INFINITY;
    rlim.rlim_max = RLIM_INFINITY;
    if (setrlimit(RLIMIT_CORE, &rlim) != 0) {
        std::cout << "setrlimit error" << std::endl;
    }   

    getrlimit(RLIMIT_CORE, &rlim);

    std::cout << "rlim_cur: " << (int)rlim.rlim_cur <<", rlim_max: " << (int)rlim.rlim_max << std::endl;
    int b = 0;
    int a = 140/b;

    return 0;
}  

输出:

代码语言:javascript
复制
changed!
rlim_cur: -1, rlim_max: -1
Floating point exception

我已经使用修改后的用户运行了第一段代码,它生成了coredump文件,因此目录具有正确的权限。问题是当我在代码中更改用户时。有什么线索吗?

这发生在Linux上(CentOS 6,CentOS 7,RHEL 6)。

在Solaris工作得很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-13 20:41:58

关于安全机制,诺斯是对的。

解决方案是在更改用户之后添加此

prctl(PR_SET_DUMPABLE, 1, 0,0,0);

现在核心部分产生了。

票数 0
EN

Stack Overflow用户

发布于 2016-01-13 20:37:17

setuid()手册页有以下说明:

如果UID与旧的有效uid不同,则将禁止进程离开核心转储。

这是一种安全机制,您可以更多地了解为什么是这里

您需要通过执行以下操作,使可卸能够使您的进程核心化:

代码语言:javascript
复制
 sysctl -w fs.suid_dumpable=2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34775840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档