Linux Apache SSL PHP/FI frontpage mini-HOWTO

Аннотация

Это документ содержит информацию: о построении многоцелевого веб-сервера, который будет поддерживать динамическое веб-содержание, используя скрипт-язык PHP/FI; безопасную передачу данных, основанную на Netscape SSL; безопасное выполнение CGI скриптов; серверные расширения M$ Frontpage.


Содержание
Введение
Установка компонентов
Соединение всех элементов
Авторские права

Введение

Прежде, чем вы начнете чтение, я должен предупредить - Я не лингвист, поэтому в этом документе возможны орфографические и грамматические ошибки. Сообщите мне о них.


Описание компонентов

Веб-сервер, который вы получите после того, как выполните все рекомендации, будет состоять из нескольких частей: исходных текстов сервера Apache с несколькими (хорошо, многими) патчами и некоторых внешних программ. Я рекомендую использовать программные версии, которые мною опробованы, они, вероятно, откомпилируются без больших проблем и вы, в результате, получите довольно устойчивый демон. Если вы не боитесь, то можете попробовать откомпилировать все последние версии с большим количеством новых возможностей, но не вините меня, если что-то будет сбоить ;-). Однако, в случае удачи, вы можете сообщить мне о результатах, чтобы другие рабочие конфигурации были включены в будущие версии этого документа. Все шаги были протестированы на linux версии 2.0.35, так что это howto несколько специфично под linux, но вы должны без проблем использовать данную конфигурацию в других реализациях Unix.

Вы не обязательно должны компилировать Apache со всеми компонентами. Я попробовал структурировать этот howto так, чтобы вы могли пропускать неинтересные вам части.

Этот документ - не просто справочник к Apache, SSL, PHP/FI или frontpage. Его главная цель состоит в том, чтобы избавить веб-провайдеров от головной боли при установке веб-сервера, а также сделать небольшой вклад в linux.

PHP - скрипт-язык, поддерживающий создание динамических HTML-страниц. Он несколько похож на модуль SSI сервера Apache, но намного более сложен и имеет модули для работы с базами данных для многих популярных баз. Для PHP необходимы библиотеки GD.

SSL - реализация протоколов защищенной передачи данных, разработанные Netscape (Secure Socket Layer), которые обеспечивают безопасные подключения по небезопасным сетям, например, передача номера кредитных карточек из форм.

frontpage - визуальный веб-инструмент, который использует некоторые серверные расширения, называемые webbots. Некоторые люди думают, что frontpage - это круто, потому что вы можете создавать формы для обратной связи и доски объявлений без каких-либо знаний html или cgi. Он даже оберегает веб-мастера от передачи файлов через ftp, используя встроенный веб-издатель (Web Publisher). Если вы желаете поддерживать frontpage, но не хотите устанавливать сервер под Windows, тогда расширения сервера Apache - ваш выбор.


Рабочие конфигурации

Хотя этот документ был скачан приблизительно 100 раз с того момента, как я издал его, я получил не очень много откликов. Мне рассказали о том, что все это работает и в других комбинациях. У меня работают:

  • Linux 2.0.31, Apache 1.2.4, PHP 2.0.0, SSL 0.8.0, fp 98 3.0.3 (*)

  • Linux 2.0.33, Apache 1.2.5, PHP 2.0.1, SSL 0.8.0, fp 98 3.0.3 (*)

  • Linux 2.0.35, Apache 1.2.6, PHP 3, SSL 0.8.0, fp 98 3.0.4

(*) версия 3.0.3 не рекомендуетсяРазд. Некоторые соображения


История

версия 0.0/Апрель 98: Предварительная версия

версия 1.0/Июнь 98: Apache версии 1.2.6, обновлен раздел fp, незначительные изменения

версия 1.1/Июль 98: Формат преобразован в sgml, и внесены небольшие изменения

Вы можете найти последнюю версию этого документа по этому адресу


Установка компонентов

Приготовления

Вам будет необходимо следующее:

Получите исходники, которые вам необходимы. Распакуйте apache, php, gd и ssl в /usr/src. Распакуйте патч SSL в /usr/src/apache_1.2.6.


Добавление PHP

Зайдите в каталог /usr/src/gd1.2 и введите make. В результате этого соберется библиотека GD libgd.a, которую нужно скопировать в /usr/lib. После этого перейдите в каталог php-2.0.1 и запустите ./install.

Would you like to compile PHP/FI as an Apache module? [yN] y (Вы хотели бы компилировать PHP/FI как модуль Apache?)
Are you compiling for an Apache 1.1 or later server? [Yn] y (Вы компилируете PHP для Apache 1.1 или для более поздней версии?)
Are you using Apache-Stronghold? [yN] y (Вы используете Apache-Stronghold?)
Does your Apache server support ELF dynamic loading? [yN] y (Ваш сервер Apache поддерживает динамическую загрузку ELF?)
Apache include directory (which has httpd.h)? [/usr/local/include/apache] /usr/src/apache_1.2.6/src (Каталог заголовочных файлов для Apache (в котором находится httpd.h)?)
Would you like to build an ELF shared library? [yN] y (После компиляции программа будет использовать общедоступные библиотеки)
Additional directories to search for .h files []: /usr/src/gd1.2 (Дополнительные каталоги для поиска файлов с расширением .h)
Would you like the bundled regex library? [yN] n (Вы хотели бы собрать связанную regex библиотеку?)

Подобно расширениям frontpage, phtml имеет проблему с защитой, потому что выполняется под веб-сервером. Убедитесь, что включили безопасный режим в src/php.h и ограничьте путь поиска файлов. Имеются некоторые другие параметры в php.h - вы можете их отредактировать. Если вы очень обеспокоены относительно защиты, компилируйте php как cgi. Однако, вы потеряете эффективность, и это не так шикарно, как модуль.

Наберите make чтобы собрать все файлы. Когда компиляция закончится, скопируйте mod_php.* и libphp.a в /usr/src/apache_1.2.6/src. Добавьте строку Module php_module mod_php.o в конец /usr/src/apache_1.2.6/src/Configuration, добавьте -lphp -lm -lgdbm -lgd к EXTRA_LIBS в том же самом файле, application/x-httpd-php phtml в файл Apache mime.types и AddType application/x-httpd-php .phtml в Apache srm.conf.

Вы можете добавить index.phtml к DirectoryIndex в этом файле так, чтобы файл index.phtml автоматически загружался, когда обращаются к его каталогу.


Добавление SSL

cd /usr/src/SSL-0.8.0; ./Configure linux-elf; make; make rehash В результате этих команд будут собраны библиотеки, необходимые Apache. Вы можете выполнить make test, чтобы проверить правильность компиляции. После этого вы должны применить патч к apache. Важно, чтобы вы применили его прежде, чем патч frontpage, иначе frontpage не будет работать. Перейдите в каталог /usr/src/apache_1.2.6/src и запустите patch < /usr/src/apache_1.2.6/SSLpatch. Установите SSL_BASE=/usr/src/SSLeay-0.8.0 в Configuration. Удостоверьтесь, что Module proxy_module отключен, иначе Apache не будет компилироваться. Если вам нужен прокси - идите за Squid http://squid.nlanr.net/

После этого дайте команду make certificate, чтобы сгенерировать SSLconf/conf/httpsd.pem.


Добавление frontpage

Переименуйте файл fp30.linux.tar.Z в fp30.linux.tar.gz, иначе установочный скрипт его не найдет. Запустите ./fp_install, чтобы скопировать файлы расширения в каталог /usr/local/frontpage. zcat обычно находится в каталоге /usr/bin.

Теперь вы можете применить патч FP. Перейдите в каталог /usr/src/apache_1.2.6/src и введите patch < /usr/src/frontpage/version3.0/apache-fp/fp-patch-apache_1.2.5 Это создаст файлы mod_frontpage.* и внесет небольшие изменения в Configuration. Патч 1.2.5 будет работать с обеими версиями apache 1.2.5 и 1.2.6. Пропустите часть, касающуюся установки веб - вы можете сделать это позже.


Соединение всех элементов

Используемые модули сервера Apache

Модули, которые я использую (кроме SSL, PHP и frontpage):
Module env_module          mod_env.o
Module config_log_module   mod_log_config.o
Module mime_module         mod_mime.o
Module negotiation_module  mod_negotiation.o
Module dir_module          mod_dir.o
Module cgi_module          mod_cgi.o
Module asis_module         mod_asis.o
Module imap_module         mod_imap.o
Module action_module       mod_actions.o
Module alias_module        mod_alias.o
Module rewrite_module      mod_rewrite.o
Module access_module       mod_access.o
Module auth_module         mod_auth.o
Module anon_auth_module    mod_auth_anon.o
Module digest_module       mod_digest.o
Module expires_module      mod_expires.o
Module headers_module      mod_headers.o
Module browser_module      mod_browser.o

Предоставление большей защиты для CGI

Если вы - интернет-провайдер, вы захотите увеличить степень безопасности системы. suexec - утилита, позволяющая вам это сделать; выполнение cgi под пользователем-владельцем веб-каталога, вместо пользователя, запустившего веб-сервер. Перейдите в /usr/src/apache_1.2.6/support и дайте команду make suexec. chmod 4711 suxec; скопируйте этот файл в каталог, указанный в ../src/httpd.h (по умолчанию - /usr/local/etc/httpd/sbin/suexec ). Если путь кажется вам странным - как это казалось мне - измените его в httpd.h.


Компилирование и установка демона сервера

Перейдите в каталог /usr/src/apache_1.2.6/src и отредактируйте Configuration, установив все необходимые модули, входящие в состав вашего Apache. Когда все будет готово, запустите ./Configure и make. Это - последний (и наиболее сложный) шаг компиляции, так что скрестите ваши пальцы. Если все пройдет успешно, скопируйте httpsd в /usr/sbin. Демон достаточно большой, учтите это при компиляции вашего веб-сервера. Создайте директорию /var/httpd с подкаталогами cgi-bin, conf, htdocs, icons, virt1, virt2 and logs. В /usr/src/apache_1.2.6/conf отредактируйте файлы access.conf-dist, mime.types и srm.conf-dist, как вам надо, и скопируйте их в var/httpd/conf/access.conf, srm.conf и mime.types. Скопируйте файл httpsd.pem, созданный с помощью make certificate в каталог /var/httpd/conf. Используйте следующий httpd.conf:

ServerType standalone
Port 80
Listen 80
Listen 443
User wwwrun
Group wwwrun
ServerAdmin webmaster@yourhost.com
ServerRoot /var/httpd
ErrorLog logs/error_log
TransferLog logs/access_log
PidFile logs/httpd.pid
ServerName www.yourhost.com
MinSpareServers 3
MaxSpareServers 20
StartServers 3

SSLCACertificatePath /var/httpd/conf
SSLCACertificateFile /var/httpd/conf/httpsd.pem
SSLCertificateFile /var/httpd/conf/httpsd.pem
SSLLogFile /var/httpd/logs/ssl.log

<VirtualHost www.virt1.com>
SSLDisable
ServerAdmin webmaster@virt1.com
DocumentRoot /var/httpd/virt1
ScriptAlias /cgi-bin/ /var/httpd/virt1/cgi-bin/
ServerName www.virt1.com
ErrorLog logs/virt1-error.log
TransferLog logs/virt1-access.log
User virt1admin
Group users
</VirtualHost>

<VirtualHost www.virt1.com:443>
ServerAdmin webmaster@virt1.com
DocumentRoot /var/httpd/virt1
ScriptAlias /cgi-bin/ /var/httpd/virt1/cgi-bin/
ServerName www.virt1.com
ErrorLog logs/virt1-ssl-error.log
TransferLog logs/virt1-ssl-access.log
User virt1admin
Group users
SSLCACertificatePath /var/httpd/conf
SSLCACertificateFile /var/httpd/conf/httpsd.pem
SSLCertificateFile /var/httpd/conf/httpsd.pem
SSLLogFile /var/httpd/logs/virt1-ssl.log
SSLVerifyClient 0
SSLFakeBasicAuth
</VirtualHost>

<VirtualHost www.virt2.com>
SSLDisable
ServerAdmin webmaster@virt2.com
DocumentRoot /var/httpd/virt2
ScriptAlias /cgi-bin/ /var/httpd/virt2/cgi-bin/
ServerName www.virt2.com
ErrorLog logs/virt2-error.log
TransferLog logs/virt2-access.log
</VirtualHost>

В зависимости от модулей, не все директивы могут быть доступны. Вы можете получить список доступных директив с помощью команды httpsd -h.


Добавление поддержки frontpage

Перейдите в каталог /usr/local/frontpage/version3.0/bin и загрузите ./fpsrvadm. Выберите install и apache-fp. Вам нужно будет ответить на следующие вопросы:

Enter server config filename (Введите имя конфигурационного файла сервера): /var/httpd/conf/httpd.conf
Enter host name for multi-hosting (Введите имя машины для мультихостинга) []: www.virt2.com
Starting install, port (Начало установки, порт) : www.virt2.com:80, web (веб каталог): ""
Enter user's name (Введите имя пользователя) []: virt2admin
Enter user's password (Введите пароль) :
Confirm password (Подтвердите пароль) :
Creating root web (Создание корневого каталога веб)
Recalculate links for root web
Install completed.

Имя пользователя должно соответствовать имени входа в систему веб-пользователя. Пароль не обязательно должен совпадать с системным паролем. Вы должны вручную добавить sendmailcommand:/usr/sbin/sendmail %r к /usr/local/frontpage/www.virt2.com:80.conf, иначе ваши пользователи не смогут посылать веб-генерированные письма. kill -HUP ваш httpsd, чтобы заставить fp заново прочитать файлы конфигурации. Теперь вы можете обращаться к www.virt2.com с вашего клиента frontpage.

При некоторых обстоятельствах fpsrvadm выдает сообщения, что сначала должен быть задан корневой каталог веб. Их можно игнорировать, но вы должны сделать так, чтобы fpsrvadm их не выдавал.


Запуск демона

Запустите Apache с помощью команды httpsd -f /var/httpd/conf/httpd.conf. Теперь вы можете обращаться к www.virt1.com через http и https (кстати, достаточно мощный протокол). Конечно вы должны оплатить реальный сертификат, если вы хотите предоставлять SSL, или вас засмеют ;-).

Скопируйте один файл из каталога примеров php (examples) в virt1, чтобы проверить работу php.


Некоторые соображения

Не используйте расширения frontpage 97. Они не работают, по крайней мере, в Linux. При установке определенных версий библиотек C++, они вроде работают, но ваши журналы и почтовый ящик скоро заполнятся сообщениями вида premature end of script headers Не используйте расширения frontpage 98 версии ниже 3.0.2.1330. Не запутайтесь, номера версий несколько непривычны. Когда зайдете telnet'ом на 80-й порт, введите "get / http/1.0" и дважды нажмите ввод - вы получите версию номер 3.0.4 для frontpage.

Более точно номер версии вы можете узнать при помощи команды /usr/local/frontpage/currentversion/exes/_vti_bin/shtml.exe -version. Старые версии имеют неприятную ошибку, которая требует, чтобы httpd.conf можно было перезаписывать под gid вебсервера'а. Это достаточно плохо, если вас беспокоит безопасность. Я, в любом случае, рекомендую использовать версии новее 3.0.2.1330, лишенные этого недостатка.


Известные ошибки

При запуске Recalculate Links в клиенте frontpage, сервер запускает процесс, который потребляет 99% процессорного времени и около 10 Мб памяти. Но даже с сайтов среднего размера и быстрых машин, Клиент иногда получает сообщение, что время ожидания истекло, хотя вычисление будет закончено правильно. Сообщите пользователям, что нужно подождать, а не нажимать Recalculate Links несколько раз. Уясните для себе, что нужно оборудовать сервер по крайней мере 64 Мб памяти.

Пожалуйста, обратите внимание, что во время записи и SSL, и frontpage могут работать по отдельности, но не вместе - это означает, что вы не можете опубликовывать свои страницы, используя ssl, и не можете использовать webbots через https. Вы можете опубликовать ваше веб-содержимое через 80-ый порт и обращаться к зашифрованному содержимому через порт 443, но ваши счетчики и т.п. будут нарушены. Я думаю это ошибка. Эта проблема будет исправлена в SSL 0.9.0 (я надеюсь).


Заключительное слово

Вопрос для тех, кто думает, что заголовок этого руководства такой-же длинный, как и его текст: Вы когда-нибудь слушали Meat Loaf?

O.K. Читатели, хватит вам на сегодня. Не стесняйтесь посылать мне письма, вечную благодарность, цветы, электронные деньги, автомобили, нефтяные источники и т.д.


Авторские права

Авторские права на русский перевод этого текста принадлежат ╘ 2000 ASPLinux Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но так или иначе автор текста и автор перевода желали бы знать о таких дистрибутивах.

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

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: , или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу