当程序以root身份运行时,ubuntu没有发生核心转储(sudo)

时间:2009-10-28 13:29:36

标签: linux ubuntu

当我运行一个会导致分段故障的程序作为root用户时,核心不会被转储..我检查了ulimit -c并且它是无限的...但是如果我作为普通用户运行程序正在转储核心..

    suresh@suresh-desktop:~$ ulimit -c
    unlimited
    suresh@suresh-desktop:~$ ./main 
    Segmentation fault (core dumped)
    suresh@suresh-desktop:~$ sudo ./main 
    Segmentation fault
    suresh@suresh-desktop:~$ 








    root@suresh-desktop:~# ulimit -c unlimited
    root@suresh-desktop:~# ./main 
    Segmentation fault


    //main.c

        main()
        {

        *((int *)0xb80000) = 123;
        }   

root@suresh-desktop:~# ulimit -a -S
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited










root@suresh-desktop:~# ulimit -a -H
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

5 个答案:

答案 0 :(得分:2)

快速查询。当您以用户suresh身份运行时,用户root拥有的核心文件是否仍然存在(以及它的权限是什么)?

如果权限保护它,系统可能不会覆盖现有的核心转储(尽管root具有root的超能力。)

尝试在以root运行之前删除当前核心文件(同时检查目录权限以确保{{1}}可以在那里创建文件)。

对于它的价值,有很多原因可以解释为什么不会倾销核心。其中一些不适用于您的情况,但您应该检查它们的线索(如果我的上述假设不正确)。

  • 核心将大于当前的ulimit。
  • 您无权转储核心(目录文件)。
  • 文件系统不可写且空间不足。
  • 工作目录中有一个名为core的子目录。
  • 有一个名为core的文件有多个硬链接。
  • 可执行文件启用了suid或sgid位。如果您具有执行权限但对文件没有读取权限,则同上。
  • 分段错误可能是内核oops,请检查系统日志。

答案 1 :(得分:2)

我相信我有同样的问题。通过修改/etc/security/limits.conf文件来添加这一行,我能够在sudo下正确生成核心文件:

root   soft   core   unlimited

似乎运行sudo为用户root创建了一个新shell,核心限制设置为0.这个更改“修复”了这个问题,虽然我确定这会打开一些pote

答案 2 :(得分:1)

setuid可执行文件(sudo就是一个例子)受到一些限制,请尝试:

$ sudo -i
# echo -n 2 > /proc/sys/fs/suid_dumpable
# exit
$ sudo ./main

请务必事先删除任何旧的“核心”文件(不会覆盖现有的核心文件)

涉及潜在的安全风险 - 在网上搜索“suid_dumpable”

答案 3 :(得分:0)

sudo  sh -c "ulimit -c unlimited; ./main"
Segmentation fault (core dumped)

我不确定这是否是正确和安全的方式,但它确实有效。 Sudo启动一个新shell,并在程序执行之前在此shell中设置新限制。

答案 4 :(得分:0)

您可能希望有一个look at this来查看未编写核心转储的原因。 paxdiablo提供的答案可能就是标志。您可能想要做的是调整核心转储的写入方式,即核心{PID}而不仅仅是“核心”。无论如何,这是很好的做法。

man 5 core应该提供我链接的页面中包含的相同信息。