PerlでのCGI奮闘記。少しをするために多くを学ばねばならぬシリーズその1

である。

最近、今さらながらperlCGIを作って楽しんでいる。

作るといっても、本にのっているコードをなぞって挙動を確かめているだけなのだが。

そして、コードをなぞったところで
あれ、動かない
なぜだ
調べよう

という感じで、ほとんどこの調べる段階と、解決する過程が勉強なのである。
少なくとも書生の場合は。


現時点でのwebサーバーやCGIに関する書生の知識はというと

・webページを表示させるためにはapacheなどwebサーバーを起動する
・webサーバーには設定ファイルがあり、ここで色々と設定ができる(ドキュメントルートとか、CGIを実行できるようにするとか。
・サーバーを起動し、webページを表示する。これらを行うユーザーやグループは設定ファイルで指定する
・基本的に動的にページを作るには、formとかでデータを入力し、submitによって遷移先のページにpostまたはgetで渡し、遷移先ではそれを受け取って色々処理をして表示する
・ページが表示されないなどエラーが出た場合は/var/log/httpd/error_logなどでどこが悪いのかを確認する


まあ、こんな状態でやっている。


で、そんな状態で今回ぶち当たったのはファイル関係の作業である。

・フォームで入力した項目をファイルに保存できるようにしたいけど、
なんかpermissionでエラーが出る。。。


というものだ。
実行ユーザーはapache
apacheユーザーのホームを確認すると
/var/www/
であった。

ドキュメントルートはデフォルトの
/var/www/html
にしてあり、perlで書いたCGIファイルはその直下に置いてある。
今まではこれでなんの問題もなしに実行できていたのだが、
権限不足ってどういうこと??

ファイルやディレクトリの権限まわりをかなり適当に記憶していたツケがここできたのである。

書生の頭の中をめぐったのは。。。。
perlのファイルの所有者をapacheにすれば問題ないのではないか??(もとは別ユーザーで作っていたので)

apacheのホームディレクトリ以下にあるディレクトリ内にファイルを作るのだから
親子関係的に
/var/www ここの持ち主(apache)は
/var/www/html ここのディレクトリ以下にもファイルを作ったりする権限があるだろう

と思っていたのだが、これが誤りだった。

親子とか関係なくファイルを保存するディレクトリに対する書き込み権限が必要だった。

ま、よく考えたらそりゃそうかという気もしてくる。。。

ディレクトリに対する権限について
実行権限:cdできる権限
読み込み権限:ディレクトリ内を閲覧できる権限
書き込み権限:ディレクトリ内にファイルを作成、変更、削除できる権限

いつも使っているものでも実はよく分かっていないままに使っていると
こういうところで混乱したりつまづいたりする。

基礎って重要であると改めて思い知ったのであった。