LINUX-сервер пошаговые инструкции инсталляции и настройки - Бруй В. В. , Карлов С. В
..pdfГлава 35. PHP: Hypertext Preprocessor |
533 |
sockets.use_system_read |
= On |
Ниже приведены краткие описания наиболее критичных, с точки зрения обеспечения безопасности и производительности сервера, директив, используемых в приведенном выше конфигурационном файле. С описаниями остальных директив вы можете ознакомиться в документации по PHP.
Директива:
engine = On
обычно используется для включения и отключения возможности интерпретации файлов, содержащих PHPкод, в некоторых каталогах и виртуальных серверах при интеграции PHP c Apache HTTP Server. В рассматриваемой тривиальной конфигурации мы разрешаем интерпретацию файлов, содержащих PHP-код, во всех каталогах сервера. С примерами более сложных вариантов конфигурации можно ознакомится в документа-
ции по PHP и Apache HTTP Server.
Директива:
short_open_tag = On
используется для включения и отключения обработки тэгов сокращенной формы открывающего PHP-тэга - <? ?>, значение которых эквивалентно тэгу <?php ?>. Если вы планируете использовать PHP совместно с XML, отключите эту опцию. Отключение этой опции может потребовать внесения изменений в PHP-коды программного обеспечения, используемого на вашем сервере, т. к. использование сокращенных тэгов очень популярно у многих разработчиков.
Директива: asp_tags = Off
используется для включения и отключения обработки тэгов вида <% %>, в дополнение к обычным тегам <?php ?>. Включение это опции имеет смысл, если вы используете программное обеспечение, написанное на ASP (Active Server Page).
Директива:
precision = 14
используется для определения количества знаков в числах в формате плавающей точки. Директива:
y2k_compliance = Off
используется для включения принудительной поддержки в PHP средств предотвращения ошибок 2000 года. Включение этой опции может сделать ваш сервер недоступным для старых браузеров.
Директива
output_buffering = Off
используется для включения и отключения буферизации вывода. При включенной опции PHP сможет отправлять заголовки, например, cookies, даже после передачи основного содержания. Для повышения производительности сервера мы рекомендуем отключить эту опцию, используя значение по умолчанию – "off".
Директива:
output_handler =
используется для перенаправления вывода сценариев PHP-кода в некоторую функцию. Эта возможность может быть использована, например, для передачи клиентским программам, поддерживающим gzipперекодировку, содержания документа в сжатом виде. Использование это опции предъявляет достаточно высокие требования к производительности сервера, и поэтому мы рекомендуем не использовать ее, оставив соответствующую строку пустой.
Директива:
zlib.output_compression = On
используется для включения и выключения сжатия файлов, отправляемых клиентским программам с использованием функций библиотеки zlib. Включение этой опции может существенно повысить время их получения пользователями, подключенных к Интернет через каналы связи с малой пропускной способностью, увеличивая при этом нагрузку на оперативную память и процессор.
Директива:
implicit_flush = Off
обычно используется при отладке и негативно влияет на производительность сервера. Во всех других случаях рекомендуется ее отключить.
Директива:
allow_call_time_pass_reference = Off
используется для включения и выключения возможности передачи функциям аргументов не в виде значений, а в виде ссылок на соответствующие значения. По умолчанию для этой опции установлено значение On. Протестируйте работоспособность ваших программ при значении "off", и если программы будут работать нормально, оставьте его. В противном случае установите значение "on".
Директива:
safe_mode = On
является одной из наиболее важных, с точки зрения обеспечения безопасности вашего сервера, директив. При ее включении PHP осуществляет проверку владельца обрабатываемого сценария и в случае вызова
534 |
Часть 10. Программное обеспечение для организации службы HTTP-сервера |
функций, обращающихся к файлам, разрешает доступ к ним только, если установленные ограничения на доступ к файлу позволяет пользователю, от имени которого выполняется сценарий, получать доступ к файлу. Это может вызывать определенные проблемы при эксплуатации и инсталляции некоторых программ, написанных на PHP.
Директива safe_mode_gid = Off
используется для смягчения ограничений, устанавливаемых директивой safe_mode. При ее включении (safe_mode_gid = On) доступ к файлам осуществляется только по результатам сравнения группы пользователя, от имени которого выполняется сценарий, и группы пользователя владельца файла, к которому сценарий обращается.
Директива:
safe_mode_include_dir = /var/lib/mysql
используется для отмены ограничений, устанавливаемых директивами safe_mode и safe_mode_gid для определенного каталога. В рассматриваемом примере – это каталог /var/lib/mysql, содержащий файлы баз данных.
Директива: safe_mode_exec_dir =
используется для отмены ограничений, накладываемых включением опции safe_mode на выполнение функций PHP в определенных каталогах.
Директива:
;open_basedir =
используется для наложения ограничений при включенной опции safe_mode на все операции с файлами в определенных каталогах. Использование этой директивы открывает широкие возможности при конфигурировании отдельных каталогов и виртуальных серверов.
Директива:
safe_mode_allowed_env_vars = PHP_
используется для определения списка, содержащего префиксы имен переменных, разделенных запятыми, изменение которых разрешено пользователям при включенной опции safe_mode.
Директива:
safe_mode_protected_env_vars = LD_LIBRARY_PATH
используется для определения списка переменных окружения, которые не должны изменяться пользователями при включенной опции safe_mode.
Директива:
disable_functions =
определяет список функций, использование которых запрещено. Директива:
expose_php = Off
используется для включения и отключения возможности присутствия в заголовках, выдаваемых Webсервером, информации о наличии PHP на сервере. Для исключения этой информации из заголовков измените устанавливаемое значение по умолчанию "on" на "off".
Директива:
display_errors = Off
используется для включения и отключения вывода сообщений пользователям об ошибках. Мы настоятельно рекомендуем установить значение "off", т. к. сообщения об ошибках содержат много конфидециальной информации, например, о путях к различным файлам, находящимся на вашем сервере.
Директива:
log_errors = On
используется для включения регистрации сообщений об ошибках связанных, с выполнением сценариев PHP. Совместное использование этой и предыдущей директивы позволяет организовать отладку PHPсценариев без разглашения конфиденциальной информации о структуре каталогов сервера обычным пользователям.
Дирекитива:
register_globals = Off
используется для предотвращения изменения различных переменных путем импортирования соответствующих выражений в информацию, легитимно принимаемую сервером от внешних пользователей. К сожалению, некоторые написанные на PHP программы не могут нормально работать при отключении этой опции. Попробуйте установить значение register_globals = Off, протестируйте работоспособность вашего программного обеспечения. Если все работает нормально, оставьте выбранное значение, в противном случае измените его на "on".
Директива: enable_dl = Off
Глава 35. PHP: Hypertext Preprocessor |
535 |
используется для разрешения и запрещения использования функции PHP dl(), предназначенной для динамической загрузки расширений PHP. Использование значения "on" опасно, т. к. позволяет легко обойти все ограничения, накладываемые директивами safe_mode и open_basedir.
Директива:
file_uploads = Off
используется для разрешения и запрещения загрузки файлов на сервер. Настоятельно рекомендуем запретить использование загрузки файлов на сервер.
Директива вида:
extension = mysql.so
используется для разрешения использования расширений, обеспечивающих поддержку взаимодействия PHP с внешними приложениями. В рассматриваемом примере мы разрешили использование расширений, реализующих поддержку взаимодействия PHP с сервером баз данных MySQL.
Конфигурационный файл /etc/httpd/conf/httpd.conf
Для интеграции PHP с Apache HTTP Server необходимо выполнить следующие операции.
Шаг 1 |
|
Добавьте в конец подраздела |
Dynamic Shared Object (DSO) Support файла |
/etc/httpd/conf/httpd.conf следующую строку: |
|
LoadModule php4_module |
/usr/lib/httpd/modules/libphp4.so |
Шаг 2
Проверьте наличие и при необходимости добавьте в файл /etc/httpd/conf/httpd.conf следующие строки:
AddType application/x-httpd-php .php AddType application/x-httpd-php .php3 AddType application/x-httpd-php .php4 AddType application/x-httpd-php .phtml AddType application/x-httpd-php .shtml
AddType application/x-httpd-php-source .phps
Тестирование PHP
Войдите с систему от имени обычного пользователя, например, karlnext.
Шаг 1
Проверьте работоспособность PHP в режиме командной строки, для этого создайте файл index.php, содержащий следующие строки:
<?php
echo phpinfo();
?>
и выполните команду:
[karlnext@test karlnext]$ php index.php
Если на экране вы увидите примерно следующее (для экономии места мы приводим только несколько первых строк вывода):
phpinfo()
PHP Version => 4.3.2
System => Linux test.bruy.info 2.4.19-grsec #4 Суб Апр 5 17:15:56 MSD 2003 i686
Build Date => Jul 18 2003 10:11:54
Configure Command => './configure' '--exec-prefix=/usr' '--with- layout=GNU' '--with-apxs2=/usr/sbin/apxs' '--with-config-file- path=/etc/httpd' '--with-exec-dir=/usr/bin' '--with-openssl' '--with- zlib' '--with-bz2' '--with-gd' '--with-ttf' '--with-png' '--with-jpeg- dir=/usr' '--with-png-dir=/usr' '--with-freetype-dir=/usr' '--with-expat- dir=/usr' '--with-gmp' '--with-xml' '--with-pear=/usr/share/pear' '-- with-mysql=shared,/usr' '--with-mysql-sock=/var/lib/mysql/mysql.sock' '-- with-pspell' '--disable-debug' '--disable-rpath' '--disable-posix' '-- enable-discard-path' '--enable-safe-mode' '--enable-magic-quotes' '--
536 Часть 10. Программное обеспечение для организации службы HTTP-сервера
enable-dmalloc' '--enable-bcmath' '--enable-dio' '--enable-gd-native-ttf' '--enable-sysvsem' '--enable-sysvshm' '--enable-wddx' '--enable- versioning' '--enable-pic' '--enable-inline-optimization' '--enable- memory-limit'
Server API => Command Line Interface Virtual Directory Support => disabled
Configuration File (php.ini) Path => /etc/httpd/php.ini PHP API => 20020918
PHP Extension => 20020429 Zend Extension => 20021010 Debug Build => no
Thread Safety => disabled
Registered PHP Streams => php, http, ftp, https, ftps, compress.bzip2, compress.zlib
This program makes use of the Zend Scripting Language Engine: Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies
_______________________________________________________________________
Configuration PHP Core
Directive => Local Value => Master Value
…
то PHP в режиме командной строки работает нормально, и вы можете использовать его для написания различных сценариев, запускаемых из командного интерпретатора. Неплохо проверить все строки вывода на предмет соответствия полученной конфигурации PHP вашим требованиям.
Шаг 2
Проверьте работоспособность совместной работы PHP и Apache HTTP Sever. Для этого запустите (перезапустите) Web-сервер:
[karlnext@test karlnext]$ sudo /etc/init.d/httpd start
Password:$ecretnoe_Sl0v0
Запускается httpd: [ОК]
Разместите в каком-нибудь каталоге, обслуживаемом вашим сервером, например,
/var/www/eshop/html/, файлы top.php, union12345.php и down.php, содержание которых при-
ведено в самом начале этой главы для иллюстрации возможностей PHP. После чего выполните команду:
[karlnext@test karlnext]$ lynx http://eshop.bruy.info/union12345.php
Если увидите примерно следующее:
Пример использования PHP
Смысловое содержание страницы
…
Команды: стрелки - перемещение, '?' - помощь, 'q' - выход, '<-' - назад. Стрелки: Вверх, Вниз - перемещение. Вправо - переход по ссылке; Влево -
возврат. H)elp O)ptions P)rint G)o M)Глав экран Q)uit /=поиск
[delete]=список истории
то PHP правильно интегрирован с Web-сервером, и вы можете использовать его для написания сценариев, обслуживаемых Web-сервером.
Шаг 3
Протестируйте работоспособность всего программного обеспечения, содержащего PHP-код, использование которого предполагается на вашем сервере. В случае необходимости внесите соответствующие из-
менения в конфигурационные файлы /etc/httpd/php.ini и /etc/httpd/conf/httpd.conf.
Выполнение PHP в окружении chroot-jail
Потенциальные уязвимости PHP, как и любого другого программного обеспечения, могут использоваться для реализации атак на вашу систему. Поэтому для повышения безопасности вашей системы PHP можно заставить работать в окружении chroot-jail. Это не простая задача, при этом может потребоваться дополнительные и не всегда заканчивающиеся успехом попытки по адаптации программ (сценариев), содер-
Глава 35. PHP: Hypertext Preprocessor |
537 |
жащих PHP-код, для работы в окружении chroot-jail. Тем не менее, если вы все-таки желаете протестировать работоспособность вашего сервера в относительно безопасном окружении, руководствуйтесь ниже приведенными рекомендациями. Если вы собираетесь использовать Apache HTTP Server с поддержкой PHP и модуля mod_perl, пропустите этот раздел и вернитесь к нему после инсталляции и настройки поддержки mod_perl в обычной среде. В этом случае перенос необходимых файлов в окружение chroot jail лучше осуществлять сразу для Apache HTTP Server и всех поддерживаемых им модулей сторонних разработчиков, руководствуясь при этом рекомендациями этой, предыдущей и последующей глав.
Шаг 1
Выполните все рекомендации предыдущей главы по переносу и тестированию Apache HTTP Server в окружение chroot-jail. Только после удачного тестирования перейдите к следующему шагу.
Шаг 2
Остановите Apache HTTP Server:
[karlnext@test karlnext]$ sudo /etc/init.d/httpd |
start |
|
Password:$ecretnoe_Sl0v0 |
[ОК] |
|
Останавливается httpd: |
|
|
Шаг 3
Перенесите файлы, необходимые для работы PHP, в окружение chroot-jail:
[root@test /]# mv /usr/lib/httpd/modules/libphp4.so
/chroot/httpd/usr/lib/httpd/modules/
[root@test /]# mv /usr/lib/php /chroot/httpd/usr/lib [root@test /]# mv /usr/share/pear/ /chroot/httpd/usr/share/ [root@test /]# mv /etc/httpd/php.ini /chroot/httpd/etc/httpd/
ЗАМЕЧАНИЕ Лучше сразу не переносить соответствующие файлы и каталоги, а скопировать их. В этом случае, если PHP и использующее его программное обеспечение будет работоспособно в окружении chroot-jail, вы в дальнейшем всегда сможете уничтожить более не нужные файлы, созданные при инсталляции и конфигурировании PHP в обычной среде. В случае, если PHP или использующее его программное обеспечение окажется не работоспособным, вы всегда сможете вернуться к прежней работоспособной конфигурации.
___________________
Если вы собираетесь также использовать PHP в режиме командной строки, то вы должны
СКОПИРОВАТЬ, А НЕ ПЕРЕНЕСТИ
указанные выше файлы и каталоги.
Шаг 4
Составьте список библиотек, используемых libphp4.so, анализируя вывод следующей команды:
[root@test /]# ldd /chroot/httpd/usr/lib/httpd/modules/libphp4.so libexpat.so.0 => /usr/lib/libexpat.so.0 (0x4c786000) libpspell.so.4 => /usr/lib/libpspell.so.4 (0x4c7a6000) libgmp.so.3 => /usr/lib/libgmp.so.3 (0x4c7c1000) libpng.so.2 => /usr/lib/libpng.so.2 (0x4c7e9000) libz.so.1 => /usr/lib/libz.so.1 (0x4c80a000)
libbz2.so.1 => /usr/lib/libbz2.so.1 (0x4c818000) libssl.so.0.9.7 => /lib/libssl.so.0.9.7 (0x4c827000) libcrypto.so.0.9.7 => /lib/libcrypto.so.0.9.7 (0x4c857000) libdmalloc.so => /usr/lib/libdmalloc.so (0x4c95d000) libresolv.so.2 => /lib/libresolv.so.2 (0x4c9a4000) libm.so.6 => /lib/i686/libm.so.6 (0x4c9b7000)
libdl.so.2 => /lib/libdl.so.2 (0x4c9d9000) libttf.so.2 => /usr/lib/libttf.so.2 (0x4c9dc000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x4ca07000) libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x4ca46000) libnsl.so.1 => /lib/libnsl.so.1 (0x4ca64000)
libc.so.6 => /lib/i686/libc.so.6 (0x4ca79000) libltdl.so.3 => /usr/lib/libltdl.so.3 (0x4cbb0000) libpspell-modules.so.1 => /usr/lib/libpspell-modules.so.1
(0x4cbb7000)
libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x4cbba000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x0957e000)
538 |
Часть 10. Программное обеспечение для организации службы HTTP-сервера |
В результате вы получите список библиотек, используемых модулем libphp4.so. Однако их не всегда бывает достаточно для его нормального функционирования:
•/usr/lib/libexpat.so.0;
•/usr/lib/libpspell.so.4;
•/usr/lib/libpng.so.2;
•/usr/lib/libz.so.1;
•/usr/lib/libbz2.so.1;
•/lib/libssl.so.0.9.7;
•/lib/libcrypto.so.0.9.7;
•/usr/lib/libdmalloc.so;
•/lib/libresolv.so.2;
•/lib/i686/libm.so.6;
•/lib/libdl.so.2;
•/usr/lib/libttf.so.2;
•/usr/lib/libfreetype.so.6;
•/usr/lib/libjpeg.so.62;
•/lib/libnsl.so.1;
•/lib/i686/libc.so.6;
•/usr/lib/libltdl.so.3;
•/usr/lib/libpspell-modules.so.1;
•/usr/lib/libstdc++-libc6.2-2.so.3.
Шаг 5
Скопируйте библиотеки в соответствующие каталоги окружения chroot-jail:
[root@test /]# cp /usr/lib/libexpat.so.0 /chroot/httpd/usr/lib/ [root@test /]# cp /usr/lib/libpspell.so.4 /chroot/httpd/usr/lib/ [root@test /]# cp /usr/lib/libpng.so.2 /chroot/httpd/usr/lib/ [root@test /]# cp /usr/lib/libz.so.1 /chroot/httpd/usr/lib/ [root@test /]# cp /usr/lib/libbz2.so.1 /chroot/httpd/usr/lib/ [root@test /]# cp /lib/libssl.so.0.9.7 /chroot/httpd/lib/ [root@test /]# cp /lib/libcrypto.so.0.9.7 /chroot/httpd/lib/ [root@test /]# cp /usr/lib/libdmalloc.so /chroot/httpd/usr/lib/ [root@test /]# cp /lib/libresolv.so.2 /chroot/httpd/lib/ [root@test /]# cp /lib/i686/libm.so.6 /chroot/httpd/lib/i686/ [root@test /]# cp /lib/libdl.so.2 /chroot/httpd/lib/
[root@test /]# cp /usr/lib/libttf.so.2 /chroot/httpd/usr/lib/ [root@test /]# cp /usr/lib/libfreetype.so.6 /chroot/httpd/usr/lib/ [root@test /]# cp /usr/lib/libjpeg.so.62 /chroot/httpd/usr/lib/ [root@test /]# cp /lib/libnsl.so.1 /chroot/httpd/lib/
[root@test /]# cp /lib/i686/libc.so.6 /chroot/httpd/lib/i686/ [root@test /]# cp /usr/lib/libltdl.so.3 /chroot/httpd/usr/lib/
[root@test /]# cp /usr/lib/libpspell-modules.so.1 /chroot/httpd/usr/lib/ [root@test /]# cp /usr/lib/libstdc++-libc6.2-2.so.3
/chroot/httpd/usr/lib/
Шаг 6
Протестируйте работоспособность модуля libphp4.so, запустив Web-сервер:
[karlnext@test karlnext]$ sudo /etc/init.d/httpd start Password:$ecretnoe_Sl0v0
При этом вы можете получить сообщение об ошибке:
Запускается httpd: Syntax error on line 57 of /etc/httpd/conf/httpd.conf: Cannot load /usr/lib/php/libphp4.so into server: libgmp.so.3: cannot open
shared object file: No such file or directory
[СБОЙ]
содержащее информацию об отсутствии какой-нибудь библиотеки, в рассматриваемом примере – libgmp.so.3.
Глава 35. PHP: Hypertext Preprocessor |
539 |
В этом случае (если вы забыли, где находится требуемая библиотека) определите путь к ней с использованием команды:
[root@test /]# whereis libgmp.so.3
libgmp.so: /usr/lib/libgmp.so.3 /usr/lib/libgmp.so
и скопируйте необходимые файлы в соответствующие каталоги окружения chroot-jail:
[root@test /]# cp /usr/lib/libgmp.so.3 /usr/lib/libgmp.so
/chroot/httpd/usr/lib/
Выясните, какие еще библиотеки используются libgmp.so.3 в соответствие с алгоритмом, используемым в шаге 4. Нам повезло, т. к. выяснилось, что никакие библиотеки, кроме уже скопированных в окружение chroot-jail ранее, не требуются. В результате сервер запустился без проблем в окружении chroot-jail c поддержкой модуля libphp4.so:
[karlnext@test karlnext]$ sudo /etc/init.d/httpd start
Password:$ecretnoe_Sl0v0
Запускается httpd: [ОК]
Шаг 7
Протестируйте работоспособность сервера в окружении chroot-jail c php4_module, воспользовавшись рекомендациями раздела «Тестирование PHP». Результаты тестирования должны быть идентичны результатам, полученным при тестировании работоспособности сервера, запущенного в обычном окружении.
540 |
Часть 10. Программное обеспечение для организации службы HTTP-сервера |
Глава 36
mod_perl– модуль, позволяющий включить интерпретатор языка Perl непосредст-
венно в Apache HTTP Server
В этой главе:
1. Ограничения и допущения
2.Пакеты
3.Установка из rpm-пакетов
4.Компиляция, оптимизация и инсталляция mod_perl
5.Конфигурирование mod_perl
6.Тестирование mod_perl
7.Выполнение mod_perl в окружении chroot-jail
