chownがSUIDビットをリセット/削除し、機能をリセットするのはなぜですか?

chownがSUIDビットをリセット/削除し、機能をリセットするのはなぜですか?

このコマンドは次のとおりです。

sudo chown -R root:root directory

SUIDビットを削除し、すべての機能をリセットします。文書。なぜ自動的に実行され、マニュアルページに言及されていないのだろうか。奇妙なことは、GUIDビットが削除されないことです。このコマンドを実行する前に、ファイルまたはディレクトリが誰に属しているかは重要ではありません。

SUID/GUIDビット図いいえ削除済み目次(この場合は役に立たないと思います)。

おそらくこれは安全という名前で行われたことだが、私には静かに行ってはならないことだ。

状況はさらに悪化します。

$ setcap cap_sys_rawio,cap_sys_nice=+ep test
$ getcap -v test 
test cap_sys_rawio,cap_sys_nice=ep

$ chown -c -v -R 0:0 .
ownership of './test' retained as root:root
ownership of '.' retained as root:root

$  getcap -v test 
test

ファイルのSUIDビットはtest完全に自動的に削除されます。コマンドが要求したよりもはるかに多くの操作を実行するのと同じです。

答え1

chown権限と機能セットはユーティリティによって消去されません。システムchownコール(Linuxで):

権限のないユーザーが実行可能ファイルの所有者またはグループを変更するとS_ISUIDS_ISGIDモードビットがクリアされます。 POSIXchown()は、ルートが実行されたときにこのようなことが起こるべきかどうかを指定しません。 Linuxの動作はカーネルのバージョンによって異なり、Linux 2.2.13以降、rootは他のユーザーと同じように扱われます。グループではなく実行可能ファイル(つまり、S_IXGRPこのビットが設定されていないファイル)の場合、このS_ISGIDビットは強制ロックを表しますchown()

実行可能ファイルの所有者またはグループがユーザーによって変更されると、そのファイルのすべての機能セットが消去されます。

この部分は上で述べたようにPOSIXで指定:

〜しない限りジョン適切な権限を持つプロセスによって呼び出されると、通常のファイルのset-user-IDおよびset-group-IDビットは正常に完了したときにクリアする必要があります。他のファイルタイプの set-user-ID および set-group-ID ビットはクリアできます。削除されました。

ユーザーに通知するには、chownユーティリティはこの関数を呼び出すときにファイルメタデータに対する追加の変更を明示的に確認する必要がありますchown

理論的根拠によると、私はこれがシステム管理者が問題に陥る可能性を減らすことだと思います。これはchown root:root、ユーザーがsetuidバイナリを事前に準備していても、Linuxでは安全であると見なすことができます。

GNUのchownマニュアルページこの動作に関する言及はありませんが、GNUソフトウェアの場合と同様に、マニュアルページにはこのユーティリティの部分的な内容のみが記載されています。「あなたも見学できますよ」ノードは以下を指します。システムコール文書(これは間違いなくほとんどのユーザーにとって過剰です。)情報ページ、これは実際にこの動作を説明します。

このchownコマンドは時々 set-user-ID または set-group-ID 許可ビットをクリアします。この動作は、chownデフォルトのシステムコールのポリシーと機能によって異なります。これにより、システム固有のファイルモードの変更がコマンドの制御範囲外になる可能性がありますchown。たとえば、chown適切な権限を持つユーザーが呼び出すか、これらのビットが実行権限以外の機能(強制ロックなど)を表す場合、コマンドはこれらのビットに影響を与えない可能性があります。疑わしい場合は、基本的なシステム動作を確認してください。

(質問に対するあなたのラベルに基づいてこれをLinuxに制限しています。Linuxは所有者の変更を特権プロセスに制限するため、他のUnixスタイルシステムよりもセキュリティへの影響が少なくなります。chown(1) POSIX 仕様説明もっと学ぶ。 )

関連情報