suid スクリプトが正しく動作しない

suid スクリプトが正しく動作しない

私の OS は Fedora 24 で、suid ビット機能をテストしようとしました。

以下のbashをSetuid.bashとして記述しました。

#!/bin/bash
if [ $USER = 'root' ]
then
    echo "Like Root Run"
    echo "Root User Add in " $(date) >> /etc/SetUid
else
    echo "Other User Run"
    echo $USER "User Add in " $(date) >> /etc/SetUid
fi

-rwsrw-r-x. 1 root root 249 May 21 14:45 /bin/Setuid.bash許可を得て-rwx------. 1 root root 432 May 21 14:45 /etc/SetUid

/bin/Setuid.bashさて、 root として試してみると、次のようになりました:

ルートランのように

しかし、これを実行するとテスト出会ったユーザー:

他のユーザーの実行

bin/Setuid.bash: 行 8: /etc/SetUid: 権限が拒否されました

どなたか教えていただければ幸いです。私のやり方はどこが間違っているのでしょうか?

答え1

ずっと以前から、bash(および他のシェル インタープリタ) は、suid の乱用が危険であるため、それに対する組み込みのセキュリティ対策を追加しました。SUID シェル スクリプトの危険性

からBash がなぜそうなるのか: suid

Bash スクリプトは、suid ビットが設定されている状態では実行できません。まず、Linux ではスクリプトを setuid にすることはできませんが、他の OS では許可されています。次に、bash は setuid として実行されていることを検出し、すぐに権限を削除します。

これは、シェル スクリプトのセキュリティが、通常の C アプリよりも環境に大きく依存するためです。

結局のところ、今日では suid ビットは実行可能バイナリに最も役立ちます。そのようなスクリプト/bash を実行する方法は、suid コンパイルされたバイナリからそれを呼び出すことです。

関連情報