2

为了防止特权数据逃逸,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

当您在调试并且真正想要查看核心文件时,有什么方法可以启用它?

4

1 回答 1

8

经过更多研究,我有两个答案。

  1. 您可以完全更改系统行为。除了一个用户开发机器之外,这并不真正适合,但它确实有用:

    echo 1 > /proc/sys/fs/suid_dumpable
    

    经测试,有效。

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

    prctl(PR_SET_DUMPABLE, 1);
    

    这样,特权程序自己确定它应该是可转储的,并且整个系统不受影响。

    这个我没试过。

于 2011-08-04T21:47:36.043 回答