Linux 如何从setcap可执行文件获取coredump?

Linux 如何从setcap可执行文件获取coredump?,linux,debugging,privileges,elevated-privileges,Linux,Debugging,Privileges,Elevated Privileges,为了防止特权数据的转义,Linux上的setcap可执行文件不转储内核: ijw@build$ cat > test.c main() { abort(); } ijw@build$ gcc test.c test.c: In function ‘main’: test.c:1: warning: incompatible implicit declaration of built-in function ‘abort’ ijw@build$ ./a.out Aborted (core

为了防止特权数据的转义,Linux上的setcap可执行文件不转储内核:

ijw@build$ cat > test.c
main() { abort(); }
ijw@build$ gcc test.c
test.c: In function ‘main’:
test.c:1: warning: incompatible implicit declaration of built-in function ‘abort’
ijw@build$ ./a.out 
Aborted (core dumped)
ijw@build$ sudo setcap "cap_net_admin=+ep" a.out                 
ijw@build$ ./a.out 
Aborted

当您正在调试并且确实想要查看核心文件时,有没有办法启用它?

经过进一步研究,我有两个答案

  • 您可以整体更改系统行为。除了一个用户的开发机器之外,这并不真正合适,但它做到了:

    echo 1 > /proc/sys/fs/suid_dumpable
    
    测试,工作

  • 您可以通过在特定程序中调用prctl()来更改其行为:

    通过这种方式,特权程序自行确定它应该是可转储的,并且整个系统不受影响

    我没试过这个


  • 是否启用核心转储
    ulimit-c unlimited
    是的,我在所有其他东西上使用coredumps都没有问题。
    prctl(PR_SET_DUMPABLE, 1);