尤其是在 Linux/POSIX 世界中,仅出于临时初始化目的(例如,读取 root 拥有的私钥文件,或打开一个小于 1024 的端口,或增加资源限制)需要一些 root 权限的守护进程,通常似乎遵循一种设计模式,他们使用setuid()
/setresuid()
和setgid()
/之类的函数调用来更改其凭据setresgid()
,然后调用fork()
以将实际程序作为其子程序运行。据说fork()
-ing 是“以防万一”完成的,但是这样做的实际安全考虑是什么?
并且跟进这一点,当(除了setgroups(0, NULL)
,setresgid(GID_NOBODY, GID_NOBODY, GID_NOBODY)
和setresuid(UID_NOBODY, UID_NOBODY, UID_NOBODY)
)程序还主动限制Linux 功能时,这个原因是否仍然相关,通过在不再需要时立即删除所有功能,通过调用cap_set_proc()
?