suはfakerootをどのように検出しますか?

suはfakerootをどのように検出しますか?

suを実行すると、ターゲットユーザーのパスワードを要求されます。ルートとして実行すると、パスワードを求められません。しかし、fakerootで実行すると、どのようにパスワードを要求できますか? fakerootを使用すると、すべてのプログラムにユーザーをrootと考えさせる必要はありませんか?私のプログラムの場合、これを行う唯一の方法はsuを実行して戻りコードを確認することです。しかし、どうすればいいですか?

答え1

su何も検出されません。

からman fakeroot

chmod(2)fakerootは、ファイル操作ライブラリ関数(など)を実際のライブラリ関数の効果をシミュレートする関数stat(2)(ユーザーが実際にルートである場合)に置き換えることによって機能します。これらのラッパー関数は、共有ライブラリまたはプラットフォームの同様の場所
にあります。/usr/lib/*/libfake‐root-\*.so共有オブジェクトはLD_PRELOAD動的ローダメカニズムを介してロードされます。 (望むよりld.so(8)

su、setuid実行可能ファイルとして常にrootとして実行されますが、関係ありません1 LD_PRELOAD。したがって、「一般」プログラムはrootとして実行され、必要な機能が置き換えられると言いますが、suこれらの修正はまったく表示されません。だからsuいつものように走ってください。


¹これは恐ろしいセキュリティホールです。必要なタスクを実行するために含まれるライブラリを設定できます。LD_PRELOAD実行できる場合は、自動的にルートとして実行されます。どのsetuid 実行可能ファイル

答え2

fakeroot(参照)に関する文書がman fakerootこの質問に答えているようです。

説明する fakerootファイル操作に対するroot権限を持つように見える環境でコマンドを実行します。

そして、

はいjoost実際に何が起こっても、ユーザーができる効果だけ

ついに、

セキュリティ面 fakerootsetuidではなく一般的なプログラムです。ユーザーの権限を強化したり、システムのセキュリティを低下させたりしません。

最初のブロックで次の単語を確認してください。現れる。抜粋した例では、joostユーザーを自分であると考えてください。最後のセクションには、fakeroot何らかの方法で権限を高めたり、セキュリティを低下させたりしないという明確な説明があります。特に、これは実際の動作方法が変わらないことを意味しますsu

関連情報