настройка php для виртуального вебхостинга.
Теория
Для начала следует твердо уяснить, что PHP существует в двух ипостасях: как строковый интерпретатор/CGI и как модуль Apache. Оба метода имеют и преимущества и недостатки, кратко перечисленные в сравнительной таблице.
/usr/local/bin/php | libphp4.so | |
Безопасность | высокая: определяется системой UNIX permissions и конфигурацией языка | низкая: определяется конфигурацией языка и в минимальной степени - системой UNIX permissions |
Скорость работы | низкая | высокая |
Сложность конфигурирования хостинга | низкая | высокая |
Возможность установки лимитов | есть; для каждого пользователя | нет |
Удобство использования клиентами | неудобно | удобно |
Выполняется | владельцем (при настроенном suexec) | пользователем, из-под которого запущен веб-сервер |
Установка дисковых квот | средствами OS | сложно; необходимо использовать внешний монитор типа sgi_fam |
Поэтому если вы действительно заботитесь о том, чтобы хостинг был
максимально безопасным, вам придется либо отказаться от PHP вообще, либо
использовать его в режиме CLI/CGI. В этом случае правильно настроенный
suexec и грамотно выставленные права на каталоги позволят сделать php
таким же (если не более) безопасным, как и любой другой cgi скрипт.
Платой за безопасность будет наличие строки #!/usr/local/bin/php
в заголовке каждого выполняемого скрипта php, права 0755 и крайне медленная скорость работы сервера.
Безопасность требует жертв.
На самом деле, все не так уж и плохо. Если использовать PHP как модуль,
то все же можно добиться минимального уровня безопасности. Для этого
необжодимо:
1) установить режим safe_mode
2) установить переменные open_basedir, safe_mode_include_dir, safe_mode_exec_dir, doc_root, user_dir, upload_tmp_dir
таким образом, чтобы скрипты PHP имели доступ на
чтение/запись/подключение/выполнение только к файлам, расположенным в
домашнем каталоге пользователя.
Тем не менее, скрипты PHP будут выполняться из-под пользователя, под
которым запущен веб-сервер. Следствием этого станет недопустимым
использование любых средств IPC, в частности - shared memory и semaphores, поскольку доступ к ним регулируется системой UNIX file permissions.
Также желательно отключить все "тяжеловесные" возможности PHP, как то:
все функции поддержки DOM, XSLT и создания/манипулирования
изображениями, хотя это, скорее и не вопрос безопасности, а вопрос
вычислительной мощности хостинговой площадки.
Также следует отключить register_globals.
register_globals On - это
самое худшее, что можно придумать для системы. И поскольку все
пользователи во всех проблемах всегда винят хостера, то в интересах
администратора сделать так, чтобы возникало как можно меньше проблемных
ситуаций, прямо или косвенно связанных с безопасностью хостинга.
Установка Apache
Устанавливам Apache.
Установка mod_php.
Ставим mod_php из портов, так, как это принято во FreeBSD.
cd /usr/ports/www/mod_php4
make install clean
Конфигурирование хостинга
Переименовываем файл /usr/local/etc/php.ini-recommended
в /usr/local/etc/php.ini
.
Устанавливаем необходимые права на этот файл:
chowh root:www /usr/local/etc/php.ini
chmod 0440 /usr/local/etc/php.ini
Отключаем функцию phpinfo. Настраиваем Apache. Для каждого виртуального сервера устанавливаем свои переменные конфигурации php.
NameVirtualHost *:80
<VirtualHost *:80>
ServerName testsite.ru
DocumentRoot /home/www/testsite.ru/public_html
ScriptAlias /cgi /home/www/testsite.ru/public_html/cgi
ErrorLog /var/log/apache/testsite.ru/error_log
CustomLog /var/log/apache/testsite.ru/access_log combined
php_admin_value open_basedir /home/www/testsite.ru
php_admin_value safe_mode_include_dir /home/www/testsite.ru
php_admin_value safe_mode_exec_dir /home/www/testsite.ru
php_admin_value doc_root /home/www/testsite.ru
php_admin_value user_dir public_html
php_admin_value upload_tmp_dir /home/www/testsite.ru/tmp
User testsite.ru
Group virtwww
</VirtualHost>
<VirtualHost *:80>
ServerName testsite1.ru
DocumentRoot /home/www/testsite1.ru/public_html
ScriptAlias /cgi /home/www/testsite1.ru/public_html/cgi
ErrorLog /var/log/apache/testsite1.ru/error_log
CustomLog /var/log/apache/testsite1.ru/access_log combined
php_admin_value open_basedir /home/www/testsite1.ru
php_admin_value safe_mode_include_dir /home/www/testsite1.ru
php_admin_value safe_mode_exec_dir /home/www/testsite1.ru
php_admin_value doc_root /home/www/testsite1.ru
php_admin_value user_dir public_html
php_admin_value upload_tmp_dir /home/www/testsite1.ru/tmp
User testsite1.ru
Group virtwww
</VirtualHost>
Для того, чтобы можно было загружать файлы служит каталог
/home/www/*/tmp. На него следует выставить разрешение записи для
пользователя www.
Если требуется писать файлы в public_html (что само по себе может быть
небюезопасно), сделует также озаботиться установкой соответствующих прав
на каталог /home/www/testsite1.ru/public_html.
взято тут http://reki.ru/massvirthosting_php.html