SuExec - это модуль web-сервера Apache, который позволяет запускать CGI и аналогичные собственные или сторонних разработчиков скрипты/программы внутри веб-папки домена от имени вполне конкретного пользователя (которому данная папка/домен принадлежат), а не от пользователя/группы от имени которого работает непосредственно сам Apache web-сервер.
По-умолчанию у suexec DOC_ROOT в CentOS (и других дистрибутивах линуксовых семейств) установлен /var/www, что не позволяет Apache запускать скрипты с других мест (например, /home), что в нашем случае является критически важным параметром.
Единственный нормальный вариант сделать это в Linux - перекомпилировать suexec с новыми параметрами.
Команды приведены для CentOS, но эта инструкция подойдёт и для других версий Linux (возможно с небольшими поправками). В основной своей массе, Linux используют большинство провайдеров.
Узнаём установленную версию Apache:
# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built: Feb 13 2012 22:31:42
Смотрим настройки установленной версии suexec:
# /usr/sbin/suexec -V
-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="apache"
-D AP_LOG_EXEC="/var/log/httpd/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=500
-D AP_USERDIR_SUFFIX="public_html"
Настраиваем (меняем AP_DOC_ROOT, остальные настройки те же):
# cd httpd-2.2.15
# ./configure --enable-suexec --with-suexec-caller=apache --with-suexec-userdir=public_html --with-suexec-docroot=/home --with-suexec-uidmin=500 --with-suexec-gidmin=100 --with-suexec-logfile=/var/log/httpd/suexec.log
и собираем suexec (не устанавливаем!)
# make
Смотрим права и владельца на установленную версию suexec:
# ls -l /usr/sbin/suexec
-r-s--x--- 1 root apache 14K Feb 14 02:33 /usr/sbin/suexec
Копируем новую версию, устанавливаем права:
# cp ./support/suexec /usr/sbin/suexec
# chown root:apache /usr/sbin/suexec
# chmod 4510 /usr/sbin/suexec
Проверяем права:
# ls -l /usr/sbin/suexec
-r-s--x--- 1 root apache 27K Apr 25 10:35 /usr/sbin/suexec
Проверяем новые настройки suexec:
# /usr/sbin/suexec -V
-D AP_DOC_ROOT="/home"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="apache"
-D AP_LOG_EXEC="/var/log/httpd/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=500
-D AP_USERDIR_SUFFIX="public_html"
Видно, что все настройки остались старые, изменился только DOC_ROOT. Все, что необходимо теперь - перезагрузить службу httpd для загрузки нового suexec.