[PHP-users 16815]DSO(モドキ)でSuexec

Hideo NAKAMITSU nomo @ bluecoara.net
2003年 7月 18日 (金) 11:28:36 JST


中満です.

以前重松さんの[PHP-users 16571] DSOでsuexec??に関して,
DSO + apache-1.3系 + Suexecであれば現在のところhttpdを
root権限で起動せざるを得ないと投稿させていただいたのですが,
少し変則的な方法を考えてみました.

利用者がCGI版を嫌う理由としては
・ファイルに実行権を付与する必要がある
・#!/usr/bin/phpなどを記述する必要がある
・よけいなプロセスが発生する(今回は考えない)
だと思いますが,これらは下記のパッチを当てることで解消されます.

超クイックハックですが,ファイルの拡張子が.phpだった
場合,/usr/bin/phpコマンド(CGI版)を呼び出してスクリプトを実行するため
ファイルに実行権は要りませんし,#!/usr/bin/phpという記述も必要ありません.
もちろん少し改造すればapache-2.x系にも流用可能だと思います.
(mod_becomeなどのように,WebDAVなどには効果がありません)

殆どテストもしていませんが,もし実験したい!という強者が
いらっしゃいましたら結果報告いただけるとうれしいです.

■ apache_1.3.27-fakephp.diff
diff -ur apache_1.3.27.orig/src/support/suexec.c apache_1.3.27/src/support/suexec.c
--- apache_1.3.27.orig/src/support/suexec.c     2002-03-14 06:05:37.000000000 +0900
+++ apache_1.3.27/src/support/suexec.c  2003-07-18 11:09:02.000000000 +0900
@@ -575,10 +575,13 @@
      * Otherwise, she won't find any error in the logs except for
      * "[error] Premature end of script headers: ..."
      */
+    /*
+     * php script may not have execute permission.
     if (!(prg_info.st_mode & S_IXUSR)) {
        log_err("error: file has no execute permission: (%s/%s)\n", cwd, cmd);
        exit(121);
     }
+     */
  
 #ifdef SUEXEC_UMASK
     /*
@@ -617,7 +620,16 @@
        ap_execve(cmd, &argv[3], environ);
     }
 #else /*NEED_HASHBANG_EMUL*/
-    execv(cmd, &argv[3]);
+   /*
+    * If filename is *.php, exec it with /usr/bin/php
+    */
+    if (strstr(cmd, ".php")) {
+      char phpcmd[12] = "/usr/bin/php";
+      execv(phpcmd, &argv[3]);
+    }
+    else {
+      execv(cmd, &argv[3]);
+    }
 #endif /*NEED_HASHBANG_EMUL*/
  
     /*

■ Apacheコンパイル例
httpd.confの設定は通常のSuexec設定と同様です.
AddHandler cgi-scriptには.phpを加えてください.

% tar zxfv apache_1.3.27.tar.gz
% cd apache_1.3.27
% patch -p1 < ../apache_1.3.27-fakephp.diff
% ./configure --enable-module=so --enable-suexec \
--suexec-caller=apache --suexec-docroot=/home \
--suexec-uidmin=10 --suexec-gidmin=10
% make
# make install

/* -----------------------------------
Hideo NAKAMITSU <nomo @ bluecoara.net>
http://solaris.bluecoara.net/
----------------------------------- */



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