Linux Install Memo

サーバー管理者によるLinux関連ソフトのインストールメモ

Home » □PHP でユーザーに制限をかけるには!?

□PHP でユーザーに制限をかけるには!?

PHPフリーなWEBサーバーを公開する場合に問題となるのが、「www」で
動いているので見せたくないファイルが山ほどある、ということでしょう。

自分だけがそのWEBサーバーを使うならいいのですが、マルチユーザー環境
ならば、下記の設定を柔軟に行なわなければいけないでしょう。

> safe_mode = On

マルチユーザー環境下ではデフォルト設定といってもいいくらいです。
制限が飛躍的に広がりますが、サーバーをぶっ壊されたりハッキングされる
よりましでしょう。

これをOnにすると、ファイルへのアクセス権限がユーザー別になります。
でも生成されるファイルはなぜか「www」所有なので、ファイルを書き出す
ディレクトリのパーミッションを「777」にしておかないとだめです。

これさえ設定しておけば、「カレントディレクトリ以外で自分が所有して
いないファイルにはアクセス不可能」となります。

自作スクリプトで調べてみた結果は下記のとおりです。

1.1 カレントディレクトリの自分のファイルが開けるか? OKです
1.2 カレントディレクトリの他人のファイルが開けるか? OKです
1.3 カレントディレクトリのWWWのファイルが開けるか? OKです
2.1 階層下の自分のファイルが開けるか? OKです
2.2 階層下の他人のファイルが開けるか? OKです
2.3 階層下のWWWのファイルが開けるか? OKです
3.1 階層上の自分のファイルが開けるか? OKです
3.2 階層上の他人のファイルが開けるか? OKです
3.3 階層上のWWWのファイルが開けるか? OKです
4.1 他人のディレクトリの自分のファイルが開けるか? OKです
4.2 他人のディレクトリの他人のファイルが開けるか? オープン失敗!
4.3 他人のディレクトリのWWWのファイルが開けるか? オープン失敗!
5.1 テンポラリディレクトリの自分のファイルが開けるか? OKです
5.2 テンポラリディレクトリの他人のファイルが開けるか? オープン失敗!
5.3 テンポラリディレクトリのWWWのファイルが開けるか? オープン失敗!
6.1 WWWディレクトリの自分のファイルが開けるか? OKです
6.2 WWWディレクトリの他人のファイルが開けるか? オープン失敗!
6.3 WWWディレクトリのWWWのファイルが開けるか? オープン失敗!

この「自分が所有していないうんぬん」というのがミソで、自分の所有に
なっているディレクトリ階層下ならばアクセスが出来ますが、自分の所有
ではない他人のディレクトリにおいては、そのファイルが完全に自分所有
で無いとアクセスが出来ません。

つまり「www」所有ではアクセスが出来ないのです。

これでもセキュリティ的に不満なら、

> open_basedir = ./

とすることで、そのPHPファイルがあるディレクトリより上のディレクトリ
に対してのアクセスが出来なくしましょう。ただし、これだとパスワード
ファイル等がアクセスできない所には置けなくなるので、ポリシーを明確に
して運用しないといけないですけどね。

Name of author

Name: admin

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です