次の2つのファイルを考えてみましょう。summarize
実行可能なUIDビットは、他のグループに属する他のユーザーがcustomers.datファイルを使用してサマリー実行可能ファイルを実行できるように設定されます。
-rw------- steve sales customers.dat
-rwsr-xr-x steve sales summarize
次に、次の2つのファイルを考えてみましょう。
-rwxrwx--- 1 root root 5974 May 17 13:53 1.out
-rwsrwsrwx 1 root root 5970 May 17 14:03 a.out
どちらも他のユーザーが実行したい実行可能ファイルであり、a.out
呼び出し1.out
を使用して内部で実行しますsystem("./1.out");
。
ただし、常に許可拒否エラーが発生します。
sh: ./1.out: Permission denied
私にとっては、両方のケースが同じように見えます。権限拒否エラーが発生するのはなぜですか?私は何を逃したことがありませんか?
ベストアンサー1
から抜粋Set-UIDプログラムと脆弱性:
– system() が最初に /bin/sh を呼び出すことを覚えておいてください。 Fedoraは、パラメータ「sh」、「-c」、およびユーザー提供の文字列を使用して/ bin / shを実行します。
- Fedoraでは、/ bin / sh(実際にはbash)はSet-UIDビットオプションを無視します。したがって、Set-UIDプログラムからシステム(cmd)を呼び出すときにcmd自体がSet-UIDプログラムでない限り、cmdはroot権限で実行されません。 Bashの次のコードはSet-UIDビットを削除します。実際、Set-UIDシェルを許可する必要がある理由はまったく考えられません。 Fedoraは正しいことをしています。他の多くのUnixオペレーティングシステムではまだこれをやっていません。
これによると、1.outにはuidが設定されておらず、a.outは実行前に権限を削除します。