Fork me on GitHub

The WebDevil

Enjoy development

Столкнулся сегодня с проблемой: переменные, установленные через SetEnv в апаче не видны в cgi-скриптах.
Поиски произростания ног привели к suEXEC, который фильтрует набор переменных окружения. И, естественно, в списке разрешенных нет ничего про AWSTATS_FORCE_CONFIG.
Проблему решил следующим образом:

mkdir ~/build_suexec && cd ~/build_suexec
wget http://svn.apache.org/repos/asf/httpd/httpd/trunk/support/suexec.{c,h}

Далее в suexec.c находим внутри большой список переменных, и добавляем туда то, что нужно:

# diff ./suexec.c.orig ./suexec.c
77a78
>     "AWSTATS_FORCE_CONFIG=",

И собираем получившееся такой командой (при условии что установлены пакеты apache2-threaded-dev и build-essential):

gcc -DLOG_EXEC='"/var/log/apache2/suexec.log"' \
    -DAP_DOC_ROOT='"/var/www"' \
    -DAP_GID_MIN=100 \
    -DAP_HTTPD_USER='"www-data"' \
    -DAP_LOG_EXEC='"/var/log/apache2/suexec.log"' \
    -DAP_SAFE_PATH='"/usr/local/bin:/usr/bin:/bin"' \
    -DAP_UID_MIN=100 \
    -DAP_USERDIR_SUFFIX='"public_html"' \
    -I/usr/include/apr-1.0 \
    -I/usr/include/apache2 \
    -o suexec suexec.c && chmod 4755 suexec

В убунту надо будет заменить получившимся бинарником враппер /usr/lib/apache2/suexec.

PS: да, для того чтоб у пользователя работал awstats при suexec, который ставит ограничение на скрипты в /var/www, да еще и разыменовывает симлинки, достаточно в cgi-bin создать простейший враппер (awstats.pl):

#!/usr/bin/env perl

exec('/usr/lib/cgi-bin/awstats.pl');

Хотя можно (по идее!) в AP_DOC_ROOT прописать ‘”/var/www,/usr/lib/cgi-bin”‘.

PS2: в списке разрешенных переменных окружения можно задавать множества – например, “AWSTATS_”.

PS3: посоветовал бы кто-то настраиваемую замену для злого suEXEC – у него-то все опции при компиляции задаются.

Comments are closed.