
root権限を必要とする実行可能ファイルがあります。しかし、システムパスにあるときにのみ機能するようです。私が次のように実行した場合:
$ ./prog
プログラムがrootアクセス権を持っていないと文句を言います。これはsuidプログラムのもう1つのセキュリティ制限のようですが、オンラインで検索した結果、それに関連するものは見つかりません。なぜですか? PATHに追加したり、root.
として呼び出すことに加えて、このプログラムをテストするためのエレガントな方法はありますかmake
?
編集:現在のディレクトリがPATHにあっても機能しません。
答え1
setuid ビットが尊重されるかどうかに影響するプログラムを呼び出すために使用されるパス名には特別なものはありません。確かにここでは2つのうちの1つが起こっています。誰でも
prog
現在のディレクトリで見つかったものと現在のディレクトリで見つかったものは実際には$PATH
同じではありません。誰ですかprog
prog
確かにこれだけで、?を介してprog
同じコピーを見つけることが可能になりました。prog
$PATH
- (例外:同じinodeであるため、同じファイルになることがありますが、別のマウントポイントを介して到着し、そのうちの1つにあり、他方には
nosuid
ない場合があります。)
- (例外:同じinodeであるため、同じファイルになることがありますが、別のマウントポイントを介して到着し、そのうちの1つにあり、他方には
prog
それ自体がそれがどのようにargv[0]
呼び出されたかを調べるために連絡し、期待するものが見つからない場合は、固定された権限に対するアクションを拒否します(または放棄します)。