LINUX-сервер пошаговые инструкции инсталляции и настройки - Бруй В. В. , Карлов С. В
..pdfГлава 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
