ファイルが変更された後にsuidビットが設定されないのはなぜですか?

ファイルが変更された後にsuidビットが設定されないのはなぜですか?

グローバルに書き込み可能な(s | g)uidファイルがあります。

ls -lh suid_bin.sh
-rwsr-srwx 1 root root 168 mai   23 16:46 suid_bin.sh

ルート以外のユーザーアカウントを使用してログインします。私は「suid_bin.sh」を修正するためにvi(または他のエディタ)を使います。新しいコンテンツを保存した後、(s | g)uidビットは設定解除されます。

ls -lh suid_bin.sh 
-rwxr-xrwx 1 root root 168 mai   23 16:46 suid_bin.sh

なぜ?修正後(s | g)uidビットを保持する方法はありますか?

答え1

誰かが誤ってsetuidファイルにグループまたは誰でも書き込むことができるビットを設定した場合、Unix権限でファイルを書き込むことは許可されますが、見知らぬ人はそのファイルの所有者とグループIDを変更することはできません。

したがって、修正されたカーネルは、ファイルにマルウェアが書き込まれないように、ファイルからsetuid / setgidビットを削除します。

もちろん、rootユーザーはsetuidビットを復元できますが、一般ユーザーは誰かが間違っているため、特権実行可能ファイルへの書き込みアクセス権を取得した場合、それを悪用することはできません。

そして、この領域のカーネル部分を知っているので、カーネルソースを編集して再コンパイルせずにそれを無効にできるかどうかはわかりません。

Linux の setuid スクリプトは実行後に setuid 状態を取得しません。実際、カーネルは setuid 状態なしでスクリプトソルバーを起動し、スクリプトへのフルパスを最後の解析引数として使用し、ソルバーがスクリプトを通常のスクリプトとして処理するためです。ファイルを読む。ただし、これは他のUnixシステムでは異なる場合があります。

関連情報