1

私の C プログラム (Linux 上) は、/home/me/myfile などのファイルを削除する必要があります。私のプログラムでそれを行う方法は次のとおりです。

...
system ("rm -f /home/me/myfile");
...

このプログラムを実行すると、許可が拒否されたというメッセージが表示されました。ところで、ls -al /home/me/myfile返品-rw-r--r--

ただし、同じユーザー アカウントと同じシェルで C プログラムを実行すると、次のように入力してファイルを簡単に削除できます。rm -f /home/me/myfile

ここで何を見逃したのですか?

ありがとう、

更新:remove(/home/me/myfile)またはを使用unlink(/home/me/myfile)して、プログラムでファイルを削除できます。

4

1 に答える 1

3

まず、ファイルを削除できるかどうかを制御するのは、ディレクトリに対するアクセス許可です。

しかし、そうは言っても、2つの状況の間で異なる可能性のあることがたくさんあります。プログラムが別のユーザーとして実行されている可能性があり(SETUIDビットなど)、パスが異なる可能性があり、別の実行につながる可能性があります。プログラムは、ファイルを表示することさえできないようにjailrmを設定する可能性があります(ただし別のchrootエラーとして現れる可能性があります)など。可能性はかなり大きいです。

ただし、Cは、と呼ばれるファイルを削除するための呼び出しを提供します。unlinkこれを優先的に使用してから、をチェックする必要がありますerrno

which rmどちらの場合も、ファイルと実行可能ファイル、所有者、およびアクセス許可の完全な詳細とともに、の出力を確認することをお勧めします。

于 2012-05-04T16:10:39.040 に答える