mini-COMO FAZER do Apache para Linux, do SSL, do PHP/FI e do frontpage Marcus Faure, marcus@faure.de v1.1, Julho de 1998 Este documento trata da construção de um sseerrvviiddoorr wweebb ddee pprrooppóóssiittoo mmúúllttiipplloo que irá suportar conteúdo dinâmico da web através da linguagem de roteiros PPHHPP//FFII, da transmissão de dados baseado no SSSSLL da Netscape, da execução segura de CCGGIIss e das EExxtteennssõõeess ddoo SSeerrvviiddoorr MM$$ FFrroonnttppaaggee. ______________________________________________________________________ Índice geral 1. Introdução 1.1 Descrição dos componentes 1.2 Configurações que funcionam 1.3 Histórico 2. Instalação de componentes 2.1 Preparativos 2.2 Adicionando o PHP 2.3 Adicionando o SSL 2.4 Adcionnado o frontpage 3. Juntando tudo 3.1 Módulos do apache para se tentar 3.2 Dando as CGIs mais segurança 3.3 Compilando e instalando o programa residente do servidor 3.4 Adicionando suporte do frontpage para uma rede 3.5 Iniciando o programa residente 3.6 Algumas considerações 3.7 Erros conhecidos 3.8 Comentário final ______________________________________________________________________ 11.. IInnttrroodduuççããoo Antes de começar a ler: Não sou um bom escritor, e é possível que haja alguns erros neste documento. Sinta-se encorajado para me informar os erros. 11..11.. DDeessccrriiççããoo ddooss ccoommppoonneenntteess O servidor web que esperançosamente você irá ter após ler este COMO FAZER é composto de várias partes, as fontes originais do apache com alguns programas de correção e alguns executáveis externos. Recomendo usar os programas nas versões que eu testei, o que provavelmente irá compilar sem grandes problemas e resultará num programa residente altamente estável. Se for corajoso, tente compilar todas as últimas coisas com as suas toneladas de recursos, porém, não me responsabilize se algo falhar ;-). Todavia, você pode relatar outras configurações que funcionem para serem incluídas em futuras versões deste documento. Todos os passos foram testados numa máquina com Linux 2.0.35, então o COMO FAZER é específico para Linux, mas talvez seja capaz de funcionar em outros Unixs também. Você necessariamente não tem que compilar todos os componentes. Tentei estruturar este COMO FAZER de modo que seja possível pular algumas partes em que você não esteja interessado. Este documento também não é o manual do usuário do Apache, SSL, PHP/FI, ou do frontpage. A principal intenção é poupar alguns provedores de serviços web de dores de cabeça quando instalando seus servidores, e fazer uma pequena contribuição para a comunidade Linux. O PPHHPP é uma linguagem de roteiros que suporta páginas de HTML dinâmico. É um pouco parecida com a SSI do Apache, porém mais complexa e com módulos de bancos de dados para vários bancos de dados populares. As bibliotecas GD não são necessárias pelo PHP. O SSSSLL é uma implementação do Suporte para Transações Seguras (SSL) da Netscape que permite conexões seguras através de redes inseguras, isto é, transmitir números de cartão de crédito coletados em formulários na Internet. O ffrroonnttppaaggee é uma ferramenta web do tipo WYSIWYG (o que você vê (na tela) é o que você terá (na impressora)) que faz uso de algumas extensões específicas do servidor chamadas de webbots. Algumas pessoas pensam que o frontpage é legal porque se pode criar discussões na web e formulários de retorno sem ter que saber nem um pouco de html ou cgi. Ele protege igualmente o criador de ter que fazer o envio do seu site através de ftp usando um editor embutido. Se você quer suportar o frontpage mas não quer configurar um servidor windows, as extensões do servidor apache são a sua escolha. 11..22.. CCoonnffiigguurraaççõõeess qquuee ffuunncciioonnaamm Como esse documento só foi baixado umas 100 vezes desde que eu o publiquei, só recebi poucos retornos. Em particular, ninguém me falou de outras combinações que funcionam. As combinações que funcionaram para mim são: · 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 (*) a versão 3.0.3 é: ``não recomendada'' 11..33.. HHiissttóórriiccoo v0.0/Abr 98: Versão anterior v1.0/Jun 98: Agora usando Apache 1.2.6, seção fp atualizada, correções mínimas v1.1/Jul 98: Versão reestruturada e passada para o sgm Pode-se achar a última versão deste documento em . 22.. IInnssttaallaaççããoo ddee ccoommppoonneenntteess 22..11.. PPrreeppaarraattiivvooss Você precisará: · Apache 1.2.6 · Extensões PHP/FI · Biblioteca GD · SSL 0.8.0 · Programa de correção do SSL para Apache 1.2.6 · roteiro de instalação e extensões do servidor do frontpage 98 Consiga as fontes que quiser. Untarjeie o apache, php, gd e ssl para /usr/src. Untarjeie o programa de correção do SSL para /usr/src/apache_1.2.6. 22..22.. AAddiicciioonnaannddoo oo PPHHPP cd para /usr/src/gd1.2 e digite make. Isto irá construir a biblioteca GD libgd.a, que deve ser copiada para /usr/lib. Agora, cd para php-2.0.1 e execute ./install. As questões relevantes são: Gostaria de compilar o PHP/FI como um módulo Apache? [sN] s Você está compilando de um Apache 1.1 ou um servidor posterior? [sN] s Você está usando Apache-Stronghold? [sN] s O seu servidor Apache suporta carregamento dinâmico de ELF? [sN] s O apache incluiu o diretório ( que tem o httpd.h )? [/usr/local/include/apache] /usr/apache_1.2.6/src Você gostaria de construir uma biblioteca compartilhada ELF? [sN] s Diretórios adicionais para procurar por arquivos .h? []: /usr/src/gd1.2 Gostaria da biblioteca regex empacotada? [sN] n Assim como as extensões do frontpage, o phtml inclui um problema de segurança porque ele funciona sob o uid do servidor web. Certifique-se de ligar o modo seguro no src/php.h e restringir o caminho de busca para economizar um bom dinheiro. Há algumas outras opções no php.h que você pode querer editar. Se você está muito preocupado com a segurança, compile o php como um cgi. Todavia, isto acarretará numa perda de desempenho e não será tão inteligente como a versão do módulo. Digite make para contruir todos os arquivos. Quando a compilação estiver terminada, copie o mod_php.* e libphp.a para /usr/src/apache_1.2.6/src. Acrescente uma linha Module php_module mod_php.o ao fim do /usr/src/apache_1.2.6/src/Configuration, adicione -lphp -lm -lgdbm -lgd ao EXTRA_LIBS no mesmo arquivo, application/x-httpd-php phtml para mime.types do Apache e AddType application/x-httpd-php .phtml para srm.conf do Apache. Você também pode querer adicionar o index.phtml ao DirectoryIndex neste arquivo, de modo que um arquivo index.phtml seja carregado automaticamente quando este diretório é requerido. 22..33.. AAddiicciioonnaannddoo oo SSSSLL cd /usr/src/SSL-0.8.0; ./Configure linux-elf; make; make rehash Isto irá criar bibliotecas necessárias pelo apache. Você pode digitar make teste para verificar a compilação. Você deve aplicar um programa de correção para o apache. É importante que se aplique isto antes do programa de correção do frontpage, de outra forma, o frontpage não irá funcionar. cd para /usr/src/apache_1.2.6/src e digite patch < /usr/src/apache_1.2.6/SSLpatch. Configure SSL_BASE=/usr/src/SSLeay-0.8.0 em Configuration. Certifique-se que o Module proxy_module está desativado, senão o Apache não irá compilar. Se você precisa de um proxy, vá para Squid Agora make certificate para gerar SSLconf/conf/httpsd.pem. 22..44.. AAddcciioonnnnaaddoo oo ffrroonnttppaaggee Renomeie o arquivo fp30.linux.tar.Z para fp30.linux.tar.gz, senão o roteiro de instalação não irá achá-lo. Execute ./fp_install para copiar os arquivos de extensão para /usr/local/frontpage. O zcat normalmente pode ser invocado como /usr/bin/zcat. Agora você tem de aplicar o programa de correção do FP. cd para /usr/src/apache_1.2.6/src e digite patch < /usr/src/frontpage/version3.0/apache-fp/fp-patch-apache_1.2.5. Isto irá criar os arquivos mod_frontpage.* e fazer algumas modificações para Configuration etc. O programa de correção 1.2.5 irá funcionar com o apache 1.2.5 e 1.2.6. Pule a parte de instalando webs, isto pode ser feito mais tarde. 33.. JJuunnttaannddoo ttuuddoo 33..11.. MMóódduullooss ddoo aappaacchhee ppaarraa ssee tteennttaarr Os módulo que uso além do SSL, PHP e frontpage são: 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 33..22.. DDaannddoo aass CCGGIIss mmaaiiss sseegguurraannççaa Se você é um ISP (provavelmente é quando lê isso), você quer melhorar a segurança. O utilitário suexec permite fazer isso; ele irá executar cgis sob o UID do proprietário web ao invés de executar sob o UID dos servidores web. Vá para /usr/src/apache_1.2.6/support e make suexec. chmod 4711 suxec e copie-o para o local especificado em ../src/httpd.h que é /usr/local/etc/httpd/sbin/suexec por padrão. Se o caminho for um pouco crítico para você - assim é para mim - edite httpd.h e configure o caminho para um valor mais confortável. 33..33.. CCoommppiillaannddoo ee iinnssttaallaannddoo oo pprrooggrraammaa rreessiiddeennttee ddoo sseerrvviiddoorr Entre em /usr/src/apache_1.2.6/src e edite Configuration para configurar todos os módulos que deseja incluir no seu programa residente do Apache. Quando estiver pronto, execute ./Configure e make. Este é o último (e mais complicado) passo do processo de compilação, então cruze os seus dedos. Se der certo, cp httpsd para /usr/sbin. O programa residente é algo grande, considere isso quando estiver "assembliando" o seu servidor web. Crie o diretório /var/httpd com os subdiretórios cgi-bin, conf, htdocs, icons, virt1, virt2 e logs. Em /usr/src/apache_1.2.6/conf edite access.conf-dist, mime.types e srm.conf-dist para se adaptarem as suas necessidades e copie eles para var/httpd/conf/access.conf, srm.conf e mime.types. Copie o httpsd.pem que você criou com make certificate para /var/httpd/conf. Use o seguinte 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 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 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 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 Dependendo dos módulos que você compilou junto, nem todos os diretórios podem estar disponíveis. Pode-se reaver uma lista de diretórios disponíveis com httpsd -h. 33..44.. AAddiicciioonnaannddoo ssuuppoorrttee ddoo ffrroonnttppaaggee ppaarraa uummaa rreeddee Entre /usr/local/frontpage/version3.0/bin e carregue ./fpsrvadm. Escolha install e apache-fp. As questões que seguem devem ser respondidas da seguinte maneira: 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. O nome do usuário deve ser a conta (login) unix do proprietário da rede. A senha não tem de ser necessariamente parecida com a senha do sistema. Você tem de adicionar manualmente sendmailcommand:/usr/sbin/sendmail %r para /usr/local/frontpage/www.virt2.com:80.conf, senão seus usuários não serão capazes de mandar mensagens eletrônicas geradas na rede. kill -HUP seu httpsd para fazer fp reler sua configuração. Agora você pode acessar www.virt2.com com o seu frontpage (cliente). Sob algumas circustâncias o fpsrvadm reclama que uma rede raiz ou principal deve ser instalada primeiro. Isto é um pouco fora de uso, mas você deve fazer para silenciar o fpsrvadm. 33..55.. IInniicciiaannddoo oo pprrooggrraammaa rreessiiddeennttee Inicie o Apache com httpsd -f /var/httpd/conf/httpd.conf. Agora você pode acessar www.virt1.com tanto por http como por https, o que é muito legal. É claro que você tem de pagar por um certificado real se quiser oferecer o SSL na rede mundial de computadores, ou os usuários podem rir de você. Copie um dos arquivos de demonstração do diretório de exemplos do php para virt1 para testar o phtml. 33..66.. AAllgguummaass ccoonnssiiddeerraaççõõeess Não use extensões do frontpage 97. Elas não funcionam, pelo menos no Linux. Quando estiver instalando versões específicas de bibliotecas c++, elas parecem funcionar, mas seus registros logo serão preenchidos com premature end of script headers e a sua caixa de correio eletrônico será preenchida com reclamações. Não use extensões do frontpage 98 antes da versão 3.0.2.1330. Não fique confuso, números de versões não são simples . Quando estiver fazendo um telnet para porta 80, digitando "get / http/1.0" e teclando Enter duas vezes, você obterá um número de versão 3.0.4 para o frontpage. Você pode achar o número da versão mais específico executando /usr/local/frontpage/currentversion/exes/_vti_bin/shtml.exe -version. Versões mais antigas têm um defeito desagradável que requer com que o httpd.conf seja habilitado para escrita pelo gid do servidor web. Isto deve deixá-lo com medo se você está preocupado com segurança. Versões desde 3.0.2.1330 são mais usáveis. 33..77.. EErrrrooss ccoonnhheecciiddooss Quando tocando Recalculate Links (Recalcular Links) no cliente frontpage, o servidor inicia um processo que consome 99% dos ciclos da cpu e uns 10 Mb de memória. Porém mesmo para máquinas rápidas e web de meio porte, o cliente algumas vezes recebe uma mensagem de timeout, apesar do cálculo ser finalizado corretamente. Informe aos usuários do frontpage para serem pacientes e não apertarem Recalculate Links muitas vezes. Informe-se também para equipar o servidor com no mínimo 64 Mb. Por favor observe que na época em que eu escrevia este documento tanto o frontpage quanto o SSL funcionavam, mas não ao mesmo tempo, o que significa que você não pode nem divulgar a sua rede usando ssl nem fazer uso de webbots ( objetos Web dinâmicos, componentes automatizados (robots) que implementam recursos como mecanismos de procura, contadores de acesso à página, proteção por senha, etc. ) através de https. Pode-se divulgar a sua rede pela porta 80 e acessá-la encriptada na porta 443, porém os seus contadores e etc ficarão quebrados. Considero isto um defeito, mas ele deverá ser corrigido no SSL 0.9.0. 33..88.. CCoommeennttáárriioo ffiinnaall Para os que pensam que o título deste COMO FAZER está tão bom quanto o documento: Já ouviram falar Meat Loaf? O.K. leitores, é tudo por hoje. Sintam-se a vontade para me dar um retorno, agradecimentos eternos, flores, dinheiro, carros, poços de petróleo, etc...