LINUX.ORG.RU

web-hosting php mail() log

 , , , ,


0

1

Добрый день!

Имеется вебхостинг с большим количеством сайтов. Все сайты на 80-м порту работают через nginx, на 81-м через apache. Существует 2 типа работы: с cgi и без. Для сайтов с cgi есть отдельный каталог в /var/www/php-bin/*/php.ini с дополнительными конфигами.

Для этого всего нужно создать логгер всех вызовов mail() из php. Для этого было нагуглено решение с двумя скриптами.

Для начала я взял и указал sendmail-wrapper в указанных выше php.ini файлах, а так же добавил опцию:

auto_prepend_file = /usr/local/bin/env.php
На этом этапе всё пошло не так. Сайты выдают internal server error (500) в логе это:
PHP Warning:  Unknown: open_basedir restriction in effect. File(/usr/local/bin/env.php) is not within the allowed path(s): (/var/www/site.ru/data:.) in Unknown on line 0
Получается так, что нужно добавить директиву open_basedir для всех сайтов.

На данном этапе мне не понятно следующее — если сайт работает через cgi, то для него имеет значение файл /etc/php5/apache2/php.ini или нужно указывать в его отдельном файле? Сами сайты описаны вот так:

<Directory /var/www/site.ru/data/www/site.ru>
        Options -Includes +ExecCGI
        php_admin_value open_basedir "/var/www/site.ru/data:."
        php_admin_flag engine on
</Directory>
<VirtualHost ip:81 >
        ServerName site.ru
        CustomLog /var/www/httpd-logs/site.ru.access.log combined
        DocumentRoot /var/www/site.ru/data/www/site.ru
        ErrorLog /var/www/httpd-logs/site.ru.error.log
        ServerAdmin webmaster@site.ru
        ServerAlias www.site.ru
        SuexecUserGroup site.ru site.ru
        AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
        AddType application/x-httpd-php-source .phps
        php_admin_value open_basedir "/var/www/site.ru/data:."
        php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f webmaster@site.ru"
        php_admin_value upload_tmp_dir "/var/www/site.ru/data/mod-tmp"
        php_admin_value session.save_path "/var/www/site.ru/data/mod-tmp"
        VirtualDocumentRoot /var/www/site.ru/data/www/site.ru/%1
        ScriptAlias /cgi-bin/ /var/www/site.ru/data/www/site.ru/cgi-bin/
</VirtualHost>
Возникла мысль, что переписывать для всех sendmail_path не логично, потому можно настоящий sendmail переименовать в /usr/sbin/sendmail-real и его же в обёртке вызывать, которую переименовать в обычный sendmail. Но что делать с env.php?:
<?php
putenv("HTTP_HOST=".@$_SERVER["HTTP_HOST"]);
putenv("SCRIPT_NAME=".@$_SERVER["SCRIPT_NAME"]);
putenv("SCRIPT_FILENAME=".@$_SERVER["SCRIPT_FILENAME"]);
putenv("DOCUMENT_ROOT=".@$_SERVER["DOCUMENT_ROOT"]);
putenv("REMOTE_ADDR=".@$_SERVER["REMOTE_ADDR"]);
?>
Нужно куда-то его переместить, чтобы он был доступен для всех, но куда? А так же, будет ли это всё работать для nginx? PHP вроде общий для всех, но что-то я сомневаюсь (до этого имел место спам, который никак не детектился в прошлом логгере php mail, решил переделать)

Заранее благодарен за советы!

1. В VirtualHost'ах сделать open_basedir «none», как вариант.
2. nginx всего лишь проксирует запросы к файлам .php Apache'у, а результат обратно, так что тут сложностей нет.

Nirvandil ()
Ответ на: комментарий от Nirvandil

В VirtualHost'ах сделать open_basedir «none», как вариант.

так себе решение. В env php из phpinfo я видел, что он может посмотреть в каталог, например, /usr/share/php (хотя такого нет), можно было бы создать и положить туда env.php и указать его. По идее у всех будет к нему доступ, но т.к. не уверен — спрашиваю совета.

conformist ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.