私はlinuxsuidを学んでいるので、それをテストするために次のコンテンツを含む小さなcプログラムを作成しました
#include<stdio.h>
int main(){
system("echo 100 >> test.txt");
return 0;
}
-rwsr-xr-x 1 root root 8004 Sep 10 16:19 test
test.txt
ルートによってのみ変更できるファイルです
-rw-r----- 1 root root
ユーザーアカウントでテストプログラムを実行すると、100
が追加されます。 空のファイルに。
しかし、それは出てきます:
sh:test.txt:Permission denied
なぜですか?
承認された回答:
問題は、関数system()
を呼び出すことです。 、シェルを呼び出します/bin/sh
。そしてシェル/bin/sh
suidビットが設定されていません。そのため、Permission denied
が出力されます メッセージ。
パーツは純粋なcコードで記述する必要があります:
int main() {
FILE *fd = fopen("test.txt", "a");
fprintf(fd, "%s", "100");
fclose(fd);
return 0;
}