gpt4 book ai didi

c - 从 `setuid` 进程检测父进程死亡

转载 作者:太空狗 更新时间:2023-10-29 11:21:14 28 4
gpt4 key购买 nike

我编写的 C 应用程序调用 fork() 来创建子进程。该应用程序以根用户身份运行。在父进程中,我使用 wait() 等待终止的子进程。在子进程中,我使用带有 PR_SET_PDEATHSIG 选项的 prctl() 来检测父进程的死亡。它工作正常。为了降低安全问题的风险,子进程调用 setuid() 来更改 UID。问题是:子进程无法再检测到父进程的死亡。

我四处寻找答案并找到了一些有用的链接,但没有帮助:

如何正确地做到这一点?

最佳答案

我只是偶然发现了同样的问题,内核在凭证更改时重置了 PDEATH 信号:

https://github.com/torvalds/linux/blob/master/kernel/cred.c#L450

这可以通过以下代码和 strace -f 来验证:

#include <sys/prctl.h>
#include <unistd.h>
#include <signal.h>

int main(int argc, char *argv[])
{
if (fork() == 0) {
// This works as expected
setgid(1000);
setuid(1000);

prctl(PR_SET_PDEATHSIG, SIGTERM);

// This doesn't work since pdeath_signal will be reset
// setgid(1000);
// setuid(1000);

pause();
}
sleep(1);
kill(getpid(), SIGTERM);
return (0);
}

关于c - 从 `setuid` 进程检测父进程死亡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45139073/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com