我正在扩展一些在 GNU / Linux (Ubuntu 14.04) 下运行并由一个manager
进程和几个worker
进程组成的软件(我不是其中的作者)。管理器可以通过我可以在配置文件中指定的命令行来启动一个工作器。
启动一个worker后,manager使用管道与它通信。出于安全原因,我们决定让工作人员在与经理不同的用户下运行(让我们称他们为manager-user
and worker-user
)。这是通过编写一个小包装脚本来实现的,该脚本可以切换用户su
并启动一个新的工作人员。在此之后,管理器可以通过管道与工作进程进行通信。这种方法已经工作了好几个月了。
作为 的替代方案su
,我们考虑使用该setuid
位来运行工人。所以我们编写了一个C
包装器,可以由管理器调用来启动一个工作器。如果我们将包装器配置为由 拥有manager-user
,则工作程序将正确启动(但当然,权限错误)。如果我们将包装器配置为归其所有worker-user
并设置该setuid
位,那么工作器将启动但随后退出,因为它们无法连接到管理器。
所以我的问题是:运行setuid
可执行文件如何影响父进程和子进程创建的管道的权限?难道是通过 setuid-wrapper 启动的工作进程没有打开管理器管道的权限(或相反)?如果是这种情况,我们如何更改这些权限?
我几乎没有使用经验,setuid
因此欢迎提供任何信息/解释。