
私の 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 ビットが設定されている状態では実行できません。まず、Linux ではスクリプトを setuid にすることはできませんが、他の OS では許可されています。次に、bash は setuid として実行されていることを検出し、すぐに権限を削除します。
これは、シェル スクリプトのセキュリティが、通常の C アプリよりも環境に大きく依存するためです。
結局のところ、今日では suid ビットは実行可能バイナリに最も役立ちます。そのようなスクリプト/bash を実行する方法は、suid コンパイルされたバイナリからそれを呼び出すことです。