2.パーミッション・・・・・・もっと詳しく知りたい方は検索エンジンで「パーミッションとは」などと入力してみてください。膨大なサイトがヒットします。


パーミッション( permission ) とは、直訳すると「許可, 免許, 許容, 認可」ということです。つまり「許可を与える」ということですね。
ホームページの閲覧者が見ることだけができることを許可されたもの、CGIなどのようにプログラムを実行させてその結果を見せるもの、書込みができるものでは、許可の設定が違います。
ここでは、ホームページを置くサーバーが UNIX であることを前提に CGI を設置するのに必要な パーミッション について勉強したいと思います。

※Windowsだと、ファイルやフォルダのアクセス権、Webサーバーでのアクセス権の設定でしょうか!

@パーミッションの構成

パーミッションは大きく3つのグループに分かれています。
オーナー グループ 一般
(あなた自身、ファイルの持ち主) (共用するグループ) (それ以外)
r w x r w x r w x
4 2 1 4 2 1 4 2 1
※オーナー、グループ、一般はそれぞれ3ビットで表現されます。

  「 r 」は読み込み( read )、「 w 」は書込み( write )、「 x 」は実行( execute )をあらわします。

  上の表をもとに各値の合計を計算して設定します。
  例えば、「644」であれば「 rw- r-- r-- 」 です。オーナーは読み込み・書込み可(6)でグループと一般は読み込みだけ(4)ということになります。
UNIXサーバーでCGIを実行したりCGIでの実行結果をファイルに格納したりするには、このパーミッションがとても重要です。
間違うとプログラムやデータを改ざんされたり、BBSなどに投稿した人たちのパスワードを見られたりしてしまいます。
しっかり理解しておきましょう。(・・・・なんて偉そうにしてますが、takaqの以前失敗したことがあります!)

A通常のHTMLドキュメントでのパーミッション

通常のHTMLドキュメントは、前項でも書きましたがパーミッションは「 644 」に設定されています。
これは、オーナー(あなた自身=管理者=ファイルの持ち主)は書込みと読み込みができますが、他のユーザーは読み込みだけが許可されているという意味です。
あなた自身が作成したものですから、自身は読み込みと編集ができるようにしておきます。
しかし、閲覧者(他のユーザー)にはファイルをいじられると困るので、読み込みだけを許可しておきます。

BCGIのパーミッション

CGIは実行プログラムなので実行許可を与える必要があります。そうしないと、プログラム・ソースが表示される・・・なんてことになってしまうこともあります。
オーナーには「読み込み、書込み、実行」と全てを許可するわけですから、「 7 」、他のユーザーには「読み込み、実行」を許可するので「 5 」ですね。
オーナー グループ 一般
権限 読み込み、書込み、実行 読み込み、実行 読み込み、実行
意味 r w x r w x r w x
ビット表記 1 1 1 1 0 1 1 0 1
重み 4 2 1 4 − 1 4 − 1
10進表記
UNIX表記 r w x r − x r − x
プロバイダによっては、グループが必要ないので、真ん中を省略して「 0 」にできるところもあるようです。
その場合、「 644 」→「 604 」、「 755 」→「 705 」ですね。
でも、真ん中も設定しておくようにすれば、どこでも大体使えるでしょう。

Cデータファイル

CGIが読んだり、書いたりするデータファイル(ログを含む)のことです。
このファイルは、オーナーも閲覧者も皆同じようにCGIを介して読んだり書いたりするので、パーミッションの設定も同じになります。
読み込みと書込みを許可するわけですから、それぞれ「 6 」になりますね。
オーナー グループ 一般
権限 読み込み、書込み 読み込み、書込み 読み込み、書込み
意味 r w x r w x r w x
ビット表記 1 1 0 1 1 0 1 1 0
重み 4 2 − 4 2 − 4 2 −
10進表記
UNIX表記 r w − r w − r w −
このほかに、訪問者に投稿を許可しないで管理者(オーナー)だけが書き込み可能とするようなファイルがあります。
これは、例えば投稿された記事に対してCGIが自動的に返信記事を付ける場合のファイルや、固定的な数式などを記述したファイルなどです。
これらは、管理者(オーナー)だけが更新できればよいため、グループや一般には書き込みを禁止します。
オーナーには「読み込み、書込み」を許可するわけですから、「 6 」、他のユーザーには「読み込み」だけを許可するので「 4 」ですね。
オーナー グループ 一般
権限 読み込み、書込み 読み込み 読み込み
意味 r w x  r w x  r w x
ビット表記 1 1 0  1 0 0  1 0 0
重み 4 2 −  4 − −  4 − −
10進表記    
UNIX表記 r w −  r − −  r − −

CCGIが動作するディレクトリ

CGIでは、データファイルへの同時書込みによるログの消失を防ぐ観点から「ロックシステム」を使用することがあります。
単に、ロックシステムだけでなく、作業用のファイル(テンポラリファイル)を使ってより強力で効率の良いロック処理をしているものもあります。
このロックの手順としては・・・・・
a.書込み開始前にダミーのファイルを生成
b.「書込み中」メッセージなどで他の読み込み、書込みプロセスへ通知、ダミーファイルを削除
c.他のプロセスはダミーファイルの削除を待って書込みを開始
・・・・・です。
ロックシステムは、訪問者(オーナー以外)がダミーファイルやテンポラリファイルを作成することを許可しなければ実現できません。
(Apacheの場合、Apacheのグループとユーザーで実行します・・・・オーナー[あなた自身]ではありません)
ですので、オーナー、グループ、一般の全てに読み込み、書込み、実行が可能なパーミッション「 7 」を設定します。
セキュリティ上問題がありそうに見えますが、ディレクトリ自体が動作するわけでなくCGIが動作しているのでそれほど問題はないと思います。
(CGIの作りがしっかりしていればの話しですね!)
オーナー グループ 一般
権限 読み込み、書込み、実行 読み込み、書込み、実行 読み込み、書込み、実行
意味 r w x  r w x  r w x
ビット表記 1 1 1  1 1 1  1 1 1
重み 4 2 1  4 2 1  4 2 1
10進表記    
UNIX表記 r w x  r w x  r w x

DCGIスクリプトの実行にあたって

CGIは、自身のパソコンで動作するのではなく、サーバーで実行されます。
もし、プロバイダやその他フリースペースなどで実行するのであれば、十分にテストしてバグ解消されていないスクリプトを実行したり、知識不足で作成したスクリプトを実行するとサーバーが暴走したり、停止したりしかねません。
そうなると、プロバイダやフリースペースで一緒にコンテンツを公開している多くのユーザーに多大な迷惑・損害を与えることになります。

そうは言ってもなかなかテスト環境は持てないかもしれません。
その場合、比較的手軽にはWindowsにWebサーバー(IIS, ANHTTPD, 04web etc)を載せてActivePerlを使う手もあります。
もうすこし突っ込んでしたい場合はLinuxやFreeBSDなどのPC-UNIXを構築するのもよいでしょう。
でも、これやっちゃうと結構サーバーが楽しくなってしまい、自宅サーバーにハマってしまうかもしれませんね。

戻る

サイトトップへ