Você está na página 1de 9

Serviço web Apache maio/2010

Instalação e configuração do serviço web Apache.

1 – Histórico

Um servidor web [ou serviço web] é uma aplicação servidora que usa o protocolo HTTP,
Hyper Text Transfer Protocol, para se comunicar com a aplicação cliente, usualmente um
navegador da internet.

No caso de acesso mais simples, o cliente faz uma requisição solicitando determinado
documento HTML1 para o servidor web, que envia essa página ao cliente. Por sua vez, o navegador
interpreta o texto HTML da página e mostra numa apresentação gráfica o seu conteúdo. Se a
aplicação cliente não for capaz de interpretar2 o texto HTML, então ele apenas mostra o conteúdo
de texto. No caso da aplicação cliente wget, ela apenas efetua o download dessa página.

Em 1993 foi lançado o navegador NCSA3 Mosaic, que marcou o início de uma rápida
popularização da Web. O sucesso desse navegador foi usar protocolos abertos [HTTP, FTP] e
simplificar a tarefa de acesso ao conteúdo, que passou a ser apresentado em tela gráfica com
inclusão de imagens, além de seguir hiperlinques num simples clique de mouse. Até então, a maior
parte dos navegadores usava linha de comando.

Cabe lembrar que antes do Mosaic havia o Gopher4, porém este não tinha a funcionalidade
do Hyper Text e contava apenas com uma estrutura semelhante a navegador de conteúdo, em
estrutura de árvore de diretórios para seguir o conteúdo na internet.

Do lado servidor, o NCSA lançou o HTTPd NCSA web server. Esse web server era de
código fonte aberto, fato que permitiu posteriormente a criação de novos sevidores web baseados
nesse. A letra d em HTTPd vem de daemon, ou seja, daemon HTTP. Todas essas novas
tecnologias nasceram no Unix, tanto o web server quanto o navegador, pois era esse o sistema
operacional largamente empregado nas universidades e centros de pesquisa.

Acontece que o sucesso do navegador Mosaic foi tamanho que uma parte substancial do
grupo de cientistas que criou o Mosaic saiu do NCSA para fundar uma empresa chamada Mosaic
Communications Corporation, posteriormente renomeada para Netscape Communications
Corporation. Essa empresa criou o navegador conhecido como Netscape, que foi baseado no
Mosaic. Posteriormente, por cobrar licença de uso, o Netscape perdeu espaço para os navegadores
free.

1 O documento HTML é um arquivo de texto com instruções de Hyper Text Transfer Protocol.
2 Por exemplo, Lynx [que é uma das aplicações clientes de servidor web mais antigas] não interpreta as tags HTML e
apenas apresenta o conteúdo texto da página.
3 National Center for Supercomputing Applications
4 Gopher é também um protocolo da camada de aplicação TCP/IP lançado em 1991. Foi o precursor da World Wide
Web.

Serviço web Apache 1/9


E devido ao rápido crescimento da web, proporcionado pelos navegadores Mosaic e
Netscape, o desenvolvimento do HTTPd web server não conseguiu mais acompanhar a demanda
por novas funcionalidades e atualizações de código requerida pelas empresas de internet5, que
começaram rapidamente a se disseminar pelo mundo.

Então, em 1995 Rob McCool saiu do NCSA e juntou-se a um grupo de pessoas que já vinha
aplicando patches6 no código do HTTPd NCSA web server. Esse grupo juntou forças e criou a
empresa que posteriormente ficou conhecida como Apache. O servidor web Apache é derivado
diretamente do código fonte do HTTPd webserver, inicialmente pela aplicação de patches. O nome
apache vem de a patchy server, embora atualmente digam que o nome foi escolhido "em
homenagem à tribo indígena".

Atualmente o Apache web server está na versão 2, e seu código fonte também está na
categoria open source.

Desde o seu início e até hoje, o Apache é o web server mais usado. De acordo com
levantamento atual da Netcraft7, 47% do total de servidores web são Apache, mais que o dobro do
segundo colocado. E essa distância aumenta mais ainda quando se avalia apenas o milhão de
websites mais ocupados8 [ou mais acessados] na internet, onde esse número aumenta para 66%.
Essa preferência reflete não apenas o baixo custo de implantação, mas também a qualidade,
robustez e segurança do produto.

2 – Instalação do web server Apache

Essa instalação também será standalone.

Para descobrir se o servidor Apache está instalado, procurar pelo seu script de inicialização
em /etc/init.d:

shell# ls /etc/init.d | grep apache


/etc/init.d/apache2

Se não houver saída no comando acima é indicativo de que o serviço apache não está
instalado. Nesse caso, instalar com o comando apt-get:

shell# apt-get install apache2

Após instalado, verificar se existem os seguintes arquivos:

5 Essas empresas à época eram principalmente os provedores de acesso à internet em linha discada.
6 Patches: atualizações, correções, modificações e melhorias no código fonte.
7 Netcraft survey em www.netcraft.com
8 Million Busiest Websites, pesquisa também da Netcraft.

Serviço web Apache 2/9


shell# file /etc/init.d/apache2
/etc/init.d/apache2: Bourne shell script text executable
shell# file /usr/sbin/apache2ctl
/usr/sbin/apache2ctl: Bourne shell script text executable
shell# file /usr/sbin/apache2
/usr/sbin/apache2: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses
shared libs), for GNU/Linux 2.6.18, stripped
shell# file /etc/apache2
/etc/apache2: directory

onde:
• /etc/init.d/apache2 é o script de inicialização do serviço apache2;
• /usr/sbin/apache2ctl é o script de controle do serviço apache2;
• /usr/sbin/apache2 é o executável que dará origem ao processo daemon;
• /etc/apache2 é o diretório de configuração do serviço web apache2.

3 – Configuração do serviço

Primeiro vamos apenas olhar as configurações de instalação do serviço. Para isso, entrar no
diretório /etc/apache2:

shell# cd /etc/apache2
shell# ls

O arquivo de configuração do serviço é "apache2.conf".

shell# more apache2.conf

Nesse arquivo, uma configuração importante é sobre qual usuário o serviço roda, nesse caso
está configurado user www-data. Isso significa que esse usuário precisa ter no mínimo permissão
de leitura no conteúdo de DocumentRoot [abaixo].

Convém reparar também que nesse arquivo tem uma include para sites-available/default,
que é o local recomendado para configurar o serviço:

shell# more sites-available/default

Nesse arquivo existe a diretiva DocumentRoot /var/www, que é o local onde ficam os
documentos que o servidor entrega ao cliente.

Normalmente – e erradamente – o apt-get instala a aplicação e já inicia o processo, isso sem


configurar o serviço. Por isso, após a instalação é necessário verificar se existe o processo daemon

Serviço web Apache 3/9


rodando:

shell# ps -ef | grep apache2


root 5184 1 0 19:32 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 5185 5184 0 19:32 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 5188 5184 0 19:32 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 5217 5184 0 19:32 ? 00:00:00 /usr/sbin/apache2 -k start
aluno 5419 5378 0 19:34 pts/0 00:00:00 grep apache

portanto, se houver saída no comando indica que o processo está rodando e deve ser parado esse
serviço. Reparar também que o processo daemon [nesse cao] é o de PID 5184, e os demais são
processos filhos à espera de clientes.

shell# /etc/init.d/apache2 stop


Parando o apache2: [ OK ]

Agora, o comando ps -ef | grep apache2 não deverá mais mostrar o daemon rodando.

Antes de iniciar o serviço web apache, verificar quais portas TCP estão abertas. Para isso, é
necessário a aplicação nmap para fazer um scan de portas. E se esta aplicação não estiver instalada,
fazer a instalação:

shell# apt-get install nmap

Agora, é só fazer o scan de portas:

shell# nmap localhost

Starting Nmap 4.76 ( http://nmap.org ) at 2009-11-15 18:48 BRST


Interesting ports on localhost (127.0.0.1):
Not shown: 999 closed ports
PORT STATE SERVICE
631/tcp open ipp

Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds

que mostra apenas a porta 631 [servidor de impressão] aberta.

Agora, então, iniciar o serviço apache2:

shell# /etc/init.d/apache2 start


Iniciando o apache2: [ OK ]

Depois disso, o scan de portas vai mostrar que a porta 80 também está aberta:

Serviço web Apache 4/9


shell# nmap localhost

Starting Nmap 4.76 ( http://nmap.org ) at 2009-11-15 19:38 BRST


Interesting ports on localhost (127.0.0.1):
Not shown: 998 closed ports
PORT STATE SERVICE
80/tcp open http
631/tcp open ipp

Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds

O comando ps [conforme acima] vai mostrar que o daemon apache2 está rodando.

4 – Testar o acesso com a aplicação cliente wget

Já que a aplicação wget baixa o arquivo do servidor web, ir para o diretório /tmp e, de lá,
acessar o web server no IP 192.168.1.10:

shell# cd /tmp
shell# wget 192.168.1.10
--2009-11-15 20:59:07-- http://192.168.1.10/
A conectar 192.168.1.10:80... conectado!
HTTP requisição enviada, aguardando resposta... 200 OK
Tamanho: 194 [text/html]
A gravar em: 'index.html'

100%[==========================================>] 194 --.-K/s em 0s

2009-11-15 20:59:07 (26,3 MB/s) - 'index.html' gravado [194/194]

5 – Configurar diretório protegido por IP

Para a necessidade dessa configuração, tomar como exemplo o caso de um único serviço
web disponibilizando conteúdo tanto para a internet quanto intranet. Acontece que nessa intranet,
algum conteúdo é restrito e não deve ser acessado da internet.

Nesse caso, basta colocar esse conteúdo num diretório protegido por IP, isso é, apenas
aqueles clientes com faixa[s] de IP[s] dessa intranet é que terão acesso ao conteúdo, e os demais
não. Esse exemplo está sendo efetuado no host com IP 192.168.1.10.

Serviço web Apache 5/9


E para configurar essa diretiva, o jeito mais fácil é baixar o arquivo apache2.tar.gz do site
www.jairo.pro.br, que já tem arquivos pré-configurados.

shell# cd /tmp
shell# wget www.jairo.pro.br/apache2.tar.gz
--2009-11-15 21:18:40-- http://www.jairo.pro.br/apache2.tar.gz
Resolvendo www.jairo.pro.br... 187.16.23.138
A conectar www.jairo.pro.br|187.16.23.138|:80... conectado!
HTTP requisição enviada, aguardando resposta... 200 OK
Tamanho: 4957 (4,8K) [application/x-gzip]
A gravar em: 'apache2.tar.gz'

100%[===============================================>] 4.957 --.-K/s em 0,07s

2009-11-15 21:18:40 (167,1 KB/s) - 'apache2.tar.gz' gravado [4957/4957]

Agora, descompactar o arquivo apache2.tar.gz e extrair o conteúdo:

shell# gunzip apache2.tar.gz


shell# tar -xvf apache2.tar
apache2/
apache2/index.html
apache2/sites-available.default
apache2/apache2.conf
apache2/ponto.htpasswd
apache2/ponto.htaccess

que cria o diretório apache2. Entrar nesse diretório:

shell# cd apache2
shell# ls
apache2.conf index.html ponto.htaccess ponto.htpasswd sites-available.default

No arquivo sites-available.default foi incluída a seguinte diretiva:

========== arquivo sites-available.default ======================================


# diretorio protegido por IP
<Directory "/var/www/protegido">
Order deny,allow
Deny from all
Allow from 192.168.1.0/24 192.168.1.1/24 10.11.12.13/16 127.0.0.1 172.16
</Directory>
=======================================================================

É preciso criar o diretório protegido por IP:

Serviço web Apache 6/9


shell# mkdir /var/www/protegido

É necessário também acertar os IPs ou redes de quem está de fato autorizado a ter acesso a
esse diretório.

Depois disso, é so copiar esse arquivo para o diretório de configuração do serviço apache:

shell# cp sites-available.default /etc/apache2/sites-available/default

Antes de reiniciar o serviço apache [e essa configuração tomar efeito], testar o acesso ao
diretório com o cliente wget:

shell# cd /tmp
shell# wget 192.168.1.10/protegido
--2009-11-15 21:51:03-- http://192.168.1.10/protegido
A conectar 192.168.1.10:80... conectado!
HTTP requisição enviada, aguardando resposta... 200 OK
Tamanho: 132 [text/html]
A gravar em: 'index.html'

100%[==========================================>] 132 --.-K/s em 0s

2009-11-15 21:51:04 (29,1 MB/s) - 'index.html' gravado [132/132]

Convém notar que qualquer cliente, indiferente do seu IP, tem acesso ao diretório protegido.
No entanto, após reiniciar o serviço essa configuração toma efeito:

shell# /etc/init.d/apache2 restart


Parando o apache2: [ OK ]
Iniciando o apache2: [ OK ]

Agora é só testar o acesso e verificar que apenas os clientes com IPs configurados na
diretiva allow é que conseguem acesso a esse diretório.

6 – Configurar diretório protegido por senha

No exemplo acima [diretório protegido por IP], o conteúdo do diretório somente pode ser
acessado pelos clientes com determinado IP [ou rede]. Porém, existem casos em que o cliente está
navegando com qualquer IP na internet e também precisa ter acesso a esse conteúdo na intranet.

Serviço web Apache 7/9


Nesse caso, a solução é colocar esse conteúdo num diretório protegido por senha, ou seja,
quando o cliente tentar entrar naquele diretório, será solicitado um usuário e senha.

Aproveitando o arquivo sites-available.default [que veio no arquivo apache2.tar.gz],


observar que também foi incluída a seguinte diretiva:

========== arquivo sites-available.default ======================================


#Diretorio protegido por senha
<Directory "/var/www/autenticado">
AllowOverride FileInfo AuthConfig Limit
Order allow,deny
Allow from all
</Directory>
</Directory>
=======================================================================

que configura o diretório "/var/www/autenticado" como protegido por senha.

É preciso criar o diretório autenticado:

shell# mkdir /var/www/autenticado

Nesse diretório, precisa haver o arquivo .htaccess com o seguinte conteúdo:

========== arquivo /var/www/autenticado/.htaccess ==============================


AuthUserFile /var/www/autenticado/.htpasswd
AuthGroupFile /dev/null
AuthName "Acesso Restrito"
AuthType Basic
require valid-user
=======================================================================

Copiar o arquivo "ponto.htaccess" para "/var/www/autenticado/.htaccess":

shell# cp ponto.htaccess /var/www/autenticado/.htaccess

No arquivo .htpasswd é que vão os usuários e senhas9 usados nessa autenticação.

Para criar o arquivo .htpasswd e incluir um usuário e senha, usar o comando htpasswd:

9 Senhas criptografadas, naturalmente.

Serviço web Apache 8/9


shell# htpasswd -c /var/www/autenticado/.htpasswd aluno
New password:
Re-type new password:
Adding password for user aluno

onde a opção -c é para criar um arquivo novo. Se omitir essa opção, irá manter todos os usuários
que existem no arquivo.

IMPORTANTE:
Se o arquivo .htpasswd já existe e for usado -c, todo o conteúdo anterior será perdido.

Agora é só testar com o navegador e observar que será solicitado um usuário e senha para
esse acesso.

Serviço web Apache 9/9

Você também pode gostar