root 以外のユーザーから root コマンドを実行するには、Set uid を使用します。

root 以外のユーザーから root コマンドを実行するには、Set uid を使用します。

次の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は実行前に権限を削除します。

おすすめ記事