Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LINUX-сервер пошаговые инструкции инсталляции и настройки - Бруй В. В. , Карлов С. В

..pdf
Скачиваний:
119
Добавлен:
24.05.2014
Размер:
3.66 Mб
Скачать

Глава 34. Apache HTTP Server

521

В результате вы получите список используемых библиотек. Однако, их не всегда бывает достаточно для нормального функционирования демона httpd:

/lib/libssl.so.0.9.7;

/lib/libcrypto.so.0.9.7;

/usr/lib/libaprutil-0.so.0;

/usr/lib/libgdbm.so.2;

/lib/libdb-3.3.so;

/usr/lib/libexpat.so.0;

/usr/lib/libapr-0.so.0;

/lib/i686/libpthread.so.0;

/lib/librt.so.1;

/lib/i686/libm.so.6;

/lib/libnsl.so.1;

/lib/libdl.so.2;

/lib/i686/libc.so.6;

/lib/ld-linux.so.2.

Последовательно применяя подобный алгоритм к другим исполняемым файлам и найденным на предыдущем шаге библиотекам (доказательства сходимости этого процесса авторы по соображениям экономии места опускают), было получено следующее дополнение к списку библиотек, необходимых для нормальной работы сервера:

/lib/libnss_compat*;

/lib/libnss_dns*;

/lib/libnss_files*;

/lib/libresolv.so.2.

Шаг 5 Скопируйте необходимые библиотеки в соответствующие каталоги:

[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/libaprutil-0.so.0 /chroot/httpd/usr/lib/ [root@test /]# cp /usr/lib/libgdbm.so.2 /chroot/httpd/usr/lib/ [root@test /]# cp /lib/libdb-3.3.so /chroot/httpd/lib/

[root@test /]# cp /usr/lib/libexpat.so.0 /chroot/httpd/usr/lib/ [root@test /]# cp /usr/lib/libapr-0.so.0 /chroot/httpd/usr/lib/ [root@test /]# cp /lib/i686/libpthread.so.0 /chroot/httpd/lib/i686/ [root@test /]# cp /lib/librt.so.1 /chroot/httpd/lib/

[root@test /]# cp /lib/i686/libm.so.6 /chroot/httpd/lib/i686/ [root@test /]# cp /lib/libnsl.so.1 /chroot/httpd/lib/ [root@test /]# cp /lib/libdl.so.2 /chroot/httpd/lib/ [root@test /]# cp /lib/ld-linux.so.2 /chroot/httpd/lib/ [root@test /]# cp /lib/i686/libc.so.6 /chroot/httpd/lib/i686/ [root@test /]# cp /lib/libnss_compat* /chroot/httpd/lib/ [root@test /]# cp /lib/libnss_dns* /chroot/httpd/lib/ [root@test /]# cp /lib/libnss_files* /chroot/httpd/lib/ [root@test /]# cp /lib/libresolv.so.2 /chroot/httpd/lib/

Шаг 6

Скопируйте в соответствующий каталог файлы /etc/passwd и /etc/group:

[root@test /]# cp /etc/passwd /chroot/httpd/etc/ [root@test /]# cp /etc/group /chroot/httpd/etc/

и удалите из них все записи, не имеющие отношения к учетным записям пользователя www и группы пользователей www.

Шаг 7 Скопируйте в соответствующие каталоги файлы, также необходимые для нормальной работы демона

httpd:

[root@test /]# cp /etc/resolv.conf /chroot/httpd/etc/ [root@test /]# cp /etc/localtime /chroot/httpd/etc/

522

Часть 10. Программное обеспечение для организации службы HTTP-сервера

[root@test /]# cp /etc/hosts /chroot/httpd/etc/

Шаг 8 Сделайте соответствующие файлы «неизменяемыми":

[root@test /]# chattr +i /chroot/httpd/etc/passwd [root@test /]# chattr +i /chroot/httpd/etc/group [root@test /]# chattr +i /chroot/httpd/etc/resolv.conf [root@test /]# chattr +i /chroot/httpd/etc/hosts

Шаг 9

Отредактируйте файл инициализации /etc/init.d/httpd в соответствии с ниже приведенными рекомендациями:

#!/bin/bash

#This shell script takes care of starting and stopping Apache.

#chkconfig: 345 85 15

#description: Apache is a World Wide Web server. It is used to serve \

#

HTML files and CGI.

#

 

#processname: httpd

#config: /chroot/httpd/etc/httpd/conf/httpd.conf

#pidfile: /chroot/httpd/var/run/httpd.pid

#

#Source function library.

. /etc/init.d/functions

#Source networking configuration.

. /etc/sysconfig/network

#Source for additional options if we have them. if [ -f /etc/sysconfig/httpd ] ; then

. /etc/sysconfig/httpd

fi

#This will prevent initlog from swallowing up a pass-phrase prompt if

#mod_ssl needs a pass-phrase from the user.

INITLOG_ARGS=""

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

# If Apache is not available stop now.

[ -f /chroot/httpd/usr/sbin/httpd ] || exit 0

# Path to the Apache apachectl script and server binary. apachectl=/usr/sbin/apachectl

httpd=/usr/sbin/httpd

RETVAL=0

prog="httpd"

start() {

echo -n $"Starting $prog: "

/usr/sbin/chroot /chroot/httpd /usr/sbin/httpd $OPTIONS #daemon $httpd $OPTIONS

RETVAL=$? echo

[ $RETVAL = 0 ] && touch /var/lock/subsys/httpd return $RETVAL

}

stop() {

echo -n $"Shutting down $prog: "

kill -TERM `cat /chroot/httpd/var/run/httpd.pid`

Глава 34. Apache HTTP Server

523

#killproc $httpd

RETVAL=$? echo

[ $RETVAL = 0 ] && rm -f /var/lock/subsys/httpd /var/run/httpd.pid

return $RETVAL

}

# See how we were called. case "$1" in

start)

start

;;

stop)

stop

;;

status)

#status $httpd

status /chroot/httpd/usr/sbin/httpd

RETVAL=$?

;;

restart) stop start

RETVAL=$?

;;

*)

echo $"Usage: $0 {start|stop|status|restart|condrestart}" exit 1

esac

exit $RETVAL

Шаг 10

Запустите Apache HTTP Server:

[root@test /]# /etc/init.d/httpd start

Запускается httpd: [ОК]

Шаг 11

Для того, чтобы проверить, работает ли сервер в окружении chroot-jail, определите идентификационный номер основного и дочерних процессов, используя команду:

[root@test /]# ps –axf | grep httpd

10596

?

S

0:00 /usr/sbin/httpd -DSSL

21501

?

S

0:00

\_ /usr/sbin/httpd -DSSL

25530

?

S

0:00

\_ /usr/sbin/httpd -DSSL

3425

?

S

0:00

\_ /usr/sbin/httpd -DSSL

17995

?

S

0:00

\_ /usr/sbin/httpd -DSSL

18381

?

S

0:00

\_ /usr/sbin/httpd –DSSL

Убедитесь, что основной и дочерние процессы работают в окружении chroot-jail:

[root@test /]# ls -la /proc/10596/root

lrwxrwxrwx

1

root

root

0

Июл

14

11:12

/proc/10596/root

->

/chroot/httpd

 

 

 

 

 

 

 

[root@test /]# ls -la /proc/21501/root

 

Июл

 

 

 

lrwxrwxrwx

1

root

root

0

14

11:13

/proc/21501/root

->

/chroot/httpd

 

 

 

 

 

 

 

Шаг 12 Протестируйте работоспособность сервера с использованием рекомендаций раздела «Тестирование

Apache HTTP Server». Результаты тестирования должны быть идентичны результатам, полученным при тестировании работоспособности сервера, запущенного в обычном окружении.

524

Часть 10. Программное обеспечение для организации службы HTTP-сервера

Глава 35

PHP: Hypertext Preprocessor

В этой главе:

1. Ограничения и допущения

2.Пакеты

3.Установка из rpm-пакетов

4.Компиляция, оптимизация и инсталляция PHP

5.Конфигурирование PHP

6.Конфигурационный файл /etc/httpd/ php.ini

7.Конфигурационный файл /etc/httpd/conf/httpd.conf

8.Тестирование PHP

9.Выполнение PHP в окружении chroot-jail

Глава 35. PHP: Hypertext Preprocessor

525

Возможно, что сокращение PHP впервые было использовано для обозначения языка сценариев, первая версия которого была разработана в середине девяностых годов Расмусом Лердорфом (Rasmus Lerdorf) и имела название Personal Home Page Tools. В настоящее время разработчики проекта под сокращением PHP подразумевают рекурсивный акроним от словосочетания "PHP: Hypertext Preprocessor". PHP: Hypertext Preprocessor – это широко используемый язык программирования общего назначения с открытым исходным кодом. Он очень удобен при реализации различных Web-проектов и даже может внедряться в HTML-код страниц, динамически изменяя их содержание.

Простейшим примером использования PHP является отображение большого числа страниц с одинаковым HTML-кодом в начале и конце файла. Можно предложить несколько вариантов реализации представленной задачи. Первый метод заключается в том, что:

1) постоянная часть кода, находящаяся в начале страницы, сохраняется в файле top.php:

<?php?>

<!-- Начало верхней части HTML-кода -->

<html>

<head>

<title> Пример использования PHP </title> </head>

<body>

<!-- Конец верхней части HTML-кода -->

2)постоянная часть кода, находящаяся в конце страницы, сохраняется в файле down.php:

<?php?>

<!—Начало нижней части HTML-кода -->

</body>

</html>

<!-- Конец нижней части HTML-кода -->

3) объединения с помощью файла union12345.php, содержащего следующие строки:

<?php?>

<?

Include("top.php");

?>

<p>Смысловое содержание страницы</p>

<?

Include("down.php");

?>

Если эти файлы будут размещены в каталоге, обслуживаемом Web-сервером, поддерживающим PHP, то при обращении к файлу union12345.php в клиентском браузере будет отображена страница, содержащая следующий HTML-код:

<!-- Начало верхней части HTML-кода -->

<html>

<head>

<title> Пример использования PHP </title> </head>

<body>

<!-- Конец верхней части HTML-кода --> <p>Смысловое содержание страницы</p> <!—Начало нижней части HTML-кода -->

</body>

</html>

<!-- Конец нижней части HTML-кода -->

В рассматриваемом примере HTML-код генерируется только при получении запроса от браузера на доступ к файлу union12345.php. При этом увеличивается нагрузка на процессор и оперативную память системы, на которой установлен сервер. Но при большом количестве имеющих одинаковую структуру файлов сокращаются требования к объему дискового пространства, так как общие для всех файлов части кода хранятся на сервере в единственном экземпляре. Динамическая генерация кода HTML-страниц с использованием PHP возможна при установке модуля php4_module и интеграции его с Apache HTTP Server.

Другим способом решения поставленной задачи является генерация страниц на системе, используемой для администрирования Web-сервера с использованием PHP в режиме командной строки. В этом случае

526

Часть 10. Программное обеспечение для организации службы HTTP-сервера

итоговый код может быть сгенерирован с помощью следующей команды (предполагается, что файлы top.php, down.php и union12345.php находятся в текущем каталоге):

[karlnext@test karlnext]$ php union12345.php > union12345.html

В результате выполнения команды будет сгенерирован файл union12345.html, код которого будет идентичен итоговому коду, приведенному выше. Этот файл может быть размещен в соответствующем каталоге Web-сервера. При таком подходе существенно снижаются требования к производительности процессора и объему оперативной памяти, на которой установлен сервер, но увеличиваются требования к объему жестких дисков. В этом случае нет необходимости интеграции модуля php4_module с Apache HTTP Server, а вполне достаточно просто установить PHP.

В любом случае, если вы хотите использовать PHP для решения каких-либо задач, вам необходимо ознакомиться с прекрасно написанной документацией, доступной на сервере разработчиков, существенная часть которой переведена на русский язык. В этой главе рассматриваются лишь вопросы установки PHP и

интеграции его с Apache HTTP Server.

Ограничения и допущения

Исходные коды находятся в каталоге /var/tmp.

Все операции выполняются пользователем с учетной записью root. Используется дистрибутив ASPLinux 7.3 (Vostok).

В случае, если вы не используете ядро, входящее в комплект поставки ASPLinux 7.3 версии 2.4.185asp или ядро, созданное в соответствии с рекомендациями главы 6, может потребоваться перекомпиляция ядра. Одному из пользователей – тестировавшему установку программного обеспечения в соответствии с инструкциями, приведенными в этой главе, на ядре версии 2.4.20, исходные коды которого были модифицированы патчем Grsecurity – пришлось перекомпилировать ядро для отключения опций

CONFIG_GRKERNSEC_PAX_*.

Процедуры, описанные в этой главе, могут оказаться применимыми для других версий ядра и дистрибутивов Linux, но авторы это не проверяли.

Пакеты

Последующие рекомендации основаны на информации, полученной с домашней страницы проекта PHP: Hypertext Preprocessor по состоянию на 14.07.2003. Регулярно посещайте домашнюю страницу проекта http://www.php.net/и отслеживайте обновления.

Исходные коды PHP: Hypertext Preprocessor содержатся в архиве php-version.tar.gz (последняя доступная на момент написания главы стабильная версия php-4.3.2.tar.gz).

Для инсталляции и нормальной работы php4_module должен быть установлен Apache HTTP Server. Если вы собираетесь включить в поддержку сервера баз данных MySQL, установите сервер баз дан-

ных MySQL в соответствии с рекомендациями главы 31.

Если вы собираетесь использовать PHP с поддержкой протокола SSL, установите OpenSSL в соответствии с рекомендациями главы 12.

Кроме того, для нормальной инсталляции и работы PHP необходимо, чтобы на вашей системе были установлены следующие пакеты:

MySQL-devel-4.0.13-0.i386.rpm;

autoconf-2.13-17.noarch.rpm;

automake-1.4p5-4.noarch.rpm;

bzip2-devel-1.0.2-2.i386.rpm;

dmalloc-4.8.1-6.i386.rpm;

file-3.37-5.i386.rpm;

freetype-2.0.9-2.i386.rpm;

freetype-devel-2.0.9-2.i386.rpm;

gd-1.8.4-4.asp.i386.rpm;

gd-devel-1.8.4-4.asp.i386.rpm;

gmp-devel-4.0.1-3.i386.rpm;

libjpeg-6b-19.i386.rpm;

libjpeg-devel-6b-19.i386.rpm;

libpng-1.0.12-2.i386.rpm;

libpng-devel-1.0.12-2.i386.rpm;

pam-devel-0.75-32.2asp.i386.rpm;

Глава 35. PHP: Hypertext Preprocessor

527

perl-5.6.1-34.99.6.i386.rpm;

pspell-0.12.2-8asp.i386.rpm;

pspell-devel-0.12.2-8asp.i386.rpm;

zlib-devel-1.1.3-25.7.i386.rpm.

Многие из этих пакетов были установлены на предыдущих этапах инсталляции программного обеспечения.

Инсталляция с помощью rpm-пакетов

Если вы предпочитаете использование системы со стандартным ядром и программным обеспечением, установленным из rpm-пакетов, для установки или обновления пакета необходимо выполнить следующие операции.

ЗАМЕЧАНИЕ Авторы настоятельно рекомендуют устанавливать программное обеспечение из исходных кодов.

Шаг 1 Проверьте, установлены ли пакеты программ из списка, представленного выше. Используйте, напри-

мер, команду вида:

[root@test /]# rpm –iq MySQL-devel

Шаг 2 Перейдите в каталог, где находятся пакеты. Если вы в соответствии с рекомендациями главы 2 скопи-

ровали все пакеты, входящие в дистрибутив, в каталог /home/distrib, то выполните команду:

[root@test /]# cd /home/distrib

Шаг 3 Установите недостающие пакеты. Если вы следовали за установкой, предлагаемой в этой книге, вам

останется лишь установить:

[root@test distrib]# rpm -ihv MySQL-devel-4.0.13-0.i386.rpm \ bzip2-devel-1.0.2-2.i386.rpm \

dmalloc-4.8.1-6.i386.rpm \ pam-devel-0.75-32.2asp.i386.rpm\ php-4.1.2-7.i386.rpm

После установки пакетов перейдите к настройке программы PHP.

Компиляция, оптимизация и инсталляция PHP

Для инсталляции PHP из исходных кодов необходимо выполнить следующие операции.

Шаг 1 Осуществите проверку подлинности имеющегося в вашем распоряжении архива с исходными кодами

с использованием процедур, описанных в шаге 1, радела «Компиляция, оптимизация и инсталляция

OpenSSL» главы 12.

Шаг 2

Распакуйте архивы с исходными кодами PHP в каталоге /var/tmp:

[root@test tmp]# tar xzpf php-4.3.2.tar.gz

Шаг 3

Сконфигурируйте исходные коды PHP:

[root@test tmp]# cd php-4.3.2

[root@test php-4.3.2]# export CFLAGS="-O2 -march=i686 -funroll-loops –

D_REENTRANT -fPIC"

export LIBS="-lttf -lfreetype -lpng -ljpeg -lz -lnsl" EXTENSION_DIR=/usr/lib/php4

./configure \ --prefix=/usr \ --exec-prefix=/usr \ --with-layout=GNU \

--with-apxs2=/usr/sbin/apxs \

528 Часть 10. Программное обеспечение для организации службы HTTP-сервера

--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-posix \ --disable-rpath \ --disable-posix \ --enable-discard-path \ --enable-safe-mode \ --enable-magic-quotes \ --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

Шаг 4 Для изменения заданных по умолчанию путей к каталогам, которые не удалось изменить установкой

опций команды ./configure, внесите следующие изменения в файл /var/tmp/php-

4.3.2/Makefile.

Строку:

prefix = /usr/local

замените на:

prefix = /usr/

Строку:

includedir = ${prefix}/include

замените на:

includedir =/usr/include/php4

Строку:

libdir = ${exec_prefix}/lib/php

замените на:

libdir = /usr/lib/php4

Строку:

mandir = ${prefix}/man

замените на:

mandir = /usr/share/man

Строку:

prefix = /usr/local

Глава 35. PHP: Hypertext Preprocessor

529

замените на:

prefix = /usr/

Строку:

sysconfdir = ${prefix}/etc

замените на:

sysconfdir = /etc/sysconfig

Шаг 5

Откомпилируйте, проинсталлируйте PHP, создайте и сохраните в надежном месте список установленных файлов:

[root@test php-4.3.2]# make

[root@test php-4.3.2]# find /* > /root/php1 [root@test php-4.3.2]# make install

...

libtool: install: warning: remember to run `libtool --finish

/var/tmp/php-4.3.2/libs'

chmod 755 /usr/lib/httpd/modules/libphp4.so

[activating module `php4' in /etc/httpd/conf/httpd.conf]

Installing

shared extensions:

/usr/lib/php/20020429/

Installing

PEAR environment:

/usr/share/pear/

[PEAR] Archive_Tar

- installed: 0.9

[PEAR] Console_Getopt - installed: 1.0

[PEAR] PEAR

 

- installed: 1.1

[PEAR] DB

 

- installed: 1.3

[PEAR] HTTP

 

- installed: 1.2

[PEAR] Mail

 

- installed: 1.0.1

[PEAR] Net_SMTP

- installed: 1.0

[PEAR] Net_Socket

- installed: 1.0.1

[PEAR] XML_Parser

- installed: 1.0.1

[PEAR] XML_RPC

- installed: 1.0.4

Installing

build environment:

/usr/lib/php/build/

Installing

header files:

/usr/include/php/php/

Installing

helper programs:

/usr/bin/

program:

phpize

 

 

program:

php-config

 

 

program:

phpextdist

 

 

Следуя рекомендациям разработчиков, завершите инсталляцию библиотек PHP, для этого скопируйте библиотеки PHP в каталог /usr/lib/php/:

[root@test php-4.3.2]# cp /var/tmp/php-4.3.2/libs/* /usr/lib/php4/

и выполните команду:

[root@test php-4.3.2]# libtool --finish /usr/lib/php4/

PATH="$PATH:/sbin" ldconfig -n /usr/lib/php/

----------------------------------------------------------------------

Libraries have been installed in: /usr/lib/php/

If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following:

-add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution

-add LIBDIR to the `LD_RUN_PATH' environment variable during linking

-use the `-Wl,--rpath -Wl,LIBDIR' linker flag

-have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages.

----------------------------------------------------------------------

[root@test php-4.3.2]# install -m0640 php.ini-dist /etc/httpd/php.ini

530

Часть 10. Программное обеспечение для организации службы HTTP-сервера

[root@test php-4.3.2]# strip --strip-debug -R .comment /usr/lib/php4/*.so

[root@test php-4.3.2]# find /* > /root/php2

[root@test php-4.3.2]# diff /root/php1 /root/php2 > /root/php.installed

[root@test php-4.3.2]# mv /root/php.installed

/very_reliable_place/php.installed.YYYYMMDD

Шаг 6 Удалите архив и каталог с исходными кодами:

[root@test php-4.3.2]# cd /var/tmp/ [root@test tmp]# rm -rf php-4.3.2/

[root@test tmp]# rm -f php-4.3.2.tar.gz

Конфигурирование PHP

Конфигурирование PHP осуществляется с использованием следующих файлов:

главного конфигурационного файла /etc/httpd/php.ini;

файла /etc/httpd/conf/httpd.conf (при интеграции PHP с Apache HTTP Server).

Конфигурационный файл /etc/httpd/ php.ini

Отредактируйте файл /etc/httpd/php.ini, руководствуясь вашими потребностями и ниже приведенными рекомендациями:

[PHP]

; Language Options

 

engine

= On

short_open_tag

= On

asp_tags

= Off

precision

= 14

y2k_compliance

= Off

output_buffering

= Off

output_handler

=

unserialize_callback_func

=

zlib.output_compression

= On

implicit_flush

= Off

allow_call_time_pass_reference

= Off

; Safe Mode

 

safe_mode

= On

safe_mode_gid

= Off

safe_mode_include_dir

= ":./usr/share/pear"

safe_mode_exec_dir

=

;open_basedir

=

safe_mode_allowed_env_vars

= PHP_

safe_mode_protected_env_vars

= LD_LIBRARY_PATH

disable_functions

=

; Font Colors

 

highlight.string

= #CC0000

highlight.comment

= #FF9900

highlight.keyword

= #006600

highlight.bg

= #FFFFFF

highlight.default

= #0000CC

highlight.html

= #000000

; Misc

 

expose_php

= Off

; Resource Limits

Соседние файлы в предмете Информатика