Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Глава 19. Серверное программное обеспечение (веб-сервис)

Linux MM библиотека совместно используемой памяти

Краткий обзор.

Если Вы планируете инсталлировать и использовать модули для веб-сервера Apache, разработанные третьими лицами такие, как mod_perl или mod_php, то я рекомендую установить эту небольшую программу на Вашем сервере. Она даст увеличение производительности этих модулей. Другой пример, если Вы захотите инсталлировать Apache с поддержкой SSL для организации электронной коммерции в Интернет, то MM позволит SSL-протоколу использовать высокопроизводительный кэш сессий, базирующийся на RAM вместо базирующегося на диске.

Как объяснено на веб-сервере библиотеки MM совместно используемой памяти: MM библиотека это 2-уровневая абстрактная библиотека, которая упрощает использование общей памяти между процессами, образованными в результате операции fork на платформе Unix. На первом уровне она скрывает все платформно-зависимые детали реализации (распределение и блокирование) операций с совместно используемыми сегментами памяти, а на втором уровне предоставляет высокоуровневый API в стиле malloc(3) для удобного и хорошо известного пути работы со структурами данных в этих общих сегментах памяти.

Библиотека реализована под условиями open-source (BSD-style) лицензии. Изначально она была написана, как планировалось, для использования внутри следующей версии веб-сервера Apache, как базовая библиотека для предоставления совместно используемых пулов памяти модулям Apache (потому, что сейчас модули Apache могут использовать только память с неупорядоченным хранением данных (heap-allocated memory), которая не используется совместно между pre-forked процессами). Требование этой библиотеки в основном происходит от комплексных модулей, подобных mod_ssl, mod_perl и mod_php, которые извлекли бы много выгоды из совместно используемых пулов памяти.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам /var/tmp (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем root.
Mm версии 1.1.2.

Пакеты.
Домашняя страница MM: http://www.engelschall.com/sw/mm,
Вы должны скачать: mm-1.1.2.tar.gz.

Архивы.
Хорошей идеей будет создать список файлов, установленных в Вашей системе до инсталляции MM и после, в результате, с помощью утилиты diff, Вы сможете узнать, какие файлы были установлены. Например, до инсталляции:
find /* > MM1
После инсталляции:
find /* > MM2
Для получения списка установленных файлов:
diff MM1 MM2 > MM-Installed

Раскройте архив:

[root@deep /]# cp mm-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf mm-version.tar.gz

Компиляция

Шаг 1.

Переместитесь в новый каталог mm и введите следующие команды в терминале:

./configure --disable-shared --prefix=/usr

Опции говорят MM:
Отключить совместно используемые библиотеки.

Шаг 2.

Сейчас мы должны скомпилировать и инсталлировать библиотеку совместно используемой памяти:

[root@deep mm-1.1.2]# make
[root@deep mm-1.1.2]# make test
[root@deep mm-1.1.2]# make install

ЗАМЕЧАНИЕ. Команда make test создаст несколько важных тестов, для проверки работоспособности программы.

Очистка после работы.
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf mm-version/ mm-version.tar.gz

Команда rm будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции mm. Также будет удален сжатый архив mm.

Дополнительная документация

Для получения большей информации, Вы можете прочитать несколько страниц руководства:

mm-config (1) конфигурационный файл библиотеки MM

Инсталлированные файлы

/usr/bin/mm-config
/usr/include/mm.h
/usr/lib/libmm.la
/usr/lib/libmm.a
/usr/man/man1/mm-config.1
/usr/man/man3/mm.3

Веб-сервер Apache

Общий обзор.

Apache это, в настоящее время, наиболее широко используемый HTTP-сервер в мире. Он обогнал всех коммерческих и свободно-распространяемых конкурентов на рынке, и предоставляет огромное число возможностей. Также это наиболее популярный веб-сервер под Linux. Веб-серверы, подобные Apache, в простейшем случае, выводят HTML-страницы, располагающиеся на сервере, на клиентские браузеры, понимающие HTML-код. Используясь совместно с модулями и программами третьих лиц, они становятся полнофункциональными программами, которые предоставляют надежные и полезные сервисы клиентским браузерам.

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

Существует много возможностей, вариантов и опций для инсталляции Apache. Так, в дальнейшем, мы приведем Вам пошаговый пример, где мы покажем как создать Apache с модулями и программами третьих лиц: PHP4, возможностью соединения с LDAP и т. д. Конечно, создание этих программ опционально, и Вы можете свободно компилировать то, что захотите (например, Вы можете решить скомпилировать Apache с поддержкой PHP4, но без SSL или PostgreSQL). Для упрощения мы подразумеваем некоторые предварительные требования для каждого примера. Если они не соответствуют Вашей ситуации, просто скорректируйте шаги.

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

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам /var/tmp (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем root.
Apache версии 1.3.12.
Mod_SSL версии 2.6.4-1.3.12.
Mod_Perl версии 1.24.
Mod_PHP версии 4.0.0.

Пакеты.
Домашняя страница Apache: http://www.apache.org,
FTP-сервер Apache: 63.211.145.10,
Вы должны скачать: apache_1.3.12.tar.gz,
Домашняя страница Mod_SSL: http://www.modssl.org,
FTP-сервер Mod_SSL: 129.132.7.171,
Вы должны скачать: mod_ssl-2.6.4-1.3.12.tar.gz,
Домашняя страница Mod_Perl: http://perl.apache.org,
FTP-сервер Mod_Perl: 63.211.145.10,
Вы должны скачать: mod_perl-1.24.tar.gz,
Домашняя страница Mod_PHP: http://www.php.net ,
Вы должны скачать: php-4.0.0.tar.gz.

Предварительные требования.
  • Если Вы хотите включить в Apache поддержку SSL-шифрования, то OpenSSL должен быть уже проинсталлирован на Вашей системе.
  • Если Вы хотите включить в Apache поддержку соединений с базой данных PosgreSQL, то PosgreSQL должен быть уже проинсталлирован на Вашей системе.
  • Если Вы хотите включить в Apache поддержку высокопроизводительного кэширования сессий, базирующегося на RAM, то MM должен быть уже проинсталлирован на Вашей системе.
  • Если Вы хотите включить в Apache поддержку соединений с сервером каталогов OpenLDAP, то OpenLDAP должен быть уже проинсталлирован на Вашей системе.
  • Если Вы хотите включить в Apache поддержку IMAP & POP, то IMAP & POP должны быть уже проинсталлированы на Вашей системе.

ЗАМЕЧАНИЕ. Для большей информации о требуемых программах смотрите соответствующие главы в этой книге.

Архивы.
Хорошей идеей будет создать список файлов, установленных в Вашей системе до инсталляции Apache и после, в результате, с помощью утилиты diff, Вы сможете узнать, какие файлы были установлены. Например, до инсталляции:
find /* > Apache1
После инсталляции:
find /* > Apache2
Для получения списка установленных файлов:
diff Apache1 Apache2 > Apache-Installed

Раскройте архив:

[root@deep /]# cp apache_version.tar.gz /var/tmp
[root@deep /]# cp mod_ssl-version-version.tar.gz /var/tmp
[root@deep /]# cp mod_perl-version.tar.gz /var/tmp
[root@deep /]# cp php-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf apache_version.tar.gz
[root@deep tmp]# tar xzpf mod_ssl-version-version.tar.gz
[root@deep tmp]# tar xzpf mod_perl-version.tar.gz
[root@deep tmp]# tar xzpf php-version.tar.gz

Компиляция и оптимизация

Шаг 1.

Веб-сервер Apache, подобно многим приложениям, которые мы инсталлировали, не должен запускаться из-под суперпользователя root. Из этих соображений мы должны создать специального пользователя, который имеет минимальный доступ в систему и предназначен только для запуска демона веб-сервера.

[root@deep /]# useradd -c "Apache Server" -u 80 -s /bin/false -r \
                       -d /home/httpd www 2>/dev/null || :
Шаг 2
Внедрение модуля mod-ssl в дерево исходных кодов Apache.

Если Вы хотите использовать и включить поддержку SSL-шифрования данных в Ваш веб-сервер Apache, то переместитесь в новый каталог с исходными кодами mod_ssl (cd mod_ssl-version-version) и введите следующие команды в Вашем терминале:

CC="egcs"
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro \
        -march=pentiumpro -fomit-frame-pointer -fno-exceptions"
./configure --with-apache=../apache_1.3.12 \
            --with-crt=/etc/ssl/certs/server.crt \
            --with-key=/etc/ssl/private/server.key

Опция --with-apache определяет месторасположения каталога с исходными кодами Apache (мы допустили, что в нашем примере используем Apache версии 1.3.12), опция --with-crt определяет месторасположения существующего публичного ключа для SSL-шифрования, а опция --with-key определяет месторасположение существующего приватного ключа для SSL-шифрования.

ЗАМЕЧАНИЕ. Программное обеспечение OpenSSL должно быть уже проинсталлировано на Вашем сервере, публичный и приватные ключи тоже должны уже существовать или быть созданы, или Вы получите сообщение об ошибке во время конфигурирования модуля mod_ssl. Смотрите главу 16 этой книги "Серверное программное обеспечение (сетевой сервис шифрования)", для получения большей информации.

Шаг 3.
Улучшение параметра MaxClients в Apache.

По умолчанию в конфигурационном файле Apache (httpd.conf) максимальное число, устанавливаемое для параметра MaxClients Parameter, равно 256. Для загруженных сайтов и для улучшения производительности рекомендуется увеличить этот параметр. Вы можете сделать это, редактируя файл src/include/httpd.h в дереве исходных кодов Apache и изменить это значение по умолчанию.

Перейдите в каталог с исходными кодами Apache (cd ../apache_1.3.12) и редактируйте файл httpd.h (vi +333 src/include/httpd.h), изменив:

#define HARD_SERVER_LIMIT 256
На:
#define HARD_SERVER_LIMIT 1024

ЗАМЕЧАНИЕ. Если Вы настраиваете Apache без поддержки mod_ssl, то нужно будет редактировать строку 316, а не 333.

Шаг 4.
Преконфигурирование Apache для дальнейшего конфигурирования PHP4.

Если Вы хотите использовать и включить поддержку PHP4 в Ваш веб-сервер Apache, то перейдите в каталог с исходными кодами Apache (cd apache_1.3.12) и выполните следующие команды:

CC="egcs"
OPTIM="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro \
       -march=pentiumpro -fomit-frame-pointer -fno-exceptions"
CFLAGS="-DDYNAMIC_MODULE_LIMIT=0"
./configure --prefix=/home/httpd --bindir=/usr/bin --sbindir=/usr/sbin \
            --libexecdir=/usr/lib/apache --includedir=/usr/include/apache \
            --sysconfdir=/etc/httpd/conf --localstatedir=/var \
            --runtimedir=/var/run --logfiledir=/var/log/httpd \
            --datadir=/home/httpd --proxycachedir=/var/cache/httpd \
            --mandir=/usr/man

ЗАМЕЧАНИЕ. Этот шаг необходим только, если Вы хотите включить поддержку PHP4 в исходные коды Apache. Опция -DDYNAMIC_MODULE_LIMIT=0 будет отключать использование динамически загружаемых модулей и улучшит производительность.

Конфигурирование PHP4 и внедрение его в исходные коды Apache.

Сейчас перейдите в каталог с исходными кодами php4 (cd ../php-4.0) и введите следующие команды:

1) Редактируйте файл php_pgsql.h (vi +46 ext/pgsql/php_pgsql.h) и измените следующие строки:

#include <libpq-fe.h>
#include <libpq/libpq-fs.h>
На:
#include </usr/include/pgsql/libpq-fe.h>
#include </usr/include/pgsql/libpq/libpq-fs.h>

Эти модификации в файле php_pgsql.h необходимы, чтобы указать месторасположения заголовочных файлов libpq-fe.h и libpq-fs.h для базы данных PostgreSQL во время конфигурирования PHP4. В Red Hat Linux библиотеки PostgreSQL находятся в /usr/include/pgsql.

2) Сейчас мы должны сконфигурировать и инсталлировать PHP4 на Вашем Linux-сервере:

CC="egcs"
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro \
        -march=pentiumpro -fomit-frame-pointer -fno-exceptions \
        -I/usr/include/openssl"
./configure --prefix=/usr --with-exec-dir=/usr/bin \
            --with-apache=../apache_1.3.12 \
            --with-config-file-path=/etc/httpd --disable-debug \
            --enable-safe-mode --with-imap \
            (если Вы хотите поддержку IMAP & POP).
            --with-ldap \ (если Вы хотите поддержку сервиса каталогов LDAP).
            --with-pgsql \ (если Вы хотите поддержку баз данных PostgreSQL).
            --with-mm --enable-inline-optimization --with-gnu-ld \
            --enable-memory-limit

Эти опции говорят PHP4:

  • Компилировать без символов отладки.
  • Включить safe mode по умолчанию.
  • Включить поддержку IMAP & POP.
  • Включить поддержку сервиса каталогов LDAP.
  • Включить поддержку базы данных PostgresSQL.
  • Включить поддержку mm для улучшения производительности.
  • Включить внутреннюю оптимизацию для лучшей производительности.
  • Компилировать с поддержкой ограничения памяти.
  • В качестве компилятора C использовать GNU ld.
[root@deep php-4.0]# make
[root@deep php-4.0]# make install
Шаг 5.
Внедрение mod_perl в исходные коды.

Если Вы хотите использовать и включить поддержку языка программирования Perl в Ваш веб-сервер Apache, то перейдите в каталог с исходными кодами mod_perl (cd ../mod_perl-1.24) и введите следующие команды на терминале:

perl Makefile.PL EVERYTHING=1 APACHE_SRC=../apache_1.3.12/src USE_APACI=1 \
     PREP_HTTPD=1 DO_HTTPD=1
[root@deep mod_perl-1.24]# make
[root@deep mod_perl-1.24]# make install

Шаг 6.

Создание/Инсталляция Apache с/без mod_ssl+-PHP4 и/или mod_perl.

Сейчас, когда Вы добавили в исходные коды Apache все модули, которые хотели, наступило время скомпилировать и проинсталлировать его. Переместитесь в каталог с исходными кодами Apache (cd ../apache_1.3.12) и введите следующие команды на Вашем терминале:

SSL_BASE=SYSTEM
(требуется, если Вы хотите включить поддержку mod_ssl в Apache).
EAPI_MM=SYSTEM
(требуется, если Вы хотите включить поддержку mm библиотеку разделяемой памяти в Apache).
CC="egcs"
OPTIM="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro \
       -march=pentiumpro -fomit-frame-pointer -fno-exceptions"
CFLAGS="-DDYNAMIC_MODULE_LIMIT=0"
./configure --prefix=/home/httpd --bindir=/usr/bin --sbindir=/usr/sbin \
            --libexecdir=/usr/lib/apache --includedir=/usr/include/apache \
            --sysconfdir=/etc/httpd/conf --localstatedir=/var \
            --runtimedir=/var/run --logfiledir=/var/log/httpd \
            --datadir=/home/httpd --proxycachedir=/var/cache/httpd \
            --mandir=/usr/man
            --add-module=src/modules/experimental/mod_mmap_static.c \
            (требуется, если Вы хотите использовать mod_mmap, смотрите секцию
            "Оптимизация Apache" в этой главе для сбора большей информации).
            --add-module=src/modules/standard/mod_auth_db.c \
            (требуется, если Вы хотите использовать mod_auth_db, смотрите
            секцию "Безопасность Apache" в этой главе для большей информации).
            --enable-module=ssl \
            (требуется, если Вы хотите включить поддержку mod_ssl в Apache).
            --enable-rule=SSL_SDBM \
            (требуется, если Вы хотите включить поддержку mod_ssl в Apache).
            --disable-rule=SSL_COMPAT \
            (требуется, если Вы хотите включить поддержку mod_ssl в Apache).
            --activate-module=src/modules/php4/libphp4.a \
            (требуется, если Вы хотите включить поддержку PHP4 в Apache).
            --enable-module=php4 \
            (требуется, если Вы хотите включить поддержку PHP4 в Apache).
            --activate-module=src/modules/perl/libperl.a \
            (требуется, если Вы хотите включить поддержку mod_perl в Apache).
            --enable-module=perl \
            (требуется, если Вы хотите включить поддержку mod_perl в Apache).
            --disable-module=status --disable-module=userdir \
            --disable-module=negotiation --disable-module=autoindex \
            --disable-module=asis --disable-module=imap
            --disable-module=env --disable-module=actions

Эти опции говорят Apache выполнить следующие установки:

  • Модуль mod_mmap для улучшения производительности.
  • Ммодуль mod_auth_db для парольной аутентификации пользователей.
  • Модуль mod_ssl для шифрования данных и безопасного соединения.
  • Модуль mod_php4 для поддержки языка подготовки сценариев на стороне сервера php и улучшения загрузки веб-страниц, созданных в PHP.
  • Модуль mod_perl для лучшей безопасности и производительности работы cgi-скриптов.
  • Выключить модуль status.
  • Выключить модуль userdir.
  • Выключить модуль negotiation.
  • Выключить модуль autoindex.
  • Выключить модуль asis.
  • Выключить модуль imap.
  • Выключить модуль env.
  • Выключить модуль actions.

ЗАМЕЧАНИЕ. Важно заметить, что удаление всех необязательных модулей во время конфигурирования улучшит производительность Вашего веб-сервера Apache. В нашей конфигурации приведенной выше, мы удалили большинство неиспользуемых модулей для уменьшения времени загрузки и ограничения риска безопасности веб-сервера. Смотрите документацию Apache, чтобы получить информацию о каждом удаленном модуле.

Шаг 7.

Сейчас мы должны инсталлировать Apache на Вашем Linux сервере:

[root@deep apache_1.3.12]# make
[root@deep apache_1.3.12]# make install
[root@deep apache_1.3.12]# rm -f /usr/sbin/apachectl
[root@deep apache_1.3.12]# rm -f /usr/man/man8/apachectl.8
[root@deep apache_1.3.12]# rm -rf /home/httpd/icons
[root@deep apache_1.3.12]# rm -rf /home/httpd/htdocs
[root@deep apache_1.3.12]# cd /var/tmp/php-4.0
[root@deep php-4.0.0]# install -m 644 php.ini.dist /usr/lib/php.ini
[root@deep php-4.0.0]# rm -rf /etc/httpd/conf/ssl.crl
[root@deep php-4.0.0]# rm -rf /etc/httpd/conf/ssl.crt
[root@deep php-4.0.0]# rm -rf /etc/httpd/conf/ssl.csr
[root@deep php-4.0.0]# rm -rf /etc/httpd/conf/ssl.key
[root@deep php-4.0.0]# rm -rf /etc/httpd/conf/ssl.prm
[root@deep php-4.0.0]# rm -f /etc/httpd/conf/srm.conf srm.conf.default \
                          access.conf access.conf.default

Команда make будет компилировать все файлы с исходными кодами в исполняемые двоичные, команда make install будет инсталлировать исполняемые и сопутствующие им файлы в тербуемые места. Команда rm -f удалит небольшой скрипт apachectl, отвечающий за запуск и остановку демона Apache, так как мы используем для этого срипт httpd, находящийся в /etc/rc.d/init.d. Мы также удаляем каталог /home/httpd/icons, который используется веб-сервером Apache при автоматической индексации файлов. Эта возможность несет в себе риск безопасности и из-за этого мы ее отключили. Каталог /home/httpd/htdocs содержит все файлы с документацией на Apache, поэтому после прочтения, мы спокойно можем его удалить. Команда install -m проинсталлирует файл php.ini.dist в каталог /etc/httpd и переименует его в php.ini. Этот файл контролирует многие аспекты работы PHP. Каталоги ssl.crl, ssl.crt, ssl.csr, ssl.key и ssl.prm в /etc/httpd/conf связаны с SSL, и в них хранятся публичные и приватные ключи. Так как для хранения ключей мы используем другой путь, /etc/ssl, мы можем их спокойно удалить. В заключение, мы удаляем неиспользуемые файлы srm.conf, srm.conf.default, access.conf и access.conf.default, вместо которых сейчас используется одни файл httpd.conf.

Очистка после работы.

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf apache-version/ apache-version.tar.gz
                    mod_ssl-version-version/ mod_ssl-version-version.tar.gz \
                    php-version/ php-version.tar.gz mod_perl-version/ \
                    mod_perl-version.tar.gz

Команды rm будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции Apache, mod_ssl, mod_perl и php. Также будут удалены сжатые архивы Apache, mod_ssl, mod_perl и php из каталога /var/tmp.

Конфигурации

Конфигурационные файлы для разных сервисов очень зависят от Ваших нужд и сетевой архитектуры. Кто-то хочет установить Apache только чтобы показывать веб-страницы, другой хочет использовать его для работы с базой данных и e-коммерции с поддержкой SSL и т. д. В этой книге мы предоставляем Вам файл httpd.conf с установками для PHP, Perl, SSL, LDAP и парольной аутентификации, чтобы показать Вам различные возможности. Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве floppy.tgz, включающем все конфигурационные файлы для всех программ. Если Вы скачаете этот файл, то Вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файлы, связанные с Apache, из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями Вы можете скачать с адреса http://www.openna.com/books/floppy.tgz.

Для запуска веб-сервера Apache следующие файлы должны быть созданы или скопированы на Ваш сервер.

Копируйте httpd.conf в каталог /etc/httpd/conf.
Копируйте httpd в каталог /etc/rc.d/init.d.
Копируйте apache в каталог /etc/logrotate.d.

Вы можете взять эти файлы из архива floppy.tgz.

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

Файл httpd.conf это основной конфигурационный файл для веб-сервера Apache. Существует большое количество различных опций, про которые Вы должны прочитать в документации к Apache. Следующая конфигурация представляет из себя пример минимальной рабочей конфигурации для Apache с поддержкой SSL. Также важно заметить, что мы комментируем только параметры, связанные с безопасностью и оптимизацией, а все остальные оставляем для Вашего изучения. Редактируйте файл httpd.conf (vi /etc/httpd/conf/httpd.conf) и добавьте/измените в нем:

### Секция 1: Глобальное окружение
ServerType standalone
ServerRoot "/etc/httpd"
PidFile /var/run/httpd.pid
ResourceConfig /dev/null
AccessConfig /dev/null
Timeout 300
KeepAlive On
MaxKeepAliveRequests 0
KeepAliveTimeout 15
MinSpareServers 16
MaxSpareServers 64
StartServers 16
MaxClients 512
MaxRequestsPerChild 100000

### Секция 2: Основная конфигурация сервера
Port 80
<IfDefine SSL>
Listen 80
Listen 443
</IfDefine>
User www
Group www
ServerAdmin admin@openna.com
ServerName www.openna.com
DocumentRoot "/home/httpd/ona"
<Directory />
  Options None
  AllowOverride None
  Order deny,allow
  Deny from all
</Directory>

<Directory "/home/httpd/ona">
  Options None
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

<Files .pl>
  Options None
  AllowOverride None
  Order deny,allow
  Deny from all
</Files>

<IfModule mod_dir.c>
DirectoryIndex index.htm index.html index.php index.php3 default.html index.cgi
</IfModule>

#<IfModule mod_include.c>
#Include conf/mmap.conf
#</IfModule>

UseCanonicalName On
<IfModule mod_mime.c>
TypesConfig /etc/httpd/conf/mime.types
</IfModule>

DefaultType text/plain
HostnameLookups Off
ErrorLog /var/log/httpd/error_log
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
combined
SetEnvIf Request_URI \.gif$ gif-image
CustomLog /var/log/httpd/access_log combined env=!gif-image
ServerSignature Off

<IfModule mod_alias.c>
ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/"
<Directory "/home/httpd/cgi-bin">
  AllowOverride None
  Options None
  Order allow,deny
  Allow from all
</Directory>
</IfModule>

<IfModule mod_mime.c>
AddEncoding x-compress Z
AddEncoding x-gzip gz tgz
AddType application/x-tar .tgz
</IfModule>

ErrorDocument 500 "The server made a boo boo.
ErrorDocument 404 http://192.168.1.1/error.htm
ErrorDocument 403 "Access Forbidden -- Go away.

<IfModule mod_setenvif.c>
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
</IfModule>

### Секция 3: Виртуальные хосты
<IfDefine SSL>
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
</IfDefine>

<IfModule mod_ssl.c>
SSLPassPhraseDialog builtin
SSLSessionCache dbm:/var/run/ssl_scache
SSLSessionCacheTimeout 300
SSLMutex file:/var/run/ssl_mutex
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
SSLLog /var/log/httpd/ssl_engine_log
SSLLogLevel warn
</IfModule>

<IfDefine SSL>
<VirtualHost _default_:443>
DocumentRoot "/home/httpd/ona"
ServerName www.openna.com
ServerAdmin admin@openna.com
ErrorLog /var/log/httpd/error_log
SSLEngine on
SSLCipherSuite
ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
SSLCACertificatePath /etc/ssl/certs
SSLCACertificateFile /etc/ssl/certs/ca.crt
SSLCARevocationPath /etc/ssl/crl
SSLVerifyClient none
SSLVerifyDepth 10
SSLOptions +ExportCertData +StrictRequire
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
SetEnvIf Request_URI \.gif$ gif-image
CustomLog /var/log/httpd/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" env=!gif-image
</VirtualHost>
</IfDefine>

Этот файл httpd.conf говорит следующее:

ServerType standalone
Опция ServerType определяет, как Apache должен быть запущен. Вы можете запустить его из суперсервера inetd или как автономный демон. Для лучшей производительности и скорости рекомендуется запускать Apache как автономный демон.

ServerRoot "/etc/httpd"
Опция ServerRoot определяет каталог, являющийся корневым для сервера. По этому пути определяется месторасположения конфигурационных файлов.

PidFile /var/run/httpd.pid
Опция PidFile определяет месторасположение файла, в котором будет хранится информация об id демона, когда он запущен. Эта опция требуется только, если Вы запускаете Apache в автономном режиме.

ResourceConfig /dev/null
Опция ResourceConfig определяет расположение старого файла srm.conf, который Apache читал после прочтения файла httpd.conf. Когда Вы устанавливаете эту опцию в /dev/null, Apache позволит включить содержимое этого файла в файл httpd.conf, и Вы получите только один файл для конфигурирования.

AccessConfig /dev/null
Опция AccessConfig определяет расположение старого файла access.conf, который Apache читал после прочтения файла srm.conf. Когда Вы устанавливаете эту опцию в /dev/null, Apache позволит Вам включить содержимое этого файла в файл httpd.conf, и Вы получите только один файл для конфигурирования.

Timeout 300
Опция Timeout определяет время, которое Apache будет ждать до получения запросов GET, POST, PUT и ACK на передачу. Вы можете спокойно оставить значение этой опции как это принято по умолчанию.

KeepAlive On
Опция KeepAlive, если установлена в "On", определяет возможность установления постоянных соединений на этом веб-сервере. Для лучшей производительности рекомендуется установить этот параметр в On и разрешить обработку более одного запроса на одно соединение.

MaxKeepAliveRequests 0
Опция MaxKeepAliveRequests определяет число запросов, которое может обработать сервер на одно соединение, если опция KeepAlive установлена в On. Когда значение равно 0, может обрабатываться неограниченное число запросов. Для лучшей производительности рекомендуется устанавливать этот параметр в 0.

KeepAliveTimeout 15
Опция KeepAliveTimeout определяет как долго, в секундах, Apache будет ждать поступления новых запросов до закрытия соединения. 15 секунд хорошее среднее значение для производительности сервера.

MinSpareServers 16
Опция MinSpareServers определяет минимальное число неработающих дочерних процессов сервера, которые не обрабатывают запросы. Это важный настроечный параметр, влияющий на производительность веб-сервера Apache. Значение 16 рекомендуется различными тестами на производительность в Интернет.

MaxSpareServers 64
Опция MaxSpareServers определяет максимальное число неработающих дочерних процессов сервера, которые не обрабатывают запросы. Это тоже важный настроечный параметр, влияющий на производительность веб-сервера Apache. Значение 64 рекомендуется различными тестами на производительность в Интернет.

StartServers 16
Опция StartServers определяет число дочерних серверных процессов, которые будут созданы при запуске Apache. Это тоже важный настроечный параметр, влияющий на производительность веб-сервера Apache. Значение 16 рекомендуется различными тестами на производительность в Интернет.

MaxClients 512
Опция MaxClients определяет число одновременных запросов, которые может обработать Apache. Это тоже важный настроечный параметр, влияющий на производительность веб-сервера Apache. Значение 512 рекомендуется различными тестами на производительность в Интернет.

MaxRequestsPerChild 100000
Опция MaxRequestsPerChild определяет число запросов, которое индивидуальный дочерний серверный процесс может обработать, после чего автоматически умрет. Это тоже важный настроечный параметр, влияющий на производительность веб-сервера Apache.

User www
Опция User определяет UID, под которым Apache будет запускаться. Очень важно создать нового пользователя, который имеет минимальные права доступа к системе, и единственным его предназначением будет запуск демона веб-сервера.

Group www
Опция Group определяет GID, под которым Apache будет запускаться. Важно создать новую группу, которая имеет минимальные права доступа к системе, и единственным ее предназначением будет запуск демона веб-сервера.

DirectoryIndex index.htm index.html index.php index.php3 default.html index.cgi
Опция DirectoryIndex определяет файлы, используемые Apache как заранее созданный HTML-индекс каталога, если Apache не может найти индексные страницы по умолчанию, он будет рассматривать следующий элемент этого параметра. Для улучшения производительности веб-сервера, рекомендуется индексные страницы, используемые на Вашем сервере по умолчанию, поместить в этом списке на первом месте.

Include conf/mmap.conf
Опция Include определяет расположение другого файла, который Вы можете включить в Ваш серверный конфигурационный файл (httpd.conf). В нашем случае мы включаем файл mmap.conf, находящийся в каталоге /etc/httpd/conf. Этот файл (mmap.conf) отображает файлы в памяти для более быстрого их предоставления. Смотрите секцию "Оптимизация Apache" для сбора большей информации.

HostnameLookups Off
Опция HostnameLookups, если установлена в Off, определяет, что DNS lookups отключен. Рекомендуется устанавливать эту опцию в Off для сокращения сетевого трафика и улучшения производительности веб-сервера.

Конфигурация файла /etc/logrotate.d/apache

Сконфигурируем файл /etc/logrotate.d/apache для автоматической ротации файлов регистрации Apache каждую неделю. Создайте файл apache (touch /etc/logrotate.d/apache) и добавьте в него:

/var/log/httpd/access_log
{
  missingok
  postrotate
  /usr/bin/killall -HUP httpd
  endscript
}

/var/log/httpd/error_log
{
  missingok
  postrotate
  /usr/bin/killall -HUP httpd
  endscript
}

/var/log/httpd/ssl_request_log
{
  missingok
  postrotate
  /usr/bin/killall -HUP httpd
  endscript
}

/var/log/httpd/ssl_engine_log
{
  missingok
  postrotate
  /usr/bin/killall -HUP httpd
  endscript
}

ЗАМЕЧАНИЕ. Строки для автоматической ротации файлов регистрации SSL ssl_request_log и ssl_engine_log включены в этот файл. Если Вы решили запускать Apache без поддержки SSL, Вы должны удалить их.

Конфигурация скрипта /etc/rc.d/init.d/httpd

Настроим Ваш скрипт /etc/rc.d/init.d/httpd, который предназначен для запуска и остановки веб-сервера Apache. Создайте файл httpd (touch /etc/rc.d/init.d/httpd) и добавьте в него:

#!/bin/sh
#
# Скрипт для запуска веб-сервера Apache
#
# chkconfig: 345 85 15
# описание: Apache это World Wide Web сервер. Он используется для
# предоставления HTML-файлов и CGI.
# имя процесса: httpd
# pid-файл: /var/run/httpd.pid
# конфигурационный файл: /etc/httpd/conf/httpd.conf
# Библиотека исходных функций.
. /etc/rc.d/init.d/functions
# Смотрите, как мы вызываем.
case "$1" in
 start)
   echo -n "Starting httpd: "
   daemon httpd -DSSL
   echo
   touch /var/lock/subsys/httpd
   ;;
 stop)
   echo -n "Shutting down http: "
   killproc httpd
   echo
   rm -f /var/lock/subsys/httpd
   rm -f /var/run/httpd.pid
   ;;
 status)
   status httpd
   ;;
 restart)
   $0 stop
   $0 start
   ;;
 reload)
   echo -n "Reloading httpd: "
   killproc httpd -HUP
   echo
   ;;
 *)
   echo "Usage: $0 {start|stop|restart|reload|status}"
   exit 1
esac
exit 0
Сейчас сделайте этот скрипт исполняемым и измените права доступа:
[root@deep /]# chmod 700 /etc/rc.d/init.d/httpd
Создайте символические rc.d ссылки для Apache:
[root@deep /]# chkconfig --add httpd
Запустите Ваш новый сервер Apache вручную:
[root@deep /]# /etc/rc.d/init.d/httpd start
Starting httpd:            [ OK ]

ЗАМЕЧАНИЕ. Опция -DSSL будет запускать Apache в режиме SSL. Если Вы хотите запустить Apache в нормальном режиме, то удалите -DSSL ближайшую к строке, которая читается daemon httpd.

PHP4

Если Вы планируете использовать PHP4 с Вашим веб-сервером Apache, не забудьте включить в Ваш файл /etc/httpd/conf/httpd.conf следующие строки, включающие эту возможность:

Шаг 1.

Редактируйте файл httpd.conf file (vi /etc/httpd/conf/httpd.conf) и добавьте следующие строки между тэгами секции <IfModule mod_mime.c> и </IfModule>:

AddType application/x-httpd-php .php
AddType application/x-httpd-php .php3
AddType application/x-httpd-php-source .phps

Шаг 2.

Вы должны перезапустить веб-сервер Apache, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/httpd restart
Shutting down http:           [ OK ]
Starting httpd:               [ OK ]

Шаг 3.

После того, как вышеприведенные строки были включены в файл httpd.conf, Вы должны тестировать новую возможность PHP4. Мы создадим небольшой PHP-файл с именем php.php в нашем DocumentRoot, а затем попробуем загрузить этот документ в наш браузер, чтобы убедиться, что PHP4 работает на сервере.

Создайте файл php.php в DocumentRoot (touch /home/httpd/ona/php.php) и внесите в него следующие строки:

<body bgcolor="#FFFFFF">
  <?php phpinfo()?>
</body>

ЗАМЕЧАНИЕ. Эти строки будут информировать программу PHP4 вывести различные части информации о конфигурации нашего Linux-сервера.

Шаг 4.

Сейчас в браузере введите следующий адрес: http://my-web-server/php.php. Где <my-web-server> это адрес Вашего веб-сервера Apache, а <php.php> это имя PHP-документа, который мы создали.

Perl-модуль Devel::Symdump

Если Вы планируете использовать модуль mod_perl с сервером Apache, Вы можете захотеть установить небольшой perl-модуль Devel::Symdump. Этот модуль, разработанный третьими лицами, позволит проверять таблицу идентификаторов perl и иерархии классов в запускаемых программах. Чтобы создать и инсталлировать его выполните следующие шаги.

Пакеты.
Домашняя страница: http://www.perl.com/CPAN/modules/by-module/Devel,
Вы должны скачать: Devel-Symdump-2_00_tar.gz.

[root@deep /]# cp Devel-Symdump-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf Devel-Symdump-version.tar.gz

Шаг 1.

Перейдите в новый каталог Devel-Symdump и введите следующие команды для компиляции и инсталляции модуля на Ваш Linux-сервер:

[root@deep Devel-Symdump-2.00]# perl Makefile.PL
[root@deep Devel-Symdump-2.00]# make
[root@deep Devel-Symdump-2.00]# make test
[root@deep Devel-Symdump-2.00]# make install

Шаг 2.

Как только модуль проинсталлирован на Вашей системе, Вы должны включить в Ваш файл /etc/httpd/conf/httpd.conf следующие строки, чтобы просмотреть статус различных модулей Perl на Вашем сервере. Редактируйте файл httpd.conf (vi /etc/httpd/conf/httpd.conf) и добавьте следующие строки:

<Location /perl-status>
   SetHandler perl-script
   PerlHandler Apache::Status
   Order deny,allow
   Deny from all
   Allow from 192.168.1.0/24
</Location>

Шаг 3.

Перезапустите веб-сервер Apache, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/httpd restart
Shutting down http:       [ OK ]
Starting httpd:           [ OK ]

Шаг 4.

В заключение, мы должны тестировать новый модуль Devel-Symdump, чтобы убедиться, что мы можем смотреть статус разных модулей Perl. Для этого введите в окне браузера следующий адрес: http://my-web-server/perl-status. Где <my-web-server> задает адрес веб-сервера.

Очистка после работы

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf Devel-Symdump.version/ Devel-Symdump-version.tar.gz

Инсталлированные файлы

> /usr/lib/perl5/man/man3/Devel::Symdump.3
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Devel
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Devel/Symdump
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Devel/Symdump/.packlist
> /usr/lib/perl5/site_perl/5.005/Devel
> /usr/lib/perl5/site_perl/5.005/Devel/Symdump
> /usr/lib/perl5/site_perl/5.005/Devel/Symdump/Export.pm
> /usr/lib/perl5/site_perl/5.005/Devel/Symdump.pm

Perl-библиотека CGI.pm

CGI.pm это Perl5-библиотека, написанная для использования в CGI-скриптах. Старая версия этой программы существует по умолчанию на Вашей системе, но она имеет ряд ошибок. Поэтому рекомендуется обновить Вашу копию до версии 2.56 и новее. Для обновления этого модуля выполните следующие шаги.

Пакеты.
Домашняя страница CGI.pm:
http://stein.cshl.org/WWW/software/CGI/cgi_docs.html,
Вы должны скачать: CGI_pm_tar.gz.

[root@deep /]# cp CGI_pm_tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf CGI_pm_tar.gz

Шаг 1.

Первое, Вы должны проверить версию CGI.pm, инсталлированной на Вашей системе. Для этого используйте команду:

[root@deep]# perl -e 'use CGI; print $CGI::VERSION."\n";'
2.46

Шаг 2.

Перейдите в каталог CGI.pm и введите следующие команды на терминале для компиляции и инсталляции обновленной библиотеки на Linux-сервере:

[root@deep CGI.pm-2.56]# perl Makefile.PL
[root@deep CGI.pm-2.56]# make
[root@deep CGI.pm-2.56]# make test
[root@deep CGI.pm-2.56]# make install
Очистка после работы.
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf CGI.pm-version/ CGI_pm_tar.gz

Инсталлированные файлы

> /usr/lib/perl5/5.00503/CGI/Pretty.pm
> /usr/lib/perl5/5.00503/i386-linux/auto/CGI
> /usr/lib/perl5/5.00503/i386-linux/auto/CGI/.packlist
> /usr/lib/perl5/man/man3/CGI::Pretty.3

Организация защиты Apache

Изменение прав доступа к некоторым важным файлам и каталогам для Вашего веб-сервера.

Когда Вы инсталлируете Apache на сервере, некоторые файлы и каталоги имеют слишком много прав, установленных по умолчанию. Двоичная программа httpd может быть установлена в режим "только для чтения" пользователю root, и исполнения для владельца, группы и других пользователей. Каталоги /etc/httpd/conf и /var/log/httpd не должны быть открыты для чтения, записи и исполнения для других пользователей:

[root@deep /]# chmod 511 /usr/sbin/httpd
[root@deep /]# chmod 750 /etc/httpd/conf
[root@deep /]# chmod 750 /var/log/httpd

Автоматическая индексация.

Если Вы включили автоматическую индексацию каталогов в конфигурационном файле (IndexOptions в httpd.conf), тогда Вы имеете проблему в безопасности, так как любой запрос к каталогу, не имеющему индексного файла, вызовет создания индекса всего того, что находится в каталоге. Во многих случаях Вы можете хотеть, чтобы пользователи смотрели файлы, которые Вы специально создали для этого. Для отключения этой возможности нужно удалить право на чтение из каталога DocumentRoot (но не файлов внутри него):

[root@deep /]# cd /home/httpd
[root@deep httpd]# chmod 311 ona
[root@deep httpd]# ls -la
d-wx--x--x 13 webadmin webadmin 1024 Jul 28 08:12 ona

Сейчас, после этой модификации, любой запрос к защищенному каталогу должен получить сообщение об ошибке:

Forbidden
You don't have permission to access ⌠/ona/■ on this server.

ЗАМЕЧАНИЕ. ona это DocumentRoot (каталог, в котором Вы храните Ваши документы).

Создание файла с паролями .dbmpasswd для аутентификации пользователей.

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

Шаг 1.

Утилита dbmmanage из Apache может быть использована для создания и обновления имен и паролей HTTP-пользователей. Этот метод использует DBM-формат файла, который представляет из себя наиболее быстрый механизм, когда необходимо управлять тысячью пользователями в файле с паролями. Первое, необходимо изменить права доступа к этой программе на (0750/-rwxr-x---), запись только для root, чтение и исполнение для группы и ничего для других пользователей.

Для изменнеия прав доступа используйте следующую команду:

[root@deep /]# chmod 750 /usr/bin/dbmmanage

Для создания имени пользователя и пароля используйте команду:

[root@deep /]# /usr/bin/dbmmanage /etc/httpd/.dbmpasswd adduser username
New password:
Re-type new password:
User username added with password encrypted to l4jrdAL9MH0K.

Здесь /etc/httpd это месторасположение файла с паролями, .dbmpasswd имя файла с паролями и username имя пользователя, которое мы хотим добавить в файл .dbmpasswd.

Шаг 2.

Если Вы используете утилиту dbmmanage для создания паролей и имен пользователей, не забудьте включить в Ваш конфигурационный файл /etc/httpd/conf/httpd.conf информацию о части веб-сервера, которую Вы хотите защитить аутентификацией пользователей по паролю:

Редактируйте файл httpd.conf (vi /etc/httpd/conf/httpd.conf) и добавьте следующие строки для защиты приватного каталога веб-сервера ona:

<Directory "/home/httpd/ona/private">
  Options None
  AllowOverride AuthConfig
  AuthName "restricted stuff"
  AuthType Basic
  AuthDBUserFile /etc/httpd/.dbmpasswd
  require valid-user
</Directory>

Путь </home/httpd/ona/private> определяет защищаемый каталог, а </etc/httpd/.dbmpasswd> определяет месторасположение файла с паролями. ЗАМЕЧАНИЕ. Модуль аутентификации по DB-файлам с паролями Вы должны включить во время конфигурирования Вашего веб-сервера Apache, использовав параметр --add-module=src/modules/standard/mod_auth_db.c. Смотрите документацию на Apache для большей информации.

Шаг 3.

Вы должны перезагрузить веб-сервер, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/httpd restart
Shutting down http:         [ OK ]
Starting httpd:             [ OK ]

Шаг 4.

В заключение, мы должны тестировать новый защищаемый каталог (private). Для проверки введите в окне браузера следующий адрес: http://my-web-server/private. <my-web-server> адрес веб-сервера, </private> это каталог, который Вы защищаете.

Иммунизация Важного конфигурационного файла httpd.conf.

Как мы уже знаем, бит постоянства может быть использован для предотвращения удаления, переписывания или создания символической ссылки к файлу. Так как Ваш файл httpd.conf уже настроен, то его можно защитить подобным битом:

[root@deep /]# chattr +i /etc/httpd/conf/httpd.conf

Запуск Apache в chroot-окружении

Эта часть фокусируется на предотвращении использования Apache как точки взлома системы. Apache по умолчанию запускается как не root-пользователь, ограничивая тем самым любые разрушения, действиями, котрые может выполнить обычный пользователь с локальным shell. Конечно, в большинстве случаев такой защиты достаточно, но можно сделать еще один дополнительный шаг: запуск Apache в chroot-окружении.

Основная выгода от использования chroot: ограничение части файловой системы, которую демон может видеть как корневой каталог. Дополнительно, так как эта часть файловой системы нужна только для поддержки Apache, количество программ, доступное на ней, чрезвычайно ограничено. Наиболее важно то, что здесь не нужно иметь setuid-root программ, которые можно использовать для получения root-доступа и взлома установленных chroot-ограничений.

Chrooting apache это не простая задача. Перед ее решением мы рассмотрим некоторые "за" и "против", чтобы Вы решили, нужно ли Вам это.

За:

  1. Если apache будет взломан, то атакующий не получит доступа к элементам файловой системы.
  2. Плохо написанные CGI-скрипты, которые могут позволить кому-нибудь получить доступ к Вашему серверу, не будут работать.

Против:

  1. Существуют дополнительные библиотеки, которые Вы должны иметь в chroot-окружении, чтобы Apache работал корректно.
  2. Если Вы используете любые Perl/CGI возможности в Apache, нужно будет скопировать необходимые двоичные файлы, Perl-библиотеки и файлы в предназначенное место chroot-пространства. То же самое относится к SSL, PHP, LDAP, PostgresSQL и другим программам третьих лиц.

chroot-конфигурация, приведенная ниже, полагает, что Вы компилировали Ваш сервер Apache со внешней программой mod_ssl. Различия в том, что Вы компилировали с Вашим веб-сервером Apache постоянно находится в библиотеках и двоичных файлах, которые Вы должны копировать в chroot-каталог.

Помните, что если Вы компилировали Apache с поддержкой mod_perl, Вы должны скопировать все связанные двоичные файлы и Perl-библиотеки в chroot-каталог. Perl находится в /usr/lib/perl5 и в случае использования возможностей Perl, копируйте каталог Perl в /chroot/httpd/usr/lib/perl5. Не забудьте перед копированием создать каталог /chroot/httpd/usr/lib/perl5 в Вашей chroot-структуре.

Ниже приводятся все необходимые шаги для запуска веб-сервера Apache в chroot-окружении:

Шаг 1.

Мы должны определить разделяемые библиотеки от которых зависит httpd. Их надо будет позже скопировать в chroot-каталог. Для поиска разделяемых библиотек, от которых зависит httpd, выполните следующую команду:

[root@deep /]# ldd /usr/sbin/httpd
libpam.so.0 => /lib/libpam.so.0 (0x40016000)
libm.so.6 => /lib/libm.so.6 (0x4001f000)
libdl.so.2 => /lib/libdl.so.2 (0x4003b000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x4003e000)
libnsl.so.1 => /lib/libnsl.so.1 (0x4006b000)
libresolv.so.2 => /lib/libresolv.so.2 (0x40081000)
libdb.so.3 => /lib/libdb.so.3 (0x40090000)
libc.so.6 => /lib/libc.so.6 (0x400cb000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Сделайте заметки об этих файлах, они потребуются нам позже.

Шаг 2.

Создайте новый UID и GID, если это еще не сделано, необходимые для запуска Apache httpd. Это важно, потому что запуск из-под root ликвидирует преимущества chroot-окружения, а использование UID, которые уже существуют на системе (например, nobody) может дать доступ сервису к другим ресурсам. Представьте себе, что веб-сервер запущен из-под пользователя nobody, или любого другого используемого UID/GID, и был взломан. Взломщик получит доступ из chroot к любым другим процессам, запущенным как этот пользователь. Здесь приведены типичные UID и GID. Проверьте файлы /etc/passwd и /etc/group на наличие свободных UID/GID. В нашей конфигурации мы используем значение 80 и UID/GID www:

[root@deep /]# useradd -c "Apache Server" -u 80 -s /bin/false -r \
                       -d /home/httpd www 2>/dev/null || :

Вышеприведенная команда создаст группу www с числовым GID равном 80, и пользователя www с числовым номером UID, равном 80.

Шаг 3.

Установим chroot-окружение. Первое, мы должны создать chroot-структуру для Apache. Мы используем /chroot/httpd как chroot-каталог для Apache. /chroot/httpd это только каталог на отдельном разделе, где мы решили разместить apache для большей безопасности.

[root@deep /]# /etc/rc.d/init.d/httpd stop
(только если Apache уже инсталлирован и запущен на Вашей системе).
Shutting down http:                 [ OK ]
[root@deep /]# mkdir /chroot/httpd

Далее мы создаем остальные каталоги:

[root@deep /]# mkdir /chroot/httpd/dev
[root@deep /]# mkdir /chroot/httpd/lib
[root@deep /]# mkdir /chroot/httpd/etc
[root@deep /]# mkdir -p /chroot/httpd/usr/sbin
[root@deep /]# mkdir -p /chroot/httpd/var/run
[root@deep /]# mkdir -p /chroot/httpd/var/log/httpd
[root@deep /]# chmod 750 /chroot/httpd/var/log/httpd
[root@deep /]# mkdir -p /chroot/httpd/home/httpd

Копируйте основной конфигурационный каталог, конфигурационные файлы, каталог cgi-bin, root-каталог и программу httpd в chroot-окружение:

[root@deep /]# cp -r /etc/httpd /chroot/httpd/etc
[root@deep /]# cp -r /home/httpd/cgi-bin /chroot/httpd/home/httpd
[root@deep /]# cp -r /home/httpd/your-DocumentRoot /chroot/httpd/home/httpd
[root@deep /]# mknod /chroot/httpd/dev/null c 1 3
[root@deep /]# chmod 666 /chroot/httpd/dev/null
[root@deep /]# cp /usr/sbin/httpd /chroot/httpd/usr/sbin

Нам нужны каталоги /chroot/httpd/etc, /chroot/httpd/dev, /chroot/httpd/lib, /chroot/httpd/usr/sbin, /chroot/httpd/var/run, /chroot/httpd/home/httpd и /chroot/httpd/var/log/httpd потому, что / считается от точки chroot.

Шаг 4.

Если Вы скомпилировали Apache с поддержкой SSL, Вы должны скопировать элементы каталога /etc/ssl, который содержит все приватные и публичные ключи, в chroot-окружение:

[root@deep /]# cp -r /etc/ssl /chroot/httpd/etc
(требуется только, если включена поддержка mod_ssl).
[root@deep /]# chmod 600 /chroot/httpd/etc/ssl/certs/ca.crt
(требуется только, если включена поддержка mod_ssl).
[root@deep /]# chmod 600 /chroot/httpd/etc/ssl/certs/server.crt
(требуется только, если включена поддержка mod_ssl).
[root@deep /]# chmod 600 /chroot/httpd/etc/ssl/private/ca.key
(требуется только, если включена поддержка mod_ssl).
[root@deep /]# chmod 600 /chroot/httpd/etc/ssl/private/server.key
(требуется только, если включена поддержка mod_ssl).

Шаг 5.

Так как мы компилировали apache с использованием разделяемых библиотек, нужно инсталлировать их в структуру chroot-каталога. Используйте ldd /chroot/httpd/usr/sbin/httpd для поиска требуемых библиотек. Вывод этой команды будет выглядеть примерно так:

libpam.so.0 => /lib/libpam.so.0 (0x40016000)
libm.so.6 => /lib/libm.so.6 (0x4001f000)
libdl.so.2 => /lib/libdl.so.2 (0x4003b000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x4003e000)
libnsl.so.1 => /lib/libnsl.so.1 (0x4006b000)
libresolv.so.2 => /lib/libresolv.so.2 (0x40081000)
libdb.so.3 => /lib/libdb.so.3 (0x40090000)
libc.so.6 => /lib/libc.so.6 (0x400cb000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Копируйте разделяемые библиотеки определенные выше:

[root@deep /]# cp /lib/libpam.so.0 /chroot/httpd/lib
[root@deep /]# cp /lib/libm.so.6 /chroot/httpd/lib
[root@deep /]# cp /lib/libdl.so.2 /chroot/httpd/lib
[root@deep /]# cp /lib/libcrypt.so.1 /chroot/httpd/lib
[root@deep /]# cp /lib/libnsl* /chroot/httpd/lib
[root@deep /]# cp /lib/libresolv* /chroot/httpd/lib
[root@deep /]# cp /lib/libdb.so.3 /chroot/httpd/lib
[root@deep /]# cp /lib/libc.so.6 /chroot/httpd/lib
[root@deep /]# cp /lib/ld-linux.so.2 /chroot/httpd/lib

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

[root@deep /]# cp /lib/libnss_compat* /chroot/httpd/lib
[root@deep /]# cp /lib/libnss_dns* /chroot/httpd/lib
[root@deep /]# cp /lib/libnss_files* /chroot/httpd/lib

Шаг 6.

Мы должны скопировать файлы passwd и group в /chroot/httpd/etc. Концепция их использования такая же, как и в ftpd. Затем мы удаляем все элементы из этих файлов, за исключением пользователя и группы, под которыми запускается apache:

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

Редактируйте файл passwd (vi /chroot/httpd/etc/passwd) и удалите все элементы, кроме пользователя, под которым мы запускаем apache (в нашем случае это www):

www:x:80:80::/home/www:/bin/bash

Редактируйте файл group (vi /chroot/httpd/etc/group) и удалите все элементы, кроме группы, под которой запускается apache (в нашем случае это www):

www:x:80:

Шаг 7.

Вам потребуются файлы /etc/resolv.conf, /etc/nsswitch.conf и /etc/hosts в Вашем chroot-окружении:

[root@deep /]# cp /etc/resolv.conf /chroot/httpd/etc
[root@deep /]# cp /etc/hosts /chroot/httpd/etc
[root@deep /]# cp /etc/nsswitch.conf /chroot/httpd/etc

Шаг 8.

Сейчас на некоторые файлы в chroot-окружении мы установим бит постоянства для лучшей безопасности. Установите бит постоянства на файл passwd:

[root@deep /]# cd /chroot/httpd/etc
[root@deep /]# chattr +i passwd

Установите бит постоянства на файл group:

[root@deep /]# cd /chroot/httpd/etc
[root@deep /]# chattr +i group

Установите бит постоянства на файл httpd.conf:

[root@deep /]# cd /chroot/httpd/etc/httpd/conf
[root@deep /]# chattr +i httpd.conf

Установите бит ⌠постоянства■ на файл resolv.conf:

[root@deep /]# cd /chroot/httpd/etc
[root@deep /]# chattr +i resolv.conf

Установите бит постоянства на файл hosts:

[root@deep /]# cd /chroot/httpd/etc
[root@deep /]# chattr +i hosts

Установите бит постоянства на файл nsswitch.conf:

[root@deep /]# cd /chroot/httpd/etc
[root@deep /]# chattr +i nsswitch.conf

Шаг 9.

Копируйте файл localtime в chroot так, чтобы регистрационные входы были правильно откорректированы для Вашей локальной timezone:

[root@deep /]# cp /etc/localtime /chroot/httpd/etc

Шаг 10.

Удалите не нужные Apache каталоги и файлы:

[root@deep /]# rm -rf /var/log/httpd
[root@deep /]# rm -rf /etc/httpd
[root@deep /]# rm -rf /home/httpd
[root@deep /]# rm -f /usr/sbin/httpd

Мы можем спокойно удалить все вышеназванные файлы и каталоги, так как они сейчас находятся в нашем chroot-каталоге.

Шаг 11.

Надо также сказать syslogd о новом chroot-сервисе. Нормально процессы обращаются к syslogd через /dev/log. В chroot-окружении это невозможно, поэтому syslogd должен слушать /chroot/httpd/dev/log. Чтобы сделать это, редактируйте скрипт запуска syslog для определения дополнительного места, которое необходимо слушать.

Редактируйте скрипт syslog (vi /etc/rc.d/init.d/syslog) и измените в нем строку:
daemon syslogd -m 0
на:
daemon syslogd -m 0 -a /chroot/httpd/dev/log

Шаг 12.

По умолчанию скрипт httpd запускает демон httpd вне chroot-окружения. Мы должны изменить это, для этого редактируйте скрипт httpd (vi /etc/rc.d/init.d/httpd) и измените следующие строки:
daemon httpd
на:
/usr/sbin/chroot /chroot/httpd/ /usr/sbin/httpd -DSSL
rm -f /var/run/httpd.pid
на:
rm -f /chroot/httpd/var/run/httpd.pid

Шаг 13.

В заключение, Вы должны проверить новую chroot-конфигурацию Вашего веб-сервера Apache.

Первое, перезагрузите демон syslogd:

[root@deep /]# /etc/rc.d/init.d/syslog restart
Shutting down kernel logger:         [ OK ]
Shutting down system logger:         [ OK ]
Starting system logger:              [ OK ]
Starting kernel logger:              [ OK ]

Затем запустите Apache в chroot-окружении:

[root@deep /]# /etc/rc.d/init.d/httpd start
Starting httpd:                      [ OK ]

Если Вы не получили каких-либо ошибок, дайте команду:

[root@deep /]# ps ax | grep httpd
14373 ? S 0:00 httpd -DSSL
14376 ? S 0:00 httpd -DSSL
14377 ? S 0:00 httpd -DSSL
14378 ? S 0:00 httpd -DSSL
14379 ? S 0:00 httpd -DSSL
14380 ? S 0:00 httpd √DSSL
14381 ? S 0:00 httpd -DSSL
14382 ? S 0:00 httpd -DSSL
14383 ? S 0:00 httpd -DSSL
14384 ? S 0:00 httpd -DSSL
14385 ? S 0:00 httpd -DSSL
14386 ? S 0:00 httpd -DSSL
14387 ? S 0:00 httpd -DSSL
14388 ? S 0:00 httpd -DSSL
14389 ? S 0:00 httpd -DSSL
14390 ? S 0:00 httpd -DSSL
14391 ? S 0:00 httpd -DSSL
14397 ? S 0:00 httpd -DSSL
14476 ? S 0:00 httpd -DSSL
14477 ? S 0:00 httpd -DSSL
14478 ? S 0:00 httpd -DSSL

Если это так, то проверьте действительно ли процесс сменил корень (chroot):

[root@deep /]# ls -la /proc/14373/root

Вы должны увидеть:

dev
etc
home
lib
usr
var

Здесь 14373 определяет PID одного из процессов httpd. Поздравляю!

Так же как описано выше, если Вы используете Perl, Вам нужно скопировать или создать жесткие ссылки для любых системных библиотек, perl-библиотек из /usr/lib/perl5 и двоичных файлов в chroot-структуре. Также надо действовать для SSL, PHP, LDAP, PostgreSQL и других программ.

Конфигурация файла /etc/logrotate.d/apache

Сейчас, файлы регистрации Apache находятся в каталоге /chroot/var/log/httpd вместо /var/log/httpd, из-за этого нам надо модифицировать файл /etc/logrotate.d/httpd. Также, мы скомпилировали Apache с mod_ssl, поэтому должны добавить строки, разрешающие программе logrotate ротировать файлы ssl_request_log и ssl_engine_log. Сконфигурируем файл /etc/logrotate.d/apache на автоматическую ротацию файлов регистрации каждую неделю.

Создайте файл apache (touch /etc/logrotate.d/apache) и добавьте в него:

/chroot/httpd/var/log/httpd/access_log
{
   missingok
   postrotate
     /usr/bin/killall -HUP /chroot/httpd/usr/sbin/httpd
   endscript
}
/chroot/httpd/var/log/httpd/error_log
{
   missingok
   postrotate
     /usr/bin/killall -HUP /chroot/httpd/usr/sbin/httpd
   endscript
}
/chroot/httpd/var/log/httpd/ssl_request_log
{
   missingok
   postrotate
     /usr/bin/killall -HUP /chroot/httpd/usr/sbin/httpd
   endscript
}
/chroot/httpd/var/log/httpd/ssl_engine_log
{
   missingok
   postrotate
     /usr/bin/killall -HUP /chroot/httpd/usr/sbin/httpd
   endscript
}

Оптимизация Apache

Модуль mod_mmap_static

Существует специальный модуль, поставляемый с дистрибутивом Apache, называемый mod_mmap_static, который может быть использован для улучшения производительности Вашего веб-сервера. Этот модуль работает, отображая статически настроенный список часто запрашиваемых, но редко модифицируемых файлов из RootDirectory. Так, если файл выводимый Apache, часто не изменяется, Вы можете использовать этот модуль для отображения в памяти статического документа и увеличения скорости работы веб-сервера Apache.

Важно заметить, что модуль mod_mmap_static должен быть включен на этапе конфигурации и компиляции Apache. Если Вы следовали за нашим описанием процесса конфигурации и компиляции, то это уже сделано в Apache (--add-module=../mod_mmap_static.c).

Шаг 1.

Для отображения статических документов в памяти используйте следующую команду:

[root@deep /]# find /home/httpd/ona -type f -print | sed -e |
                    's/.*/mmapfile &/' > /etc/httpd/conf/mmap.conf

</home/httpd/ona> это RootDirectory или, если быть более точным, каталог из которого Вы будете предоставлять Ваши документы, а </etc/httpd/conf/mmap.conf> это месторасположение файла mmap.conf, который содержит статическое отображение в памяти всех документов из RootDirectory.

Шаг 2.

После того, как файл mmap.conf был создан в месте, которое мы отвели для хранения этого файла, мы должны включить его в файл httpd.conf, чтобы использовать его возможности на сервере.

Редактируйте файл httpd.conf (vi /etc/httpd/conf/httpd.conf) и добавьте в него строки:

<IfModule mod_include.c>
Include conf/mmap.conf
</IfModule>

ЗАМЕЧАНИЕ. Смотрите документацию на Apache для большей информации об использовании mod_mmap_static. Помните, что эта возможность должна использоваться, когда предоставляемые документы часто не изменяются.

Шаг 3.

Перезагрузите веб-сервер Apache, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/httpd restart
Shutting down http:             [ OK ]
Starting httpd:                 [ OK ]

Атрибуты atime и noatime

Атрибуты atime и noatime могут быть использованы для небольшого увеличения производительности Apache. Смотрите главу 4 в этой книге, "Общая системная оптимизация" для получения большей информации по этом вопросу.

Инсталлированные файлы для веб-сервера Apache

> /etc/rc.d/init.d/httpd
> /etc/rc.d/rc0.d/K15httpd
> /etc/rc.d/rc1.d/K15httpd
> /etc/rc.d/rc2.d/K15httpd
> /etc/rc.d/rc3.d/S85httpd
> /etc/rc.d/rc4.d/S85httpd
> /etc/rc.d/rc5.d/S85httpd
> /etc/rc.d/rc6.d/K15httpd
> /etc/logrotate.d/apache
> /etc/httpd
> /etc/httpd/conf
> /etc/httpd/conf/httpd.conf.default
> /etc/httpd/conf/httpd.conf
> /etc/httpd/conf/mime.types.default
> /etc/httpd/conf/mime.types
> /etc/httpd/conf/magic.default
> /etc/httpd/conf/magic
> /etc/httpd/php.ini
> /home/httpd
> /home/httpd/cgi-bin
> /home/httpd/cgi-bin/printenv
> /home/httpd/cgi-bin/test-cgi
> /usr/bin/htpasswd
> /usr/bin/htdigest
> /usr/bin/dbmmanage
> /usr/include/apache
> /usr/include/apache/xml
> /usr/include/apache/xml/asciitab.h
> /usr/include/apache/xml/hashtable.h
> /usr/include/apache/xml/iasciitab.h
> /usr/include/apache/xml/latin1tab.h
> /usr/include/apache/xml/nametab.h
> /usr/include/apache/xml/utf8tab.h
> /usr/include/apache/xml/xmldef.h
> /usr/include/apache/xml/xmlparse.h
> /usr/include/apache/xml/xmlrole.h
> /usr/include/apache/xml/xmltok.h
> /usr/include/apache/xml/xmltok_impl.h
> /usr/include/apache/alloc.h
> /usr/include/apache/ap.h
> /usr/include/apache/ap_compat.h
> /usr/include/apache/ap_config.h
> /usr/include/apache/ap_config_auto.h
> /usr/include/apache/ap_ctx.h
> /usr/include/apache/ap_ctype.h
> /usr/include/apache/ap_hook.h
> /usr/include/apache/ap_md5.h
> /usr/include/apache/ap_mm.h
> /usr/include/apache/ap_mmn.h
> /usr/include/apache/ap_sha1.h
> /usr/include/apache/buff.h
> /usr/include/apache/compat.h
> /usr/include/apache/conf.h
> /usr/include/apache/explain.h
> /usr/include/apache/fnmatch.h
> /usr/include/apache/hsregex.h
> /usr/include/apache/http_conf_globals.h
> /usr/include/apache/http_config.h
> /usr/include/apache/http_core.h
> /usr/include/apache/http_log.h
> /usr/include/apache/http_main.h
> /usr/include/apache/http_protocol.h
> /usr/include/apache/http_request.h
> /usr/include/apache/http_vhost.h
> /usr/include/apache/httpd.h
> /usr/include/apache/multithread.h
> /usr/include/apache/rfc1413.h
> /usr/include/apache/scoreboard.h
> /usr/include/apache/util_date.h
> /usr/include/apache/util_md5.h
> /usr/include/apache/util_script.h
> /usr/include/apache/util_uri.h
> /usr/include/apache/os.h
> /usr/include/apache/os-inline.c
> /usr/lib/apache
> /usr/man/man1/htpasswd.1
> /usr/man/man1/htdigest.1
> /usr/man/man1/dbmmanage.1
> /usr/man/man8/ab.8
> /usr/man/man8/httpd.8
> /usr/man/man8/logresolve.8
> /usr/man/man8/rotatelogs.8
> /usr/man/man8/apxs.8
> /usr/sbin/httpd
> /usr/sbin/ab
> /usr/sbin/logresolve
> /usr/sbin/rotatelogs
> /usr/sbin/apxs
> /var/log/httpd
> /var/cache
> /var/cache/httpd

Инсталлированные файлы для PHP4

> /usr/bin/phpize
> /usr/bin/php-config
> /usr/include/php
> /usr/include/php/Zend
> /usr/include/php/Zend/FlexLexer.h
> /usr/include/php/Zend/acconfig.h
> /usr/include/php/Zend/modules.h
> /usr/include/php/Zend/zend-parser.h
> /usr/include/php/Zend/zend-scanner.h
> /usr/include/php/Zend/zend.h
> /usr/include/php/Zend/zend_API.h
> /usr/include/php/Zend/zend_alloc.h
> /usr/include/php/Zend/zend_builtin_functions.h
> /usr/include/php/Zend/zend_compile.h
> /usr/include/php/Zend/zend_config.h
> /usr/include/php/Zend/zend_config.w32.h
> /usr/include/php/Zend/zend_constants.h
> /usr/include/php/Zend/zend_dynamic_array.h
> /usr/include/php/Zend/zend_errors.h
> /usr/include/php/Zend/zend_execute.h
> /usr/include/php/Zend/zend_execute_locks.h
> /usr/include/php/Zend/zend_extensions.h
> /usr/include/php/Zend/zend_fast_cache.h
> /usr/include/php/Zend/zend_globals.h
> /usr/include/php/Zend/zend_globals_macros.h
> /usr/include/php/Zend/zend_hash.h
> /usr/include/php/Zend/zend_highlight.h
> /usr/include/php/Zend/zend_indent.h
> /usr/include/php/Zend/zend_list.h
> /usr/include/php/Zend/zend_llist.h
> /usr/include/php/Zend/zend_operators.h
> /usr/include/php/Zend/zend_ptr_stack.h
> /usr/include/php/Zend/zend_stack.h
> /usr/include/php/Zend/zend_variables.h
> /usr/include/php/TSRM
> /usr/include/php/TSRM/TSRM.h
> /usr/include/php/ext
> /usr/include/php/ext/standard
> /usr/include/php/ext/standard/base64.h
> /usr/include/php/ext/standard/basic_functions.h
> /usr/include/php/ext/standard/cyr_convert.h
> /usr/include/php/ext/standard/datetime.h
> /usr/include/php/ext/standard/dl.h
> /usr/include/php/ext/standard/dns.h
> /usr/include/php/ext/standard/exec.h
> /usr/include/php/ext/standard/file.h
> /usr/include/php/ext/standard/flock_compat.h
> /usr/include/php/ext/standard/fsock.h
> /usr/include/php/ext/standard/global.h
> /usr/include/php/ext/standard/head.h
> /usr/include/php/ext/standard/html.h
> /usr/include/php/ext/standard/info.h
> /usr/include/php/ext/standard/md5.h
> /usr/include/php/ext/standard/microtime.h
> /usr/include/php/ext/standard/pack.h
> /usr/include/php/ext/standard/pageinfo.h
> /usr/include/php/ext/standard/php_array.h
> /usr/include/php/ext/standard/php_assert.h
> /usr/include/php/ext/standard/php_browscap.h
> /usr/include/php/ext/standard/php_crypt.h
> /usr/include/php/ext/standard/php_dir.h
> /usr/include/php/ext/standard/php_filestat.h
> /usr/include/php/ext/standard/php_image.h
> /usr/include/php/ext/standard/php_iptc.h
> /usr/include/php/ext/standard/php_lcg.h
> /usr/include/php/ext/standard/php_link.h
> /usr/include/php/ext/standard/php_mail.h
> /usr/include/php/ext/standard/php_metaphone.h
> /usr/include/php/ext/standard/php_output.h
> /usr/include/php/ext/standard/php_rand.h
> /usr/include/php/ext/standard/php_standard.h
> /usr/include/php/ext/standard/php_string.h
> /usr/include/php/ext/standard/php_syslog.h
> /usr/include/php/ext/standard/php_var.h
> /usr/include/php/ext/standard/phpdir.h
> /usr/include/php/ext/standard/phpmath.h
> /usr/include/php/ext/standard/quot_print.h
> /usr/include/php/ext/standard/reg.h
> /usr/include/php/ext/standard/type.h
> /usr/include/php/ext/standard/uniqid.h
> /usr/include/php/ext/standard/url.h
> /usr/include/php/ext/standard/url_scanner.h
> /usr/include/php/regex
> /usr/include/php/regex/regex.h
> /usr/include/php/regex/regex_extra.h
> /usr/include/php/php.h
> /usr/include/php/php_regex.h
> /usr/include/php/php3_compat.h
> /usr/include/php/safe_mode.h
> /usr/include/php/fopen-wrappers.h
> /usr/include/php/php_version.h
> /usr/include/php/php_globals.h
> /usr/include/php/php_reentrancy.h
> /usr/include/php/php_ini.h
> /usr/include/php/SAPI.h
> /usr/include/php/php_config.h
> /usr/include/php/zend_config.h
> /usr/include/php/build-defs.h
> /usr/lib/php
> /usr/lib/php/DB
> /usr/lib/php/DB/common.php
> /usr/lib/php/DB/odbc.php
> /usr/lib/php/DB/mysql.php
> /usr/lib/php/DB/pgsql.php
> /usr/lib/php/DB/storage.php
> /usr/lib/php/build
> /usr/lib/php/build/pear.m4
> /usr/lib/php/build/fastgen.sh
> /usr/lib/php/build/library.mk
> /usr/lib/php/build/ltlib.mk
> /usr/lib/php/build/program.mk
> /usr/lib/php/build/rules.mk
> /usr/lib/php/build/rules_pear.mk
> /usr/lib/php/build/shtool
> /usr/lib/php/build/acinclude.m4
> /usr/lib/php/DB.php

Инсталлированные файлы для mod_perl

> /usr/lib/perl5/5.00503/i386-linux/perllocal.pod
> /usr/lib/perl5/man/man3/Apache.3
> /usr/lib/perl5/man/man3/Apache::Constants.3
> /usr/lib/perl5/man/man3/Apache::Leak.3
> /usr/lib/perl5/man/man3/Apache::Log.3
> /usr/lib/perl5/man/man3/Apache::PerlRunXS.3
> /usr/lib/perl5/man/man3/Apache::Symbol.3
> /usr/lib/perl5/man/man3/Apache::Table.3
> /usr/lib/perl5/man/man3/Apache::URI.3
> /usr/lib/perl5/man/man3/Apache::Util.3
> /usr/lib/perl5/man/man3/Apache::FakeRequest.3
> /usr/lib/perl5/man/man3/mod_perl.3
> /usr/lib/perl5/man/man3/Apache::ExtUtils.3
> /usr/lib/perl5/man/man3/Apache::SIG.3
> /usr/lib/perl5/man/man3/Apache::Status.3
> /usr/lib/perl5/man/man3/Apache::Include.3
> /usr/lib/perl5/man/man3/Apache::Debug.3
> /usr/lib/perl5/man/man3/Apache::Resource.3
> /usr/lib/perl5/man/man3/Apache::src.3
> /usr/lib/perl5/man/man3/Apache::PerlRun.3
> /usr/lib/perl5/man/man3/Apache::httpd_conf.3
> /usr/lib/perl5/man/man3/mod_perl_traps.3
> /usr/lib/perl5/man/man3/Apache::Options.3
> /usr/lib/perl5/man/man3/mod_perl_cvs.3
> /usr/lib/perl5/man/man3/Apache::Symdump.3
> /usr/lib/perl5/man/man3/Apache::RegistryLoader.3
> /usr/lib/perl5/man/man3/mod_perl_method_handlers.3
> /usr/lib/perl5/man/man3/mod_perl_tuning.3
> /usr/lib/perl5/man/man3/cgi_to_mod_perl.3
> /usr/lib/perl5/man/man3/Apache::StatINC.3
> /usr/lib/perl5/man/man3/Apache::Registry.3
> /usr/lib/perl5/man/man3/Bundle::Apache.3
> /usr/lib/perl5/man/man3/Apache::SizeLimit.3
> /usr/lib/perl5/man/man3/Apache::PerlSections.3
> /usr/lib/perl5/man/man3/Apache::RedirectLogFix.3
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/buff.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/multithread.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/httpd.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_config.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/alloc.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_md5.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_ctx.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/util_md5.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/rfc1413.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/conf.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/util_uri.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/explain.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_compat.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_config.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_sha1.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/scoreboard.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/compat.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_request.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_core.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_mm.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_protocol.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/util_date.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_hook.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_main.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_conf_globals.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/util_script.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_vhost.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_ctype.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/hsregex.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_mmn.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_config_auto.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_log.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/fnmatch.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/netware
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/netware/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/netware/getopt.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/netware/test_char.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/netware/uri_delims.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/netware/precomp.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/bs2000
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/bs2000/os-inline.c
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/bs2000/ebcdic.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/bs2000/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/tpf
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/tpf/ebcdic.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/tpf/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/tpf/os-inline.c
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/service.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/getopt.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/registry.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/resource.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/installer
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/installer/installdll
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/installer/installdll/test
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/installer/installdll/test/test.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/installer/installdll/test/resource.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/passwd.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/readdir.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/unix
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/unix/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/unix/os-inline.c
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/os390
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/os390/os-inline.c
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/os390/ebcdic.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/os390/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/mpeix
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/mpeix/os-inline.c
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/mpeix/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/os2
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/os2/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/os2/os-inline.c
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/ssl
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/ssl/ssl_expr.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/ssl/ssl_util_table.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/ssl/ssl_util_ssl.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/ssl/ssl_expr_parse.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/ssl/mod_ssl.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/ssl/ssl_util_sdbm.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/perl
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/perl/mod_perl.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/perl/mod_perl_version.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/perl/perl_PL.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/perl/mod_perl_xs.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/php4
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/php4/mod_php4.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/proxy
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/proxy/mod_proxy.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/standard
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/standard/mod_rewrite.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/support
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/support/suexec.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/iasciitab.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/latin1tab.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/xmldef.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/xmlparse.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/xmltok.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/xmlrole.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/hashtable.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/nametab.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/xmltok_impl.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/utf8tab.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/asciitab.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/regex
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/regex/utils.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/regex/regex2.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/regex/cclass.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/regex/cname.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/typemap
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/Leak
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/Leak/Leak.so
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/Leak/Leak.bs
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/Symbol
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/Symbol/Symbol.so
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/Symbol/Symbol.bs
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/mod_perl
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/mod_perl/.packlist
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl.pod
> /usr/lib/perl5/site_perl/5.005/i386-linux/Bundle
> /usr/lib/perl5/site_perl/5.005/i386-linux/Bundle/Apache.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/test.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Debug.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Resource.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/src.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/httpd_conf.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Symdump.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/RegistryLoader.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Registry.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/SizeLimit.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/RedirectLogFix.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/MyConfig.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Constants
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Constants/Exports.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/SIG.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/StatINC.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Opcode.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/PerlSections.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/FakeRequest.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/ExtUtils.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Include.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Status.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/PerlRun.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Options.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/RegistryNG.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/RegistryBB.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Connection.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Constants.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/File.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Leak.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Log.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/ModuleConfig.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/PerlRunXS.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Server.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Symbol.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Table.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/URI.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Util.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl_hooks.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl_hooks.pm.PL
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl_tuning.pod
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl_cvs.pod
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl_method_handlers.pod
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl_traps.pod
> /usr/lib/perl5/site_perl/5.005/i386-linux/cgi_to_mod_perl.pod
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache.pm