0

ファイルを作成するこのcコードがあります。

#include <stdio.h>
int main(int argc, char *argv[])
{
    FILE *fp;
    fp=fopen("/home/sss/test3.file","w");
    fprintf(fp, "hi hi hi\n" );
    fclose(fp);
    return 0;   
} 

ファイル fopen() 呼び出しの前に setfsuid() コマンドを追加してプログラムを実行すると、セグメンテーション違反が発生します。

#include <stdio.h>
#incldde <unistd.h>
int main(int argc, char *argv[])
{
    FILE *fp;
    setfsuid(1002);
    fp=fopen("/home/sss/test3.file","w");
    fprintf(fp, "hi hi hi\n" );
    fclose(fp);
    return 0;   
}

setfsuid() コマンドにはルート権限が必要で、サーバー OS を搭載した Linux システムを使用しています。この問題の原因は何ですか?

4

1 に答える 1

1

の結果をチェックして、fopenそうでないことを確認する必要がありNULLます。ファイルシステム アクセス チェックに使用される をsetfsuid変更します。UIDこの変更後、そのファイルを書き込み用に開く権限がない可能性が高いため、fopenNULL が返されます。これにより、segfaultでファイルに書き込もうとすると が発生しますfprintf使用する前に必ず戻り値を確認してください。

于 2013-01-07T18:32:40.777 に答える