[PHP-users 18750]PHP+IISでの不思議な現象

UCHIDA, Hitoshi gin @ kohoku.jac-net.com
2003年 11月 1日 (土) 17:17:42 JST


内田といいます。

Windows 2000 Server 上の IIS で、PHP 関連の DLL が入ったフォルダのアクセス
権設定により IIS が落ちるという現象が発生したので、事例として報告しておき
ます。

現象としては、PHP 関係 DLL のアクセス権に、通常不必要な書き込み、変更関係
が許可されていると、IIS が落ちるというもので、「きちんとした」アクセス権の
設定がしてあれば実質問題ないものです。

現象 :

isapi で設定された Win2000 Server, IIS, Oracle8i 環境において、isapi,
Extension 関係の DLL が入った c:\php ディレクトリに Everyone フルコントロール
のアクセス権が設定されていると、OCILogon が 2 個同時に失敗した時点で、
IIS が落ちる。

C:\php が Everyone 読み取り+実行+フォルダ内容表示のアクセス権であれ
ば落ちない 

実験方法 :

  サーバは PenIII, 2CPU マシン
  Windows 2000 Server + IIS (2003/10 末時点でのパッチはすべて適用済み)
  PHP 4.3.3 を ISAPI で使用
  Oracle8i (extension の dll で読み込んでいるのは php_oci8.dll だけ)

sapi と extension 関係の DLL は c:\php において、IIS+PHPの設定を行いました。

この構成で、以下の 2 条件で実験します。

  (1) C:\PHP は Everyone や IIS 実行ユーザには読み取りと実行のアクセス権だけ
  (2) C:\PHP に Everyone フルコントロールのアクセス権

最初にトラブルが発生したのは、それなりのアプリですが、実験は単純化のため、
単純に OCILogon() が一行書いてあるだけのファイルで、しかも Logon 先の
オラクル 8i は実際には動いていません。つまり OCILogon はすべて確実に失敗し
ます。

この環境に、MS Web Application Stress Tool など、適当なツールでアクセスをかけ
ます。

  (A) Web Application Stress Tool で負荷のスレッド数とソケット数が共に 1
  (B) スレッド数またはソケット数のどちらか一方、または両方が 2 以上

上記を組み合わせて実験すると、 (2) -(B) の組み合わせでだけ、IIS が落ちます。

つまり C:\PHP 以下に IIS 実行ユーザの書き込みや変更可能権限が付いた状態で、
同時に 2 個、OCILogon が失敗すると、IIS が落ちるものと思われます。

C:\PHP 以下で、php4isapi.dll の方のパーミッションなのか、php_oci8.dll なのか、
それともどちらかのフォルダのパーミッションなのかまでは追っていません。

以上

----
Uchida Hitoshi  gin @ kohoku.jac-net.com


PHP-users メーリングリストの案内