私が新しいファイルの作成を許可されているUNIXシステムのユーザーがいる場合、別のシステムのルートに既にSUIDされている実行可能ファイルをそのシステムにダウンロードできないのはなぜですか?
シナリオ:
ログインした最初のシェルでこのファイルがrootとして実行されないようにするにはどうすればよいですか?
ファイルを別のファイルシステムにコピーする場合、内部で行われているのは、新しいファイルを作成して内容をコピーすることです。ファイルを別のファイルシステムに移動するには、ソースをコピーしてから削除します。そのため、ファイルをコピーするときは、ファイルを作成するとき以外の特権はありません。
ファイルを作成すると、それはあなたに属します。多くのUNIXバリアントは、所有者(chown
)のルートへの変更を制限しています。ファイルの所有者がファイルを渡すことを許可するものでさえ、そうするときにsetuidビットとsetgidビットをクリアします。グループの所有権の変更(chgrp
)も、root権限で呼び出されない限り、setxidビットをクリアします。そして、そのパーミッションを変更するには、ファイルを所有するかrootになる必要があります。したがって、プログラムを実行する権限がないユーザーまたはグループのsetxidファイルを作成することはできません。
Setxidファイルインジェクションの別の方法は、ファイルシステムのマウントです。ほとんどの構成では、ルートによって直接マウントされたファイルシステムでsetxidビットのみが許可されます(Linux、Samba、Fuseなどのuser
オプションを使用した/etc/fstab
エントリとは対照的)。場合によっては、たとえばNFSマウントの場合、nosuid
オプションを使用してファイルシステムを確実にマウントするのはシステム管理者次第です。
更新:誤解を招く以前の回答は無視してください。混乱を避けるためにここで編集しました。 Gillesの方がはるかに優れた答えを持っています。これをここに組み込んだり、言い換えたりすることができますが、彼は信用に値します。
私が以前持っていたものを本当に見たいなら、編集の時間をクリックすることで、いつものように編集履歴でそれを見つけることができます。
誰かのtarballをダウンロードして抽出すると、この動作に近づきます。uidが7544の場合、「所有権/アクセス権を保持」します。rootの場合は、解凍したファイルのuidが表示されます。非特権ユーザーの場合は、おそらくエラーです。