suid実行可能ファイルは、システムパスにある場合にのみ機能します。

suid実行可能ファイルは、システムパスにある場合にのみ機能します。

root権限を必要とする実行可能ファイルがあります。しかし、システムパスにあるときにのみ機能するようです。私が次のように実行した場合:

$ ./prog

プログラムがrootアクセス権を持っていないと文句を言います。これはsuidプログラムのもう1つのセキュリティ制限のようですが、オンラインで検索した結果、それに関連するものは見つかりません。なぜですか? PATHに追加したり、root.として呼び出すことに加えて、このプログラムをテストするためのエレガントな方法はありますかmake

編集:現在のディレクトリがPATHにあっても機能しません。

ベストアンサー1

setuid ビットが尊重されるかどうかに影響するプログラムを呼び出すために使用されるパス名には特別なものはありません。確かにここでは2つのうちの1つが起こっています。誰でも

  • prog現在のディレクトリで見つかったものと現在のディレクトリで見つかったものは実際には$PATH同じではありません。誰ですかprogprog確かにこれだけで、?を介して prog同じコピーを見つけることが可能になりました。prog$PATH
    • (例外:同じinodeであるため、同じファイルになることがありますが、別のマウントポイントを介して到着し、そのうちの1つにあり、他方にはnosuidない場合があります。)
  • progそれ自体がそれがどのようにargv[0]呼び出されたかを調べるために連絡し、期待するものが見つからない場合は、固定された権限に対するアクションを拒否します(または放棄します)。

おすすめ記事