
実行可能でほぼ機能する C .cgi プログラムがあります。ただし、いくつかのファイル操作を行う必要があるため、.cgi プログラムを chown root および chmod +s します。
-rwsr-sr-x 1 root root 59140 2015-07-20 13:39 sectl.cgi
実行すると、プログラムに必要な権限がないため、rename()コマンドは失敗します。コマンドの出力は次のようになります。
system("whoami");
wwwrun です。ここで何が起こっているのでしょうか?
(他のシステムでも同じことを成功させたことは確かです)
オープンSUSE 11.2
答え1
留意すべき点がいくつかあります。
- スクリプトのsetuidは無効になっている可能性があります(シェルスクリプトでsetuidを許可する例えば)。
- たとえあなたのプログラムが実際にはバイナリ、それが置かれているファイルシステムが、ノースイドオプション、またはSELinuxが機能を禁止している(例えばsetuid バイナリを使用した LD_PRELOAD)。