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