gpt4 book ai didi

c - 如何从 root 临时删除权限?

转载 作者:IT王子 更新时间:2023-10-29 00:26:08 24 4
gpt4 key购买 nike

我正在开发一个以 root 身份运行的守护进程,但需要与用户调用 API,我检查了 API 代码,它使用 getuid() 来获取用户。

如果 root 用户通过 setuid() 删除权限,则无法恢复到 root。如果调用 seteuid(),API 仍将作为用户 uid=0 执行某些操作。

我觉得访问API前fork和子进程setuid应该是可以的,但是即使COW,调用API多次也会消耗很大。除了使用进程池是否可以解决问题?

最佳答案

是的!创建单个进程以使用适当的 UID 调用 API,并通过管道、UNIX 域套接字或(共享内存)1 与程序的其余部分通信。

我的意思是,只 fork 一次并让特权用户运行另一个进程。然后根据需要在两者之间建立沟通。此外,您可能需要考虑使用 dbus因为它还与 systemd 完美集成在现代 Linux 上,您希望您的守护进程与两者良好交互。

注意:我绝不是这方面的专家,但这是一个对我来说似乎很清楚的简单想法。您无需为每次 API 调用都创建流程。这是 XY problem 的一个很好的例子,您想要解决的真正问题,与避免 fork() 多次无关,因为这样做的想法是错误的解决方案。您只需要 fork() 一次,放弃特权并在没有特权的情况下留在那里,如果/根据需要与父进程通信。


1任何适合您的 IPC 机制。

关于c - 如何从 root 临时删除权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39202761/

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