[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 メーリングリストの案内