我有一个简单的 C Wrapper 程序来在提升的上下文中运行 bash 脚本。它位于 FastCGI 包装器后面,并允许一些服务挂钩调用我的 C 程序,然后它将以 root 身份运行我的 bash 脚本。我很清楚安全问题,我的 Web 服务器只允许单个 IP 地址调用 CGI-BIN 脚本。我拥有两台机器,因此几乎没有安全风险。我是一个完整的菜鸟 C 并且已经从互联网上复制了一个片段。
到目前为止,这工作正常:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid( 0 );
return system( "./myscript.sh" );
}
但是我的程序现在需要从 FastCGI 获取 POST 数据。CGI 规范说它通过 STDIN 传递所有原始 POST 数据。我想要的是能够直接将原始 POST 数据从我的 C 程序/包装器的 STDIN 传输到我的脚本中。我尝试了以下方法,但没有奏效:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid( 0 );
dup2(1, 0);
return system( "./myscript.sh" );
}
该脚本在使用普通管道(例如echo "Hey" | ./myscript.sh
)时工作得非常好,但是我不知道如何将我的 C 程序的 STDIN 管道传输到我的脚本的 STDIN。