setuidビットを設定してPythonスクリプトを実行可能にしようとしています。ユーザー'bgmc'に属するプログラムは、ディレクトリ'/ home / bgmc'にいくつかのファイルを作成する必要がありますが、別のユーザー'client'によって呼び出されます。確かに、私はユーザー「クライアント」がプログラムによって作成されたファイルを変更することを望んでいません。c-wrapperを使用してプログラムを呼び出しました(シェルスクリプトのsetuidを参照)。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid(0);
system("/home/bgmc/myprogram.sh");
return 0;
}
プログラムのsetuidビットをオンに設定しました。c-compiledプログラムがrootに属する場合、プログラムは正常に実行され、期待されるファイルを作成します。cでコンパイルされたプログラムのプロパティは次のとおりです。
8 -rws--x--x 1 root root 4657 Mar 2 16:25 myprogram
ただし、myprogramのユーザーグループをbgmc:bgmcに変更すると、プログラムはファイルを作成できなくなります:「アクセスが拒否されました」。行を変更しようとしました:
setuid(0);
と:
setuid(1002);
1002は'bgmc'のユーザーIDであるため(これにはコマンド "id -u bgmc"を使用しました)、これは役に立ちませんでした。
私はむしろプログラムへのrootアクセスを与えたくない。これを防ぐ方法はありますか?