幾つもの手続きを経てCGIをサーヴァに設置しても、そのままではまだ動きません。
また、動いたとしてもセキュリティ上問題があるかも知れません。
そこで設置後の最後の仕上げとしてパーミッション(属性とも言います)の設定が必要になります。
サーヴァは大抵複数のユーザで共有します。他のユーザが自分の設置したリソースやディレクトリを勝手に改竄したり削除されると問題ですよね。
そこで、例えば「自分は読書き自由だけど、他の人は書換禁止」などと言うように、全てのディレクトリやリソースに制限をつける必要があります。
この制限を表わすのがパーミッションと言うものです。
具体的には、オーナ(当該リソースやディレクトリの持ち主),グループ(同じサーヴァを利用している他のユーザ)そしてノーボディ(第三者)に対して、それぞれ読み出し・書き換え・実行の可否を指定します。
パーミッションの値は、九桁の記号で表わされますが、しばしば三桁の数字で表わされもします。
九桁の記号の場合、左から三桁毎に、三桁の数字の場合は左から一桁毎にそれぞれオーナ・グループ・ノーボディの値を表わします。
記号表記の場合、三桁で一組となります。
数字表記では、以下のようにして計算します。
例えば「6」なら4+2ですから記号で言えば「rw-」、すなわち読出しと書換えができることになります。
パーミッションはオーナであれば自由に変更できます。
テルネットかFTPソフトにパーミッション変更の機能がありますので、それを用いて設定します。
ノーボディ(第三者)は通常ブラウザを用いてHTTPなどを通じてアクセスすることしかできませんが、実際には、Perl言語で作ったスクリプトを用いる事で、書込可能なコンテンツを改竄する事が可能ですので、油断は出来ません。
もちろん、ノーボディに読出しを許した場合は機密ファイルでも閲覧される危険性があります。
グループはノーボディより危険です。
グループはFTPソフトなどを用いてログインした後、ディレクトリ移動で他者のディレクトリを開けます。
その結果、パーミッションの設定に依っては簡単に閲覧・削除・改竄ができる事になります。
グループには特に注意しましょう。グループへのパーミッションは一律「---」つまり「0」でいいくらいです。特にグループの書込みは絶対に許可してはいけません。
CGIスクリプトは大抵は実行中に他のデータファイルを読書きする訳ですが、CGIスクリプトはどのような立場になるのでしょうか。
CGIスクリプトは原則としてノーボディ(第三者)扱いとなります。
つまり、第三者が読書きできるファイルでないと、CGIスクリプトは読書きができないと言うことになります。
このことはセキュリティ上大変危険ですね。CGIだけが読書きできればいいファイルやCGI以外がアクセスすると困るファイルを第三者も読書きできるようにしなければならない訳ですから。
このため、現在では多くのサーヴァがCGIスクリプトに限りオーナ扱いとする仕様にしております(この機構をSuExec(スー・エグゼック)と言います)。この場合はオーナの読書きだけ可能にすれば良く、第三者の読書きを許可する必要が無くなるため、セキュリティが大幅に向上します。
さて、実際にCGIを設置する場合、サーヴァの設定などもあるので一概には言えませんが、以下の値が好ましいです。
この場合、オーナは読書き・実行とも可能で無いといけません。
依って、多くの場合「rwxr-xr-x」すなわち「755」としないといけないとされております。
しかしながら、上述の通り、グループはアクセス不可にすべきです。
また、ノーボディにも余計なアクセス権限を与えない方が安全です。
以上よりCGIスクリプトには「rwx------」つまり「700」とするのが望ましいのです。
CGIとして呼出さないので、読出しできれば問題ありません。
依って「rw-r--r--」すなわち「644」としないといけないとされております。
しかしながら、できればグループやノーボディにはアクセスさせない方が安全でしょう。
従って、ライブラリスクリプトは「rw-------」つまり「600」とするのが望ましいのです。
これもCGIスクリプトが読出せればいいので「rw-------」つまり「600」とするのが望ましいのです。
特にパスワードなどの機密情報を収めたファイルはノーボディに見られると問題なのでアクセスできないようにしましょう。
これもCGIスクリプトが読書きできればいいので「rw-------」つまり「600」とするのが望ましいのです。
サーヴァの仕様に依っては「600」だと動かない場合もあります。このような場合は「606」「646」「666」の順に問題が無くなるまで変更してみましょう。但し、いずれもノーボディが閲覧可能になるという危険があります。
当該ディレクトリを見られるようにする必要が無い限り、ノーボディは読出しの必要は無い筈です。
つまり当該ディレクトリ内に入れればいい訳です。
つまり「rwx-----x」つまり「701」とするのが望ましいのです。
CGIを設置するディレクトリには「index.html」ファイルを設置しましょう。
こうしないと、CGIの設置ディレクトリを第三者がアクセスしてきた場合にディレクトリ内のファイルの一覧を表示してしまう事があります(セキュリティを意識したサーヴァならエラーにしてくれるところもありますが)。機密ファイルがその中にあると後は簡単に覗かれてしまうでしょう(もちろん、パーミッションにも依りますが)。
「index.html」ファイルがあれば、自動的にデフォルトリソースとしてそれが表示されます。