私のOSはFedora 24で、suidビット機能をテストしようとしています。
私はSetuid.bashで以下の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
今rootで試してみると、/bin/Setuid.bash
次のようになります。
ルート実行と同様に
しかし、実行するときテスト私が出会ったユーザー:
他のユーザーが実行
bin/Setuid.bash: 行 8: /etc/SetUid: 権限が拒否されました。
誰かが私のアプローチがどこで間違っているのか教えてくれてありがとう。
答え1
ずっと前にbash
suid(および他のシェルソルバー)のデフォルトのセキュリティ対策が危険だったために追加されました。SUIDシェルスクリプトの危険性
Bash スクリプトは suid ビットがセットされた状態で実行できません。まず、Linuxではuidを設定するスクリプトを許可しませんが、他のオペレーティングシステムではこれを許可します。第二に、bashはsetuidで実行されていることを検出し、すぐに権限を削除します。
これは、シェルスクリプトのセキュリティが通常のCアプリケーションよりも環境に大きく依存するためです。
最終的にsuidビットは実行可能なバイナリに最も便利です。これらのスクリプト/bashを実行する1つの方法は、suidコンパイルされたバイナリから呼び出すことです。