domingo, 18 de novembro de 2007

Guia Completo do Apache - Parte 1

Por Leandro Totino Pereira
Link: http://www.bestlinux.com.br/index.php?option=com_content&task=view&id=2678&Itemid=117&limit=1&limitstart=0

logo_apache Nessa primeira série de vários artigos que abordarei o webserver Apache, vou explicar a instalar, configurar o servidor web Apache integrando-o com o PHP, MySQL e o PostgreSQL testando com exemplos práticos, também irei descrever as principais opções do arquivo de configuração httpd.conf e como elas funcionam para que você leitor possa configurar o Apache de acordo com sua necessidade.



O que é o Apache?

O servidor Apache é um websever (servidor web), ou seja, é um computador que iniciará um serviço responsável por aceitar e responder a pedidos do protocolo "http" de outras aplicações.Além do mais os "webserver" é nada menos que os principais fornecedores de conteúdo da internet.Os webserver geralmente referem-se habitualmente a páginas " html, asp, dotnet, jsp, php e etc" e são normalmente requisitados através de browsers.

O Apache pode ser instalado em sistemas Windows, Novell Netware, OS/2 e UNIX* (Linux, FreeBSD, etc).

apache-1

O servidor Apache é o webserver mais usado responsável por 65% aproximadamente como mostra no gráfico abaixo.

overallc.png

Um resumo da História do Apache

O Apache tem como base o servidor Web NCSA 1.3 (National Center of Supercomputing Applications), que foi desenvolvido por Rob McCool. Quando Rob deixou o NCSA, o desenvolvimento foi interrompido, assim muitos desenvolvedores buscaram personalizar sua própria versão do NCSA ou adicionar mais características para atender as suas necessidades. Neste momento começa a história do Apache com Brian Behlendorf e Cliff Skolnick abrindo uma lista de discussão para interessados no desenvolvimento, conseguindo espaço em um servidor doado pela HotWired e trocando patches corrigindo problemas, adicionando recursos e discutindo idéias com outros desenvolvedores e hackers interessados neste projeto.
A primeira versão oficial do Apache foi a 0.6.2, lançada em Abril de 1995 (neste período a NCSA retomava o desenvolvimento de seu servidor Web, tendo como desenvolvedores Brandon Long e Beth Frank que também se tornaram membros especiais do grupo Apache, compartilhando idéias sobre seus projetos).
Nas versões 2.x do Apache, a escalabilidade do servidor foi ampliada suportando as plataformas Win32 (não obtendo o mesmo desempenho que em plataformas UNIX, mas sendo melhorado gradativamente).

Pontos fortes do Apache:

  • Uma grande disponibilidade de ferramentas de segurança como o modsecurity;
  • Personalização de logs do Apache;
  • Analisadores de logs como o Webalizer e o Awstats;
  • Suporte linguagens PHP e CGI, além de ter disponíveis emuladores de dotnet que geralmente são páginas que só rodam no IIS (Internet Information Services, da Microsoft) e também pode emular Tomcat com mod_jk para aceitar páginas em Java;
  • Hospedando mais que um website com URL diferente com o Virtual Hosts;
  • Suporte a proxy; Restringe acesso com login e senha com o método de autenticação;
  • Permissões de acesso e de bloqueio em diretórios, arquivos e endereço da URL;
  • Suporte a banco de dados MySQL,PostgreSQL e outros ;
    Módulos DSO (Dynamic Shared Objects) permitem adicionar/remover funcionalidades e recursos sem necessidade de recompilação do Apache.

Concluindo o Apache é extremamente configurável, seguro, e com alta disponibilidade de serviços que podem ser implementados.

Mudando o Banner do Apache

Uma das funções básicas para melhorar a segurança do seu Servidor é mudar os Banners dos Daemons usados, ou seja, mudar a versão ou até mesmo o nome dos Daemons. Fazendo isso, um atacante não saberá tão facilmente o nome e a versão dos seus Daemons, para quem sabe usar um exploit.
Para mudar o Banner do Apache será preciso fazer algumas alterações em seu código fonte antes de compilá-lo.

Download do Apache:
http://httpd.apache.org/download.cgi

Vamos extrair o pacote:

#tar -zxvf httpd-2.2.3.tar.gz

Entre na pasta httpd-2.2.3/include e edite a header "ap_release.h":

#define AP_SERVER_BASEVENDOR "Apache Software Foundation"
#define AP_SERVER_BASEPROJECT "Apache HTTP Server"
#define AP_SERVER_BASEPRODUCT "Apache"
#define AP_SERVER_MAJORVERSION_NUMBER 2
#define AP_SERVER_MINORVERSION_NUMBER 2
#define AP_SERVER_PATCHLEVEL_NUMBER 3
#define AP_SERVER_DEVBUILD_BOOLEAN 0

Modifiquei para isso, mas fica seu critério colocar o nome e a versão que quiser!

#define AP_SERVER_BASEVENDOR "Microsoft Software Foundation"
#define AP_SERVER_BASEPROJECT "Microsoft-IIS"
#define AP_SERVER_BASEPRODUCT "Microsoft-IIS"
#define AP_SERVER_MAJORVERSION_NUMBER 6
#define AP_SERVER_MINORVERSION_NUMBER 0
#define AP_SERVER_PATCHLEVEL_NUMBER 0
#define AP_SERVER_DEVBUILD_BOOLEAN 0

Depois disso basta instalar o pacote normalmente!

Depois de instalado defina a opção "ServerSignature" no arquivo de configuração do Apache "/etc/apache/httpd.conf":

ServerSignature Off

Não aparecerá a versão e o nome do seu Webserver nas páginas de erros.
Por exemplo quando ocorrer algum erro o Apace não mostrará a versão do webserver, por exemplo, quando ocorrer o erro 404 aparecerá:

Not Found

The requested URL /wsd was not found on this server.

Uma opção que não vem incluída por padrão no httpd.conf que pode ser muito útil, é a ServerTokens, abaixo vamos descrever um pouco dela. A opção ServerTokens tem a função de esconder ou mostrar o nome, versão, sistema operacional e módulos ativos no servidor Web em caso de scaneamento e outras formas de "TCP fingerprint " no Webserver. Exemplos de sua utilização.


ServerTokens prod: Revela somente o nome do webserver .


Exemplo: Apache;


ServerTokens Min: Esta opção revela: nome do webserver e sua versão.

Exemplo: Apache/1.3.22;


ServerTokens OS: Esta opção revela o nome de seu webserver, Versão e o Sistema Operacional.

Exemplo: Apache/1.3.22 (Unix);

ServerTokens Full: Esta opção revela nome, Versão, Sistema Operacional e os Modulos do servidor.

Exemplo: Apache/1.3.22 (Unix) mod_ssl/6.0.0 OpenSSL/0.9.7e;

Recomendo usar a diretiva "ServerTokens prod" para melhor segurança!

Depois de instalado e configurado, para testar use o lynx:

lynx <nome do seu server>

Quando aparecer sua página aperte igual, irá aparecer uma tela parecida como essa:

lynx

Reparem que o servidor está como "Microsoft-IIS" e não como "Apache"!

Com o comando "nmap -A" aparecerá:

nmap

Reparem que está como "http?", ele não identificou o verdadeiro nome e a versão e logo abaixo ele identifica o servidor como:"nServer:x20Microsoft-IIS"

Instalação do Apache

O servidor Apache é o mais bem sucedido servidor web livre, mais de 60% dos servidores usam Apache como servidor web.


As características principais do Apache são ter compatibilidade com as principais plataformas do mercado: Linux, Windows, *nix e outras.

Vamos a instalação do Apache, vou usar flags para melhor organização em meu sistema!

Como nós extraímos o pacote antes, na hora de mudar o banner, não precisamos extrair de novo o pacote, vamos direto a compilação.

#cd httpd-2.2.3
#./configure

--mandir=/usr/man
--bindir=/usr/bin
--sbindir=/usr/sbin
--libexecdir=/usr/libexec/apache
--datadir=/var/www
--sysconfdir=/etc/apache
--libdir=/usr/lib
--includedir=/usr/include
--localstatedir=/var/www
--enable-so
--enable-rewrite
--enable-cgi
--enable-authz-owner
--enable-cache
--enable-deflate
--enable-proxy
--enable-cgid
--enable-ssl
--enable-disk-cache
--enable-speling

Decrição dos parâmetros usados:

--mandir=/usr/man:local onde serão guardados os manuais (man's) do apache
--bindir=/usr/bin: local onde serão instalados os executáveis do diretório bin;
--sbindir=/usr/sbin: local onde serão instalados os executáveis do diretório sbin;
--libexecdir=/usr/libexec: local onde serão instalados os executáveis do diretório libexec;
--datadir=/var/www: local onde serão instalados os dados do Apache;
--sysconfdir=/etc/apache: local onde serão instalados os arquivos de configuração;
--libdir=/usr/lib: local onde serão instaladas as bibliotecas do diretório lib;
--includedir=/usr/include: local onde serão instalados os headers do diretório include;
--localstatedir=/var: local onde serão instalados os arquivos do diretório var(arquivos de logs);
--enable-rewrite: Usado para reescrever URLs;
--enable-cgi: Usado para ativar suporte a execução de scripts CGI;
--enable-info: Usado para enviar informações do Apache;
--enable-cache: Ativa suporte a cache de páginas;
--enable-deflate: Ativa suporte a compresão de páginas;
--enable-proxy: Ativa um servidor Proxy;
--enable-ssl: Ativa suporte a ssl;
--enable-so: Carrega os módulos na inicialização ou na reinialização do Apache;
--enable-cgid: Ativa suporte à scripts de CGI, usando um daemon de CGI externo;
--enable-authz-owner: Ativa suporte a arquivos para autenticação;
--enable-disk-cache: Ativa suporte a cache no disco rígido, ele age em conjunto com o mod_proxy e mod_cache;
--enable-speling: Ativa suporte a correção de URLs, caso o cliente tenha esquecido uma letra ou ter escrevido errado na URL.

#make
#checkinstall


Vamos adicionar o usuário que o Apache, vai usar para executar o webserver:

#groupadd -g 80 apache
#useradd -u 80 -g apache -c "Apache" -d /var/www -s /bin/false apache

Vamos configurar o Apache, para isso vamos editar o arquivo "/etc/apache/httpd.conf"!

Troque os usuários que o Apache vai usar:

User apache
Group apache

Troque a diretiva "ServerRoot" para:
ServerRoot "/var/www"

Troque a diretiva "DocumentRoot" para:
DocumentRoot "/var/www/htdocs"

Troque a diretiva "ServerName" para o nome do seu servidor:
ServerName <nome do seu servidor>

Se deixar a diretiva ServerName comentada será usado o "127.0.0.1" o localhost!

Mas a frente será explicada cada diretiva usada.

Vamos criar o diretório que vão ficar os arquivos de logs:


#mkdir /var/www/logs

Caso queira colocar em outro lugar, modifique as diretivas referentes ao arquivos de logs no arquivo de configuração do Apache, essas diretivas vão ser explicadas mais adiante, no meu caso especifiquei na instalação com a flags "localstatedir".

Vamos executar o nosso Apache, com o seguinte comando:

#apachectl start

Agora abra seu navegador e coloque o seguinte endereço:

http://localhost/

Irá aparecer a seguinte página:prapache



Caso tenha ocorrido algum erro, refaça os procedimentos.

Entendendo o arquivo de configuração "httpd.conf"

O httpd.conf é o principal arquivo de configuração do Apache e geralmente é localizado em /etc/apache/httpd.conf.

A seguir vou dar uma pequena abordada nas principais opções e o que nós poderemos encontrar em seu conteúdo, para podemos entender melhor como funciona o webserver Apache.


HostnameLookups

A opção "HostnameLookups" tem a característica de habilitar resolução de nomes dos clientes.

Se está opção estiver habilitada (on), o Apache irá resolver os “IP's” para os nomes (DNS) dos clientes,com a opção double ele irá tentar resolver o “IP” e o nome (double-reverse).

Sintaxe:

HostnameLookups <”on” (abilitar)/”off” (desabilitar) /”double”(double-reverse)>

Exemplo:

HostnameLookups on

Group

A opção "Group" especifica o nome do grupo que gerenciará o Apache.

Sintaxe:

Group <nome do grupo>

Exemplo:

Group apache

User

A opção "User" especifica o nome do usuário que gerenciará o Apache, esse usuário tem que ter está no grupo que está definido na opção "Group".


Sintaxe:

User <usuário>

Exemplo:

User apache

ServerAdmin

A opção "ServerAdmin" determina um endereço de e-mail para ser mostrado nas páginas de erros, para os clientes informarem os erros ao administrador.


Sintaxe:

ServerAdmin <endereço de e-mail>

Exemplo:

ServerAdmin tatototino@linuxmail.org


ServerRoot

A opção "ServerRoot" define o primeiro diretório(raiz) ou o topo de onde estão os documentos de seu webserver.

Sintaxe:

ServerRoot <diretório que será o topo ou o diretório raiz de seu webserver >

Exemplo:

ServerRoot /var/www


LoadModule

A opção LoadModule especifica quais módulos DSO que serão carregados.

Módulos DSO (Dynamic Shared Objects) permitem adicionar e remover funcionalidades e recursos sem necessidade de recompilação do Apache, necessitando só ser instalado o módulo e carrega-lo no httpd.conf com a opção "LoadModule".

Sintaxe:

LoadModule <nome do módulo> <local do módulo a ser carregado>

Exemplo:

LoadModule roaming_module /usr/lib/apache/1.3/mod_roaming.so

ExtendedStatus

A opção "ExtendedStatus" é usada para definir se o Apache gerará status detalhados ,caso não queira que o Apache gere status detalhados coloque a opção "off".


Sintaxe:

ExtendedStatus <"on" (para habilitar) / "off" (para desabilitar)>

Exemplo:

ExtendedStatus on

ErrorLog

A opção "ErrorLog" define o local do arquivo onde serão gravadas as mensagens de erros, caso ocorra erros com o Apache.

Sintaxe:

ErrorLog <local do arquivo que serão armazenados as mensagens de erros>

Exemplo:

ErrorLog /var/www/logs/error.log


LogLevel

A opção "LogLevel" é usada para especificar em que nível o httpd irá gerar os logs de erros.

Os níveis disponíveis são:

emerg - O sistema está inutilizável.
alert - A ação deve ser tomada imediatamente.
crit - Condições críticas.
error - Condições de erro.
warn - Condições de alerta.
notice - Condição normal, mas significante.
info - Mensagens informativas.
debug - Mensagens do nível de depuração.

A opção recomendada é o nível "warn", pois não causa acúmulo de atividades e também não gera um excesso de mensagens desnecessários do Apache.

Sintaxe:

LogLevel <nível dos logs>

Exemplo:

LogLevel warn


CustomLog

A opção "CustomLog" permite especificar onde os logs personalizados serão gravados e definir o formato em que serão escritos no arquivo. Esta opção também aceita nomes (apelidos) para depois ser configurado seu formato na opção "LogFormat".

O CustomLog e FormatLog (FormatLog veremos logo em seguida) pode ser usado mais de uma vez caso você queira especificar vários arquivos de Logs diferentes.

Sintaxe:

CustomLog <local que serão armazenados os logs> <formato/nome>

Flags de formato:

%b - Bytes enviados, excluindo cabeçalhos HTTP.
%f - Nome do arquivo.
%{FOOBAR}e - O conteúdo da variável de ambiente FOOBAR.
%h - Máquina cliente.
%a - Endereço IP da máquina cliente.
%A - Endereço IP local. Muito útil em virtual hostings.
%{Foobar}i - O conteúdo de Foobar: linhas de cabeçalho na requisição enviada ao servidor.
%l - O nome de login remoto enviado pelo identd (se fornecido).
%{Foobar}n - O conteúdo de "FooBar" de outro módulo.
%{Foobar}o: - O conteúdo de Foobar: linhas de cabeçalho na resposta.
%p - A porta do servidor servindo a requisição.
%P - A identificação do processo filho que serviu a requisição.
%r - A primeira linha da requisição.
%s - Status. Para requisições que foram redirecionadas internamente. Este é o status de uma requisição *original*. Use %s para a última.
%t - Hora, no formato do arquivo de log (formato inglês padrão).
%{format}t - Hora, no formato definido por strftime.
%T - O tempo necessário para servir a requisição, em segundos.
%u - Usuário remoto (através do auth, pode ser falso se o status de retorno (%s) for 401).
%U - O caminho da URL requisitada.
%v - O nome canônico definido por ServerName que serviu a requisição.
%V - O nome do servidor de acordo com a configuração de UseCanonicalName.

Exemplos:

CustomLog /var/www/logs/access.log combined
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined

O exemplo acima indica um local e um nome na opção CustomLog e define o formato dos logs na opção LogFormat.

CustomLog /var/www/logs/access.log "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""

No exemplo acima você já configura tudo direto, local do arquivo onde serão gravado os logs, formato, sem precisar do LogFormat.


Logformat

A opção "LogFormat" é usada para especificar outro formato para os logs TrasferLog ou de algum outro log definido em CustomLog adicionando o nome do Log em seguida, recomendo que leia o CustomLog primeiro caso você não esteja seguindo a ordem.

Sintaxe:

LogFormat <formato do log> <nome definido em CustomLog>

Exemplos:

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined

O exemplo acima indica um formato de log para o nome combined que tem que ser definido na opção CustomLog.

LogFormat "%h %l %u %t "%r" %>s %b" common

O exemplo acima indica um formato de log para o nome common que tem que ser definido na opção CustomLog.


TransferLog

A opção "TransferLog" é usada para definir onde serão gravados informações básicas nos logs como IP do cliente,que página ele acessou,data que a página foi acessada e etc.
Você poderá mudar o formato dos logs do TransferLogs com a opção LogFormat.

Sintaxe:

TransferLog <local do arquivo>

Exemplo:

TransferLog /var/www/logs/transferências.log


ServerSignature

A opção "ServerSignature" é usada para definir que "Mensagem" aparecerá se ocorrer algum erro.

Com a opção "on" mostrará a versão do Apache, os módulos e etc.
Com a opção "off" não aparece nada, só o erro.
Com a opção "EMAIL" mostrará o e-mail do administrador.

Sintaxe:

ServerSignature <opção "on", "off" ou "EMAIL">

Exemplo:

ServerSignature off


PidFile

A opção "PidFile" é usada para especificar o local do arquivo que serão gravado o número do processo (pid) do Apache quando ele é iniciado.

Sintaxe:

PidFile <local do arquivo que serão gravados as mensagens do processo do apache>

Exemplo:

PidFile /var/run/apache.pid


ServerName

A opção "ServerName" é usada para especificar o nome ou o ip do seu servidor Web.


Sintaxe:

ServerName <ip ou nome(DNS) de seu servidor>

Exemplos:

ServerName localhost
ServerName www.seuservidor.com.br


Timeout

A opção "Timeout" é usada para especificar um número de segundos de espera antes de enviar uma mensagem de erro, ou seja, quantos segundos são necessários para o site ser carregado, caso ultrapasse os segundo, o Apache enviará uma mensagem de erro ao cliente.

Sintaxe:

Timeout <número de segundos>

Exemplo:

Timeout 300

KeepAlive

A opção "KeepAlive" permite que múltiplas requisições possam ser enviadas pela mesma conexão caso esteja abilitada (on).


Sintaxe:

KeepAlive <on ,off>

Exemplo:

KeepAlive On


MaxKeepAliveRequests

A opção "MaxKeepAliveRequests" é usada para definir um número máximo de requisições permitidas, essa opção só funciona caso esteja como "on" a opção keepAlive.


Sintaxe:

MaxKeepAliveRequests <número de requisições>

Exemplo:

MaxKeepAliveRequests 100


KeepAliveTimeout

A opção "KeepAliveTimeout" é usada para definir um número de segundos que aguardará até a próxima requisição, essa opção só funciona caso esteja como "On" a opção KeepAlive.


Sintaxe:

KeepAliveTimeout <número de requisições>

Exemplo:

KeepAliveTimeout 15


MinSpareServers

A opção "MinSpareServers" determina o mínimo de processos filhos do Apache para serem executadas e receberem requisições.


Sintaxe:

MinSpareServers <número mínimo de processos>

Exemplo:

MinSpareServers 6


MaxSpareServers

MaxSpareServers determina um número máximo de processos filhos do Apache para serem executados e receberem requisições.

Sintaxe:

MaxSpareServers <número máximo de processos>

Exemplo:

MaxSpareServers 12


StartServers

A opção "StartServers" é usada para definir o número de processos criados na inicialização do Apache.

Sintaxe:

StartServers <número de processos>

Exemplo

StartServers 5

MaxClients

A opção "MaxClients" é usada para definir um número máximo de clientes que acessarão o webserver ao mesmo tempo.

Sintaxe:

MaxClients <número de cliente>

Exemplo:

MaxClients 7

MaxRequestsPerChild

A opção MaxRequestsPerChild define o número de requisições que um processo do servidor irá gerenciar.

Sintaxe

MaxRequestsPerChild <número de requisições que um processo irá gerenciar>

Exemplo

MaxRequestsPerChild 30

Listen

A opção "Listen" é usada para definir em que portas e endereços o Apache receberá requisições.

Sintaxe:

Listen <porta ou endereço que receberá requisições>

Exemplo:

Listen 80
Listen 12.34.56.78:80


DocumentRoot

A opção "DocumentRoot" é usada para especificar o local de onde os suas páginas web do seu site estão ou vão estar.


Sintaxe:

DocumentRoot <diretório dos documentos de seu site>

Exemplo:

DocumentRoot "/var/www/htdocs"


DirectoryIndex

A opção "DirectoryIndex" é usada para determinar quais nomes de arquivos serão validos para abertura da home pages no browser .Por exemplo, caso um cliente acesse a url "www.seuservidor.com.br/" ou "www.seuservidor.com.br/cgi-bin/" abrirá alguma página definida na opção "DirectoryIndex" .


Sintaxe:

DirectoryIndex <nome completo das páginas>

Exemplo:

DirectoryIndex index.html index.cgi index.pl index.php index.xhtml


AccessFileName

A opção "AccessFileName" é usado para definir outro nome para o .htaccess.

Sintaxe:

AcceessFileName <novo nome do arquivo .htaccess>

Exemplo:

AcceessFileName .permissões

Alias

A opção "Alias" é usada para o Apache pegar arquivos em outro diretório como se fosse um link.

Sintaxe:

Alias <diretório> <diretório onde o Apache pegará os arquivos>

Exemplo:

Alias /icons /var/www/leandro

O exemplo acima quando você acessar o diretório /icons ele irá pegar os arquivos que estão no /var/www/leandro como se fosse o próprio diretório.


Scriptalias

A opção "Scriptalias" faz o mesmo que a opção "Alias" a única diferença é que a opção "ExecCGI" habilita execução de arquivos CGI.

Sintaxe:

Scriptalias <diretório> <diretório onde o Apache pegará os arquivos>

Exemplo:

Scriptalias /cgi-bin/ /usr/local/cgis/

O exemplo acima quando você acessar o diretório /cgi-bin ele irá pegar os arquivos que estão no /usr/local/cgis/ como se fosse o próprio diretório.

Include

A opção "Include" é usada para especificar outros arquivos de configuração além do httpd.conf,é muito usado por administradores organizados que especificam um arquivo para cada tarefa ou para configurar outros serviços para implementar o Apache, por exemplo podemos definir um arquivo para virtual hosts, outro para permissões e um outro para ativar o HTTPS com SSL.


Sintaxe:

Include <local do arquivo adicional de configuração>

Exemplo:

Include /etc/apache/extra/arquivo.conf


ErrorDocument

A opção "ErrorDocument" é usado para especificar outra página de erro diferente da padrão.

Sintaxe:

ErrorDocument <código do erro> <mensagem ou pagina que será exibida>

Códigos de erros e sua mensagem quando o erro ocorre (esses erros são os padrões em português):

200 OK
201 Criado
202 Aceito
203 Informação não-autoritativa
204 Nenhum conteúdo
205 Conteúdo resetado
206 Conteúdo parcial
300 Múltiplas escolhas
301 Movido Permanentemente
302 Movido Temporariamente
303 Veja outra
304 Não modificada
305 Use o Proxy (redirecionamento proxy)
400 Requisição incorreta
401 Não autorizado
402 Pagamento Requerido
403 Bloqueado
404 Não encontrada
405 Método não permitido
406 Não aceitável
407 Autenticação via proxy requerida
408 Tempo limite da requisição expirado
409 Conflito
410 Gone
411 Tamanho requerido
412 Falha na pré-condição
413 A requisição parece ser grande
414 A URL requisitada é muito longa
415 Tipo de mídia não suportado
500 Erro Interno no Servidor
501 Não implementado
502 Gateway incorreto
503 Serviço não disponível
504 Tempo limite no gateway
505 Versão HTTP não suportada

Exemplos:

ErrorDocument 405 "erro ocorrido"

No exemplo acima se ocorrer o erro 405 irá aparece uma mensagem "erro ocorrido"

ErrorDocument 404 /missing.html

No exemplo acima se ocorrer o erro 404 irá aparece uma a página /missing.html.

TypesConfig

A opção "TypesConfig" especifica o arquivo que contém os mapas das extensões com seus respectivos conteúdos, por padrão ele já vem configurado com o arquivo mime-type.


Sintaxe:

TypesConfig <local do arquivo>

Exemplo:

TypesConfig /etc/apache/mime.types

AddType

A opção "AddType" permite adicionar um mapeamento a certa extensão de arquivo à certos tipos de conteúdo para ser reconhecido pelo Apache, essa opção é usada caso a extensão do arquivo não constar no arquivo definido na opção "TypesConfig".

Sintaxe:

AddType <MIME-type> <extensão do arquivo>

Para ver os MIME-type disponíveis, veja o arquivo mime.type no diretório de configuração do apache.

Exemplo:

AddType application/x-gzip .tgz


DefaultType

A opção "DefaultType" define um tipo de MIME para documentos com extensões desconhecidas ou que seu webserver não reconheça.


Sintaxe:

DefaultType <tipo do MIME>

Exemplo:

DefaultType text/plain

AddHandler

A opção "AddHandler" permite mapear certas extensões de arquivos à programas específicos. Essa opção só funcionam com extensões que não estão no arquivo definido na opção TypeConfig ou seja extensões desconhecidas do Apache.


Sintaxe:

AddHandler <programa que manipulará a extensão> <extensão do arquivo>

Exemplo:

AddHandler cgi-script .cgi

SetHandler

SetHandler define um programa (que é definido na opção AddHandler) para manipular suas extensões em um determinado diretório.

Sintaxe:

SetHandler <programa>

Exemplo:

<directory /var/www/cgi-bin>
Options ExecCGI
SetHandler cgi-bin
</Location>


ListenBackLog

Define um número máximo de conexões pendentes, opção muito útil para barrar alguns ataques de sobrecarga de requisições.

Sintaxe:

ListenBacklog <número de conexões>

Exemplo:

ListenBacklog 500

As opções ServerType, BindAdress, port, AddModule, AccessConfig,

ResourceConfig, mod_log_agent e mod_log_referer que tinham no Apache 1.3 foram banidas no Apache 2.x.

Instalação do MySQL

O MySQL é um sistema de gerenciamento de banco de dados, que utiliza a linguagem SQL como interface. Uma grande vantagem do MySQL, é ter o código aberto e funcionar na maioria dos Sistemas Operacionais, outra grande vantagem do MySQL é a facilidade de ser integrar ao PHP.
mysql_logo

Chega de história, vamos à instalação!

Download do Mysql:
http://dev.mysql.com/downloads/

Vamos extrair o pacote:
#tar -zxvf mysql-5.0.24.tar.gz
#cd mysql-5.0.24


Agora temos que compilá-lo:
#./configure --prefix=/usr/share/mysql --bindir=/usr/bin --sbindir=/usr/sbin/ --libexecdir=/usr/libexec/mysql
#make
#checkinstall


Vamos criar o usuário para o MySQL:
#groupadd -g 27 mysql
#useradd -u 27 -g mysql -c "Mysql" -d /usr/share/mysql/var -s /bin/false mysql


Vamos gerar os bancos de dados fundamentais para a execução do MySQL. Será criado, por exemplo, o banco de dados "mysql" que tem tabelas de usuários, senhas para administração do MySQL. Para isso execute o seguinte comando:

#mysql_install_db

Vamos mudar o dono e o grupo da pasta onde estão os arquivos do MySQL, para que só o usuário e grupos permitidos acessarão essa pasta:

#chown -R mysql.mysql /usr/share/mysql

Vamos iniciar o daemon do MySQL:
#mysqld_safe&

Caso aconteça algum erro, verifique nos arquivos de logs do seu sistema ou do MySQL no seguite arquivo "/usr/share/mysql/var/darkstar.err".

Colocando o usuário Administrador do MySQL:
#mysqladmin -u <usuario> password <senha>

Esse usuário terá acesso total ao MySQL!

Vamos conectar ao console do MySQL com o comando "mysql" que é o programa "MySQL cliente" para que possa conectar ao "servidor MySQL":

#mysql -u <usuario>-p
Enter password:<coloque seu password>


Caso você entre no console do MySQL irá aparecer a seguinte resposta:

Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 19 to server version: 5.0.24


Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql>

Caso você queira testar um comando:

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (1.46 sec)

Esse comando lista os banco de dados existentes no MySQL.

Para sair do console do MySQL:

mysql> quit
Bye


Para que o MySQL inicie no boot de seu sistema, é preciso copiar o script mysql.server, localizado no diretório "/usr/share/mysql/share/mysql" para o diretório de inicialização do seu sistema ("/etc/rc.d" ou "/etc/init.d"), vamos fazer isso com o seguinte comando:

#cp /usr/share/mysql/share/mysql/mysql.server /etc/rc.d/rc.mysql

Agora adicione as seguintes linhas em "/etc/rc.d/rc.local":

if [ -x /etc/rc.d/rc.mysql ]; then
. /etc/rc.d/rc.mysql start
fi

Agora reinicie para testar!

Instalação do PostgreSQL

O PostgreSQL é um SGBD (Sistema Gerenciador de Banco de Dados) objeto-relacional de código aberto, com mais de 15 anos de desenvolvimento. É extremamente robusto e confiável, além de ser extremamente flexível e rico em recursos. Ele é considerado objeto-relacional por implementar, alémdas características de um SGBD relacional, algumas características de orientação a objetos, como herança e tipos personalizados.

postgresql_logo

Download do PostgreSQL:

http://www.postgresql.org/download/

Vamos a instalação:

# tar -jxvf postgresql-8.1.4.tar.bz2
# cd postgresql-8.1.4
#./configure
--prefix=/usr/share/postgres
--bindir=/usr/bin
--sbindir=/usr/sbin
--libdir=/usr/lib
--without-zlib


Decrição dos parâmetros usados:
--prefix: local onde será instalado o PostgreSQL;
--bindir: local onde serão instalados os executáveis do diretório bin;
--sbindir: local onde serão instalados os executáveis do diretório sbin;
--libdir: local onde serão instaladas as bibliotecas da pasta lib;
--without-zlib: desabilita zlib.

#make
#checkinstall


Vamos criar o usuário que será usado pelo PostgreSQL:
#groupadd -g 28 postgres
#useradd -u 28 -g postgres -c "PostgreSQL" -d /usr/share/postgres/data/ postgres


Caso você queira colocar uma senha no usuário postgres:
passwd postgres

Vamos criar o diretório onde ficarão os dados do PostgreSQL como banco de dados, tabelas, arquivos de configuração e outras coisas para sua administração:

#cd /usr/share/postgres
#mkdir data


Vamos mudar o dono e o grupo do diretório criado:
#chown -R postgres.postgres data

Temos que usar o usuário "postgres" para configurá-lo, não poderá usar o root por causa de segurança do PostgreSQL, ele não aceita:

#su postgres

Vamos criar os banco de dados e os arquivos de configuração do PostgreSQL com o seguinte comando:

$initdb -D /usr/share/postgres/data/

Vamos iniciar o Daemon do PostgreSQL:
$ postmaster -D /usr/share/postgres/data &

Vamos logar ao console do PostgreSQL com o comando cliente do PostgreSQL, o "psql" usando o super usuário do PostgreSQL o "postgres":
$psql postgres

Vamos colocar uma senha ao usuário postgres, execute o seguinte comando no console do PostgreSQL:
postgres=# alter user postgres with encrypted password 'sua-senha';
ALTER ROLE

Vamos sair do PostgreSQL:

postgres=#q

Agora temos que alterar o arquivo "pg_hba.conf" localizado em "/usr/share/postgres/data/" para que quando for logar com um usuário no PostgreSQL, ele peça uma senha, o padrão do PostgreSQL é não pedir uma senha!


Troque as seguintes linhas:

local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust


para

local all all md5
host all all 127.0.0.1/32 md5
host all all ::1/128 md5

Vamos deixar o PostgreSQL um pouco mais seguro, vamos editar o arquivo "postgresql.conf" localizado na pasta "/usr/share/postgres/data"!

Número máximo de conexões:
max_connections = 10

Tempo para se autenticar (tempo em segundos):
authentication_timeout = 60

Habilita senha com criptografia:
password_encryption = on

Quantas conexões simultâneas o super usuário pode ter:
superuser_reserved_connections = 1

Agora vamos reiniciar o PostgreSQL, para que as alterações sejam feitas:

pg_ctl restart -D /usr/share/postgres/data/

Agora quando você entrar no PostgreSQL, irá pedir uma senha:

$ psql postgres
Password

Caso você queira iniciar o PostgreSQL no boot do seu Sistema copie o arquivo crontrib/start-scripts que setá dentro do pacote do PostgreSQL, para o "init.d" ou "rc.d" dependendo de dua distribuição:

#cp postgresql-8.1.4/contrib/start-scripts/linux /etc/rc.d/rc,postgresql

Temos que fazer algumas mudanças no rc.postgresql, para que atenda as nossas necessidades, no meu caso o rc.postgresql ficou desta maneira:

#! /bin/sh

# chkconfig: 2345 98 02
# description: PostgreSQL RDBMS

# This is an example of a start/stop script for SysV-style init, such
# as is used on Linux systems. You should edit some of the variables
# and maybe the 'echo' commands.
#
# Place this file at /etc/init.d/postgresql (or
# /etc/rc.d/init.d/postgresql) and make symlinks to
# /etc/rc.d/rc0.d/K02postgresql
# /etc/rc.d/rc1.d/K02postgresql
# /etc/rc.d/rc2.d/K02postgresql
# /etc/rc.d/rc3.d/S98postgresql
# /etc/rc.d/rc4.d/S98postgresql
# /etc/rc.d/rc5.d/S98postgresql
# Or, if you have chkconfig, simply:
# chkconfig --add postgresql
#
# Proper init scripts on Linux systems normally require setting lock
# and pid files under /var/run as well as reacting to network
# settings, so you should treat this with care.

# Original author: Ryan Kirkpatrick <pgsql@rkirkpat.net>

# $PostgreSQL: pgsql/contrib/start-scripts/linux,v 1.7 2004/10/01 18:30:21 tgl Exp $

## EDIT FROM HERE

# Installation prefix
prefix=/usr/share/postgres

# Data directory
PGDATA="/usr/share/postgres/data"

# Who to run the postmaster as, usually "postgres". (NOT "root")
PGUSER=postgres

# Where to keep a log file
PGLOG="$PGDATA/serverlog"

## STOP EDITING HERE

# Check for echo -n vs echo c
if echo 'c' | grep -s c >/dev/null 2>&1 ; then
ECHO_N="echo -n"
ECHO_C=""
else
ECHO_N="echo"
ECHO_C='c'
fi

# The path that is to be used for the script
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# What to use to start up the postmaster (we do NOT use pg_ctl for this,
# as it adds no value and can cause the postmaster to misrecognize a stale
# lock file)
DAEMON="/usr/bin/postmaster"

# What to use to shut down the postmaster
PGCTL="/usr/bin/pg_ctl"

set -e

# Only start if we can find the postmaster.
test -x $DAEMON || exit 0

# Parse command line parameters.
case $1 in
start)
$ECHO_N "Starting PostgreSQL: "$ECHO_C
su - $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1
echo "ok"
;;
stop)
echo -n "Stopping PostgreSQL: "
su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast"
echo "ok"
;;
restart)
echo -n "Restarting PostgreSQL: "
su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast -w"
su - $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1
echo "ok"
;;
reload)
echo -n "Reload PostgreSQL: "
su - $PGUSER -c "$PGCTL reload -D '$PGDATA' -s"
echo "ok"
;;
status)
su - $PGUSER -c "$PGCTL status -D '$PGDATA'"
;;
*)
# Print help
echo "Usage: $0 {start|stop|restart|reload|status}" 1>&2
exit 1
;;
esac

exit 0



Depois disso coloque em rc.local as seguintes linhas:

if [ -x /etc/rc.d/rc.postgresql ]; then
. /etc/rc.d/rc.postgresql start
fi

Agora basta reiniciar seu sistema para testar!

Instalação PHP

O PHP é uma linguagem de programação de computadores interpretada, livre e muito utilizada para gerar conteúdo dinâmico na Web. Apesar de ser uma linguagem de fácil aprendizado e de uso para pequenos scripts dinâmicos simples, o PHP é uma linguagem poderosa orientada a objetos.

php

Além disso, destaca-se a extrema facilidade com que PHP lida com servidores de base de dados, como MySQL, PostgreSQL, Microsoft SQL Server e Oracle.

Agora vamos instalar o PHP:

#tar -zxvf php-5.1.6.tar.gz
# cd php-5.1.6
#./configure
--prefix=/usr/share/apache2/php
--with-mysql=/usr/share/mysql
--with-apxs2=/usr/sbin/apxs
--enable-ftp
-with-config-file-path=/etc/apache
--with-pgsql=/usr/share/postgres
--prefix: local onde será instalado o PHP
--with-mysql: local onde está instalado MySQL para ativalo no PHP
--with-apxs2: local onde está o executável apxs do Apache.
--enable-ftp: ativa suporte a FTP
--with-config-file-path= local onde ficará o arquivo de configuração do PHP "php.ini"
--with-pgsql= local onde está instalado o PosgreSQL para ativá-lo no PHP

#make
#checkinstall

Copie o php.ini-dist e o php.ini-recommended /etc/apache:

#cp php.ini* /etc/apache

Renomeie o arquivo "php.ini-dist" para "php.ini":
#cd /etc/apache
#mv php.ini-dist php.ini

Adicione isso no arquivo de configuração do Apache "/etc/apache/httpd.conf" para carregar o PHP:
AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps

Vamos testar o PHP juntamente com o Apache, para isso vamos criar um arquivo em PHP com o seguinte código:

<? phpinfo(); ?>

Para isso usei o seguinte comando:
echo "<? phpinfo(); ?>" > /var/www/htdocs/phpinfo.php

Agora vamos testar a integração Apache mais PHP, vamos acessar a página que nós criamos, para isso inicie o Apache depois abra seu navegador preferido e coloque o seguinte endereço:


http://localhost/phpinfo.php

Caso apareça a imagem abaixo, seu PHP estará funcionando perfeitamente, essa página contém informações preciosas para algum atacante, por isso não é bom deixá-la no seu servidor, além de ter informações sobre as variáveis do PHP, existem informações importantes do Apache, MySQL entre outras.

print-php

Se não aparecer está página deverá ter ocorrido algum erro, para isso refaça os procedimentos.

Testando a conexão do PHP com o Mysql

Agora vamos testar a integração PHP mais MySQL, para isso vamos criar uma página em PHP, para testar a conexão do PHP e MySQL.

Vamos criar o arquivo mysql.php com o seguinte código:

<?
$conexao=mysql_connect("localhost","root","root") or die ("Configuração de Banco de Dados Errada!");
$db=mysql_select_db("mysql",$conexao) or die ("Banco de Dados Inexistente!");
echo ("Seu PHP está integrado ao MySQL");
?>

Descrição do comando mysql_connect para conectar ao MySQL:
mysql_connect(<onde está seu servidor MySQL>,< usuário do MySQL>,< senha do seu usuário MySQL>);

Descrição do comando mysql_select_db para escolher o Banco de Dados:
mysql_select_db(<banco de dados do seu MySQL>,<a sua conexão configurada>);

Agora vamos testar se o nosso PHP está funcionando com o Banco de Dados MySQL, para isso vamos abrir a página que criamos acima, para isso abra seu navegador e coloque o seguinte endereço:

http://localhost/mysql.php

Se aparecer a mensagem "Seu PHP está integrado ao MySQL" o seu PHP está suportando MySQL, caso esteja dado algum erro, refaça os procedimentos.


Testando a conexão do PHP com o PostgreSQL

Pronto seu PHP está funcionando, agora vamos testar a integração PHP mais PostgreSQL, para isso vamos criar uma página em PHP, para testar a conexão do PHP e MySQL.

Vamos criar o arquivo postgresql.php com o seguinte código:

<?
$conexao=pg_connect("dbname= postgres port=5432 host=127.0.0.1 user=postgres password =postgres") or die ("Configuração de Banco de Dados Errada!");
echo ("Seu PHP está integrado ao PostgreSQL");
?>


Descrição do comando pg_connect para conectar ao PostgreSQL:
dbname:<Banco de Dados do PostgreSQL
port: A porta do PostgreSQL
host: Host do seu Servidor PostgreSQL
user: Usuário PostgreSQL
password : Senha do Usuário PostgreSQL

Agora vamos testar se o nosso PHP está funcionando com o Banco de Dados PostgreSQL, para isso vamos abrir a página que criamos acima, para isso abra seu navegador e coloque o seguinte endereço:

http://localhost/postgresql.php

Se aparecer a mensagem "Seu PHP está integrado ao PostgreSQL" o seu PHP está suportando o PostgreSQL, caso esteja dado algum erro, refaça os procedimentos.

0 comentários: