a-Column

sperlとは

シェルスクリプトにSビットを立てても、Sビットの動作は行いま
せん。これは、シェル以外のどんなスクリプトでも同じことです。
いろいろ存在するUnixの中には、スクリプトでSビットの動作を行
うものや、そのような設定ができるものがありますが、セキュリティ的な問題があるため一般的ではありません。

ただし、perlスクリプトについては、スクリプトのファイルに
Sビットが立っているかどうかをperl自体がチェックして、
Sビットが立っている場合はSビットつきのperl「sperl」で実行
するようになっています。このため、「Sビットつきのperlスクリ
プト」は期待したとおりの動作をします。ただし、普通のperlより
もセキュリティチェックが厳しくなるため、うまく動作させるには
苦労するかもしれません。

・実行ファイルの所有者のアクセス権に setuid ビットを立てると、その x が s に変わります。

-rwsr-xr-x 1 s035000 student 17816 1月 13日 10時50分 test

実行プログラムに setuid ビットを立てると、そのプログラムは実行した人ではなく所有者によって実行されたことになります。


すなわち mycounter に setuid ビットを立てなければ、 nobody によって実行された mycounter は nobody として mycount データを書き込もうとして失敗しますが、 setuid ビットを立てておけば mycounter は mycounter の所有者(= mycount の所有者)によって実行されたのと同じになりますから、 mycount への書き込みは成功します。

ただ、こうするとあなた以外のいかなるユーザも、このプログラムを通じて、あなたの所有するすべてのファイルにアクセスできる可能性が出てきます(下手をするとあなたの名をかたって他で悪さを働くこともできます)。したがって、setuid ビットを立てるプログラムは、他のユーザがこのプログラムを使って他のことができないよう(myconter なら プログラム中でファイル名を /usr/people/ユーザ名/public_html/mycount というようにフルパス名で指定し、この以外のファイルが操作できないよう )注意深くプログラムを作成する必要があります。

もし、そういう自信がないなら、プログラムに setuid ビットを立てる代りに、データファイルの方のアクセス権を誰もが書き込めるように設定してください。また Perl スクリプトや sh スクリプトに setuid ビットを立てても効果はないので、その場合も同様です。

Last Update : 2005年03月08日 (火) 11:37