八月二八日、木曜日の話
パーミッションの壁

 PHP におけるファイルパーミッションの問題、すっかり忘れてた。

[◆]パーミッションの問題

 世界群歩行者達情報区[冥王]サーバの OS は Linux である。ゆえにファイル一つ一つに所有者と権限の設定が厳格に決められ、時としてこの所有者の違いによっていろいろと問題が起きる。主にファイルの読み書きに関してであり、今回、自由夢幻会場がその壁にぶち当たることとなった。何とか突破口を作り出さねば自由夢幻会場の開発は頓挫してしまう。

 自由夢幻会場は MySQL にデータを保存する文章記録プログラムサイトである、と今まで紹介してきた。実は、この紹介は半分は嘘だ。確かにデータベースにいくつかのデータを記録するが、小説データそのものはデータベースには登録しない。テキストファイルに記録する。データベースに記録するのはあくまで目次情報だけなのである。

 なぜこんな風に分けているのかというと、小説本体のデータまでデータベースに登録すると大量のデータが記録されていくうちに動きがどんどん悪くなってくるのがひとつ。データベースそのものは数十万件のデータを記録できるが、速度が遅い事は一般解放するサイトとしては命取りになりかねない。うちの会社が作っているプログラムサイトみたいに企業向けのものの場合は利用する側もそのあたりがしっかり分かっているから許されるものの、一般公開されているサイトの能力事情なんぞは大抵の人は理解なんかしない。重い、軽いだけの世界である。分ける理由の別のものとして、ファイルにまとめておくと個別にバックアップがとりやすいことが挙げられる。データベースそのもののバックアップを取る方法でもいいのだが、データベースのバックアップはデータベースソフトがないと復元できない。汎用性に欠ける部分があって微妙だ。

 さて本題である。自由夢幻会場は会場管理ユーザーの下に構築されている。PHP も会場管理ユーザー権限で動いている。ところが、PHP を動作させるウェブサーバの管理ユーザーは会場管理ユーザーではない。ウェブサーバシステム管理ユーザー権限で動いている。ので、ウェブサーバの元で動いた PHP が作り出したファイルの管理者はウェブーサーバ管理ユーザーになってしまう。すると何が起きるのかと言うと、一つのサイトの中に複数のユーザーのファイルが混在するようになるわけで違う所有者のファイルへの上書きが出来なくなったりする。ファイル上のデータ操作としてこの状態は実にまずい。

 これを解消するにはファイルの所有者を統一すればよい。作成されるファイルの所有者をウェブサーバ管理者ではなく会場管理者に出来ればこうした管理者権限上の問題は解消できる。そういう仕組みもある。やや、処理速度を犠牲にするらしいのだが。

 やってみた。


 PHP が動作しなくなった。


 いやいや、PHP の頭に一行注ぎ足すだけですよ。


 セッションエラー。


 ついでにほかのところで動いている PHP が一斉に動かなくなった。今のところ、PHP を使用しているウェブサーバスペース利用者は僕しかいないからいいようなものを、ほかに PHP を使っている人がいたら大変なことになる。ひとまず、元に戻す。

 さて、うまいことことが運べばいいのだが……。