Hi – I’m trying to upgrade a 1.3.33 Apache server to 1.3.41 with SuEXEC and am struggling with SuEXEC, the server is several years old with no documentation or any of the old software / config logs at all. I’ve got Apache installing just fine with suexec but it’s the “--suexec-docroot” + “--suexec-userdir” I’m struggling with.
The suexec docs & examples are very good but with this particular server the websites are all under the following directory structure:
/home/[a-z]/[a-z]/username/public_html/ so the same as /home/*/*/*/public_html/ I suppose.
The docs don’t give an example for this kind of setup and I’ve been unable to find an example, I thought this would be the correct configure line for Apache:
./configure --prefix= --enable-module=vhost_alias --enable-module=ssl \
--enable-suexec --suexec-caller=nobody --suexec-logfile=/var/log/suexec.log \
--suexec-safepath=/bin:/usr/bin --server-uid=nobody --server-gid=nobody \
--suexec-docroot=home --suexec-userdir=public_html
Server version: Apache/1.3.41 (Unix)
Server built: Oct 30 2008 13:10:03
Server's Module Magic Number: 19990320:18
Server compiled with....
-D EAPI
-D HAVE_MMAP
-D USE_MMAP_SCOREBOARD
-D USE_MMAP_FILES
-D HAVE_FLOCK_SERIALIZED_ACCEPT
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D DYNAMIC_MODULE_LIMIT=64
-D HARD_SERVER_LIMIT=256
-D SO_ACCEPTFILTER
-D ACCEPT_FILTER_NAME="httpready"
-D HTTPD_ROOT=""
-D SUEXEC_BIN="/bin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/httpd.scoreboard"
-D DEFAULT_LOCKFILE="logs/httpd.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
-D ACCESS_CONFIG_FILE="conf/access.conf"
-D RESOURCE_CONFIG_FILE="conf/srm.conf"
./suexec -V
-D DOC_ROOT="/home"
-D GID_MIN=100
-D HTTPD_USER="nobody"
-D LOG_EXEC="/var/log/suexec.log"
-D SAFE_PATH="/bin:/usr/bin"
-D UID_MIN=100
-D USERDIR_SUFFIX="public_html"
But when I try my php test script I get the following in the suexec logfile:
[2008-10-30 12:36:24]: info: (target/actual) uid: (nobody/nobody) gid: (sites/sites) cmd: php.cgi
[2008-10-30 12:36:24]: emerg: cannot get docroot information (home)
But home is there … I checked.
I thought this might be because I didn’t put a “/” in front of home for “--suexec-docroot=home”, but when I did the error changed to:
[2008-10-30 13:11:07]: info: (target/actual) uid: (nobody/nobody) gid: (sites/sites) cmd: php.cgi
[2008-10-30 13:11:07]: error: command not in docroot (/execscriptdir/php.cgi)
Yes I suppose strictly speaking it is not “in” docroot but it is under docroot:
So in a last ditch effort I amended “--suexec-docroot=” to be “--suexec-docroot=/home/*/*/*/” but this causes the “make” of Apache to fail at this stage:
gcc -c -I../os/unix -I../include -funsigned-char -DMOD_SSL=208131 -DEAPI -DUSE_EXPAT -I../lib/expat-lite -DNO_DL_NEEDED -DHTTPD_USER=\"nobody\" -DUID_MIN=100 -DGID_MIN=100 -DUSERDIR_SUFFIX=\"public_html\" -DLOG_EXEC=\"/var/log/suexec.log\" -DDOC_ROOT=\"/home/a/a/aaabbb/ /home/f/i/fiftyfive/ /home/f/i/fiftytwotest/ /home/t/e/testdon/ /home/t/e/testtest\" -DSAFE_PATH=\"/bin:/usr/bin\" suexec.c
gcc: /home/t/e/testtest": No such file or directory
suexec.c: In function `main':
suexec.c:277: error: missing terminating " character
suexec.c:277: error: syntax error before ')' token
suexec.c:487: error: missing terminating " character
suexec.c:487: error: too few arguments to function `chdir'
suexec.c:490: error: missing terminating " character
suexec.c:490: error: syntax error before ')' token
*** Error code 1
Stop in /usr/fs/src/apache_1.3.41/src/support.
*** Error code 1
Stop in /usr/fs/src/apache_1.3.41.
*** Error code 1
Stop in /usr/fs/src/apache_1.3.41.
It seems to be expanding out ALL the folders under /home for some reason? The error about “No such file or directory” is also odd as this and the ones mentioned before ALL exist.
Any help would be greatly appreciated – Julian.
Julian Grunnell
UNIX Systems Administrator (Leeds)
Webfusion
Tel: 0208 587 7212
Mob: 07803 649593
Web: http://www.webfusion.co.uk/