昇格したコンテキストで bash スクリプトを実行する単純な C ラッパー プログラムがあります。これは FastCGI ラッパーの背後にあり、いくつかのサービス フックが C プログラムを呼び出して、ルートとして 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 仕様では、すべての生の POST データを STDIN 経由で渡すと述べています。私が望むのは、この生の 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 にパイプする方法がわかりません。