Serviço web Apache agosto/2013 Instalação e

Transcrição

Serviço web Apache agosto/2013 Instalação e
Serviço web Apache
agosto/2013
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 serviço 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. Este web server era de
código fonte aberto, fato que permitiu posteriormente a criação de novos seviços web baseados
neste. 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
www.jairo.pro.br
1/22
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 serviço 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, 60% 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.
A instalação e configuração do serviço web Apache será em dua partes: Parte A para
CentOS (Red Hat) e parte B para Ubuntu (Debian).
5
6
7
8
Essas empresas à época eram principalmente os provedores de acesso à internet em linha discada.
Patches: atualizações, correções, modificações e melhorias no código fonte.
Netcraft survey em www.netcraft.com
Million Busiest Websites, pesquisa também da Netcraft.
Serviço web Apache
www.jairo.pro.br
2/22
Instalação e configuração: Parte A (CentOS)
A2 – Instalação do web server Apache
Essa instalação também será standalone.
Para descobrir se o serviço Apache está instalado, procurar pelo seu script de inicialização
em /etc/init.d:
shell# ls /etc/init.d | grep httpd
/etc/init.d/httpd
Se não houver saída no comando acima é indicativo de que o serviço httpd não está
instalado. Nesse caso, instalar com o comando yum:
shell# yum install httpd
Após instalado, verificar se existem os seguintes arquivos:
shell# file /etc/init.d/httpd
/etc/init.d/httpd: Bourne shell script text executable
shell# file /usr/sbin/apache2ctl
/usr/sbin/apache2ctl: Bourne shell script text executable
shell# file /usr/sbin/httpd
/usr/sbin/httpd: 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/httpd
/etc/httpd: directory
onde:
•
•
•
•
/etc/init.d/httpd é o script de inicialização do serviço Apache;
/usr/sbin/apache2ctl é o script de controle do serviço Apache;
/usr/sbin/httpd é o executável que dará origem ao processo daemon;
/etc/httpd é o diretório de configuração do serviço web Apache.
A3 – Configuração do serviço
Serviço web Apache
www.jairo.pro.br
3/22
Primeiro vamos apenas olhar as configurações de instalação do serviço. Para isso, entrar no
diretório /etc/httpd:
shell# cd /etc/httpd
shell# ls
Nesse diretório existem [entre outras coisas] dois subdiretórios: conf e conf.d.
O arquivo de configuração do serviço é /etc/httpd/conf/httpd.conf.
No arquivo httpd.conf existe a seguinte include: Include conf.d/*.conf. Desse modo,
todo arquivo que for colocado no diretório /etc/httpd/conf.d e que tenha a extensão .conf será
tratado também como parte da configuração do serviço.
shell# more /etc/httpd/conf/httpd.conf
Um maneira mais prática de visualizar o conteúdo do arquivo httpd.conf sem apresentar
linhas comentadas nem linhas em branco é:
shell# grep -v "^#" /etc/httpd/conf/httpd.conf | grep -v "^$" | more
No arquivo httpd.conf, algumas configurações importante são:
StartServers
MinSpareServers
8
5
número de processos ou threads iniciais para o serviço;
número mínimo de processos ou threads durante o
funcionamento;
MaxSpareServers 20
número máximo de processos ou threads durante o
funcionamento;
ServerLimit
256
número limite de processos ou threads;
MaxClients
256
número limite de clientes simultâneos. Esse número
deve ser no máximo igual a ServerLimit, nunca maior;
Include
conf.d/*.conf
inclui o diretório /etc/httpd/conf.d também como
diretório de configuração do serviço;
User
apache
é o usuário sobre o qual roda o serviço;
Group
apache
é o grupo sobre o qual roda o serviço;
DocumentRoot "/var/www/html" é o diretório onde fica o conteúdo servido pelo serviço;
AccessFileName .htaccess
é o nome do arquivo usado quando houver autenticação
para acesso a diretório.
Convém notar também que o usuário sobre o qual o serviço roda, nesse caso está
configurado User apache e Group apache, precisa ter no mínimo permissão de leitura no
Serviço web Apache
www.jairo.pro.br
4/22
conteúdo em DocumentRoot.
O passo seguinte é iniciar o serviço web Apache. Para isso é usado o script de inicialização:
shell# /etc/init.d/httpd start
Iniciando o httpd:
[ OK ]
Depois de iniciado o serviço, deverá estar rodando o processo daemon e também seus
processos filhos [de StartServers]:
shell# ps -ef | grep httpd
root
12391 1
0 16:17 ?
apache
12392 12391 0 16:17 ?
apache
12393 12391 0 16:17 ?
apache
12394 12391 0 16:17 ?
apache
12395 12391 0 16:17 ?
apache
12396 12391 0 16:17 ?
apache
12397 12391 0 16:17 ?
apache
12398 12391 0 16:17 ?
apache
12399 12391 0 16:17 ?
00:00:00 /usr/sbin/httpd -k start
00:00:00 /usr/sbin/httpd -k start
00:00:00 /usr/sbin/httpd -k start
00:00:00 /usr/sbin/httpd -k start
00:00:00 /usr/sbin/httpd -k start
00:00:00 /usr/sbin/httpd -k start
00:00:00 /usr/sbin/httpd -k start
00:00:00 /usr/sbin/httpd -k start
00:00:00 /usr/sbin/httpd -k start
Repare que o daemon [nesse caso] é o processo de PID 12391, e que pertence ao root. Os
demais processos são filhos deste e estão rodando sobre o usuário apache.
São os processo filhos que atendem aos clientes do serviço, e a função do daemon é ir
criando mais processos filhos à medida que os clientes forem consumindo os processos que os
atendem.
Depois disso, o scan de portas vai mostrar que a porta 80 também está aberta:
Serviço web Apache
www.jairo.pro.br
5/22
shell# nmap localhost
Starting Nmap 6.01 ( http://nmap.org ) at 2012-11-04 16:26 BRST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000070s latency).
Other addresses for localhost (not scanned): 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.08 seconds
A4 – Testar o acesso com a aplicação cliente wget
Já que a aplicação wget baixa o arquivo do serviço 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
--2012-11-04 16:29:12-- http://192.168.1.10/
Connecting to 192.168.1.10:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2012-11-04 16:29:12 ERROR 403: Forbidden.
O erro "ERROR 403: Forbidden" é devido ao arquivo de configuração
/etc/httpd/conf.d/welcome.conf, que proíbe a listagem do diretório.
No arquivo de erro do serviço httpd, /var/log/httpd/error_log, aparece o seguinte log:
shell# tail /var/log/httpd/error_log
[Sun Nov 04 16:29:12 2012] [error] [client 127.0.0.1] Directory index forbidden by Options directive:
/var/www/html/
Então, para facilitar o acesso ao serviço, basta renomear este arquivo, de modo a não ter
mais a extensão .conf:
Serviço web Apache
www.jairo.pro.br
6/22
shell# mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.OLD
Depois, é necessário dar um reload no serviço para ele carregar novamente as configurações:
shell# /etc/init.d/httpd reload
Reloading httpd configuration:
[ OK ]
NOTA:
O reload não reinicia o serviço, apenas recarrega as configurações, desse modo nenhum
usuário corre o risco de ser desconectado.
Agora, testar de novo o acesso com wget:
shell# wget 192.168.1.10
--2012-11-04 16:44:59-- http://192.168.1.10/
Connecting to 192.168.1.10:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 525 [text/html]
Saving to: “index.html”
100%[==========================================>] 525
--.-K/s in 0s
2012-11-04 16:44:59 (74.1 MB/s) - “index.html” saved [525/525]
Agora, no arquivo de log do serviço httpd, /var/log/httpd/access_log, vai aparecer a
seguinte linha:
shell# tail /var/log/httpd/access_log
127.0.0.1 - - [04/Nov/2012:16:44:59 -0200] "GET / HTTP/1.0" 200 525 "-" "Wget/1.12 (linux-gnu)"
A5 – 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
Serviço web Apache
www.jairo.pro.br
7/22
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 servidor web com IP 192.168.1.10.
E para configurar essa diretiva, o jeito mais fácil é baixar o arquivo apache22.tar.gz do
site www.jairo.pro.br, que já tem arquivos pré-configurados.
Mas como sabemos, o acesso à internet passa por um proxy que exige autenticação, então
antes de tentar baixar esses arquivos com comando wget é necessário acertar a variável
http_proxy:
shell# export http_proxy=http://RA:[email protected]:3128
Onde:
RA:
SENHA:
186.251.39.196:
é o RA do aluno;
é a senha de acesso do aluno;
é o IP do serviço proxy, que atende na porta 3128 [é um Squid].
Para confirmar se a variável http_proxy está correta, usar o comando echo:
shell# echo $http_proxy
http://RA:[email protected]:3128
Depois disso, é só baixar o arquivo apache22.tar.gz de www.jairo.pro.br com o
comando wget:
shell# wget www.jairo.pro.br/apache22.tar.gz
--2012-11-04 17:18:14-- http://www.jairo.pro.br/apache22.tar.gz
Resolving www.jairo.pro.br... 187.73.33.34
Connecting to www.jairo.pro.br|187.73.33.34|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 534 [application/x-gzip]
Saving to: “apache22.tar.gz”
100%[========================================>] 534
--.-K/s in 0s
2012-11-04 17:18:14 (72.3 MB/s) - “apache22.tar.gz” saved [534/534]
Por fim, descompactar e extrair o conteúdo do arquivo apache22.tar.gz com os comandos
gunzip e tar:
Serviço web Apache
www.jairo.pro.br
8/22
shell# gunzip apache22.tar.gz
shell# tar -xvf apache22.tar
apache22/
apache22/protegido.conf
apache22/ponto.htpasswd
apache22/autenticado.conf
apache22/ponto.htaccess
que cria o diretório apache22. Entrar nesse diretório:
shell# cd apache22
shell# ls
autenticado.conf ponto.htaccess
ponto.htpasswd
protegido.conf
No arquivo protegido.conf tem a seguinte diretiva:
========== arquivo protegido.conf ==============
# diretorio protegido por IP
<Directory "/var/www/html/protegido">
Order deny,allow
Deny from all
Allow from 10.102.1.31
</Directory>
==========================================
Note que a diretiva "Allow from" permite o acesso ao conteúdo no diretório
"/var/www/html/protegido" apenas ao cliente com IP 10.102.1.31. Mas se quiséssemos liberar
esse acesso para mais de um IP ou até mesmo para uma rede inteira, bastaria fazer:
======================================================================
Allow from 192.168.1.0/24 192.168.1.1/24 10.11.12.13/16 127.0.0.1 172.16
======================================================================
Então, para configurar o acesso a diretório protegido por IP, basta apenas acertar os IPs ou
redes de quem está de fato autorizado a ter acesso a esse diretório.
É preciso também criar o diretório onde vai ser disponibilizado o conteúdo protegido por IP:
shell# mkdir /var/www/html/protegido
Depois disso, é so copiar o arquivo protegido.conf para o diretório de configuração do
serviço apache, no diretório /etc/httpd/conf.d:
Serviço web Apache
www.jairo.pro.br
9/22
shell# cp protegido.conf /etc/httpd/conf.d
Mas antes de recarregar [reload] o serviço Apache [e essa configuração tomar efeito], testar
o acesso ao diretório /var/www/html/protegido com o cliente wget. Como a variável
http_proxy foi carregada com o IP e porta do serviço proxy, isso precisa ser desfeito com o
comando unset:
shell# unset http_proxy
shell# cd /tmp
shell# wget http://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, no momento tem acesso ao
diretório protegido. No entanto, após recarregar o serviço essa configuração toma efeito:
shell# /etc/init.d/httpd reload
Reloading httpd configuration:
[ 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.
E no arquivo de log do serviço vão ficar registrados os acessos desses clientes.
A6 – 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.
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 autenticado.conf que veio no arquivo apache22.tar.gz, observar
Serviço web Apache
www.jairo.pro.br
10/22
que nele foi incluída a seguinte diretiva:
========== arquivo autenticado.conf ======================================
#Diretorio protegido por senha
<Directory "/var/www/html/autenticado">
AllowOverride FileInfo AuthConfig Limit
Order allow,deny
Allow from all
</Directory>
===================================================================
Essa diretiva configura o diretório "/var/www/html/autenticado" como protegido por
senha.
É preciso também criar o diretório onde vai ser disponibilizado o conteúdo protegido por
senha:
shell# mkdir /var/www/html/autenticado
Depois disso, é so copiar o arquivo autenticado.conf para o diretório de configuração do
serviço apache, no diretório /etc/httpd/conf.d:
shell# cp autenticado.conf /etc/httpd/conf.d
No diretório /var/www/html/autenticado também precisa haver o arquivo .htaccess, que
é onde estão as definições de como será essa autenticação. O arquivo .htaccess tem o seguinte
conteúdo:
========== arquivo /var/www/html/autenticado/.htaccess ===========
AuthUserFile /var/www/html/autenticado/.htpasswd
AuthGroupFile /dev/null
AuthName "Acesso Restrito"
AuthType Basic
require valid-user
========================================================
No arquivo "ponto.htaccess" que veio no arquivo apache22.tar.gz já estão prontas as
definições acima, então basta copiá-lo para o diretório /var/www/html/autenticado:
shell# cp ponto.htaccess /var/www/html/autenticado/.htaccess
Convém notar que na cópia acima o arquivo já foi renomeado de ponto.htaccess para
".htaccess".
Serviço web Apache
www.jairo.pro.br
11/22
Como o arquivo ".htaccess" contém informações importantes sobre essa autenticação de
acesso, o serviço web impede o cliente de baixá-lo. Isso pode ser verificado pelo erro 403
Forbidden recebido quando se tenta acessá-lo com wget:
shell# wget http://192.168.1.10/autenticado/.htaccess
--2012-11-04 20:51:14-- http://192.168.1.10/autenticado/.htaccess
Connecting to 192.168.1.10:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2012-11-04 20:51:14 ERROR 403: Forbidden.
E no arquivo de erro do serviço web Apache, aparece o seguinte log:
shell# tail /var/log/httpd/error_log
[Sun Nov 04 20:51:14 2012] [error] [client 127.0.0.1] client denied by server configuration:
/var/www/html/autenticado/.htaccess
No arquivo ".htpasswd" é que vão os usuários e senhas9 usados nessa autenticação. Do
mesmo modo que ".htaccess", o cliente web é impedido de baixar esse arquivo.
Para criar o arquivo ".htpasswd" e incluir o usuário aluno e sua senha, deve ser usado o
comando htpasswd:
shell# htpasswd -c /var/www/html/autenticado/.htpasswd aluno
New password:
Re-type new password:
Adding password for user aluno
No comando acima, 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 desse arquivo
será perdido. Mas se o arquivo ".htpasswd" já existe e não for usado -c, apenas altera a
senha do usuário que já existe no arquivo ou, caso ainda não exista o usuário, será
automaticamente incluído nesse arquivo.
Agora é só testar com o navegador e observar que será solicitado um usuário e senha para
esse acesso.
A figura abaixo mostra como é feita essa autenticação usando o navegador Firefox.
9 Senhas criptografadas, naturalmente.
Serviço web Apache
www.jairo.pro.br
12/22
Serviço web Apache
www.jairo.pro.br
13/22
Instalação e configuração: Parte B (Ubuntu)
B2 – 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:
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.
B3 – 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:
Serviço web Apache
www.jairo.pro.br
14/22
shell# cd /etc/apache2
shell# ls
O arquivo de configuração do serviço é "apache2.conf".
shell# more apache2.conf
Um maneira mais prática de visualizar o conteúdo do arquivo apache2.conf sem apresentar
linhas comentadas nem linhas em branco é:
shell# grep -v "^#" apache2.conf | grep -v "^$" | more
No arquivo apache2.conf, algumas configurações importante são:
StartServers
MinSpareServers
MaxSpareServers
MaxClients
Include
Include
User
Group
AccessFileName
5
número de processos ou threads iniciais
para o serviço;
5
número mínimo de processos ou threads
durante o funcionamento;
10
número máximo de processos ou threads
durante o funcionamento;
150
número limite de clientes simultâneos;
/etc/apache2/conf.d/
inclui o diretório /etc/apache2/conf.d
também como diretório de configuração
do serviço;
/etc/apache2/sites-enabled inclui o diretório /etc/apache2/sitesenabled também como diretório de
configuração do serviço;
www-data
é o usuário sobre o qual roda o serviço;
www-data
é o grupo sobre o qual roda o serviço;
.htaccess
é o nome do arquivo usado quando
houver autenticação para acesso a
diretório.
NOTA:
O diretório /etc/apache2/sites-available tem o mesmo conteúdo que /etc/apache2/sitesenabled, pois num estão linques simbólicos que apontam para os arquivos no outro.
No arquivo apache2.conf, uma configuração importante é sobre qual usuário o serviço
roda. Nas versões mais atuais de Ubuntu, isso está configurado no arquivo /etc/apache2/envvars.
Significa que esse usuário precisa ter no mínimo permissão de leitura no conteúdo de
DocumentRoot [abaixo].
Serviço web Apache
www.jairo.pro.br
15/22
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 serviço 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
rodando:
shell# ps -ef | grep
root
5184
www-data
5185
www-data
5188
www-data
5217
aluno
5419
apache2
1
5184
5184
5184
5378
0 19:32 ?
0 19:32 ?
0 19:32 ?
0 19:32 ?
0 19:34 pts/0
00:00:00 /usr/sbin/apache2 -k start
00:00:00 /usr/sbin/apache2 -k start
00:00:00 /usr/sbin/apache2 -k start
00:00:00 /usr/sbin/apache2 -k start
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:
Serviço web Apache
www.jairo.pro.br
16/22
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:
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.
B4 – 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:
Serviço web Apache
www.jairo.pro.br
17/22
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]
Para ver o log desse acesso, basta dar um tail no arquivo /var/log/apache2/access.log:
Se ocorresse alguma mensagem de erro no acesso ao serviço Apache, o arquivo a ser
consultado seria /var/log/apache2/error.log:
B5 – 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.
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.
Mas como sabemos, o acesso à internet passa por um proxy que exige autenticação, então
antes de tentar baixar esses arquivos com comando wget é necessário acertar a variável
http_proxy:
shell# export http_proxy=http://RA:[email protected]:3128
Onde:
RA:
SENHA:
186.251.39.196:
é o RA do aluno;
é a senha de acesso do aluno;
é o IP do serviço proxy, que atende na porta 3128 [é um Squid].
Para confirmar se a variável http_proxy está correta, usar o comando echo:
Serviço web Apache
www.jairo.pro.br
18/22
shell# echo $http_proxy
http://RA:[email protected]:3128
Depois disso, é só baixar o arquivo apache2.tar.gz de www.jairo.pro.br com o comando
wget:
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>
Serviço web Apache
www.jairo.pro.br
19/22
=======================================================================
É preciso criar o diretório protegido por IP:
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
Mas antes de recarregar [reload] o serviço Apache [e essa configuração tomar efeito], testar
o acesso ao diretório /var/www/protegido com o cliente wget. Como a variável http_proxy foi
carregada com o IP e porta do serviço proxy, isso precisa ser desfeito com o comando unset:
shell# unset http_proxy
shell# cd /tmp
shell# wget http://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 o reload do serviço essa configuração toma efeito:
shell# /etc/init.d/apache2 reload
Reloading httpdapache2 configuration:
[ 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.
E no arquivo de log do serviço vão ficar registrados os acessos desses clientes.
Serviço web Apache
www.jairo.pro.br
20/22
B6 – 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.
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>
=======================================================================
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
Serviço web Apache
www.jairo.pro.br
21/22
No arquivo .htpasswd é que vão os usuários e senhas10 usados nessa autenticação.
Para criar o arquivo .htpasswd e incluir um usuário e senha, usar o comando htpasswd:
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 desse arquivo
será perdido. Mas se o arquivo .htpasswd já existe e não for usado -c, apenas altera a senha do
usuário que já existe no arquivo ou, caso ainda não exista o usuário, será automaticamente incluído
nesse arquivo.
Agora é só testar com o navegador e observar que será solicitado um usuário e senha para
esse acesso.
10 Senhas criptografadas, naturalmente.
Serviço web Apache
www.jairo.pro.br
22/22

Documentos relacionados

aula20_admLNX – Apache

aula20_admLNX – Apache [1] MARCELO, A. Apache – Configurando o Servidor Web para Linux. 2ª edição. Rio de Janeiro: Brasport, 2006. [2] VEIGA, R.G.A. Apache – Guia de Consulta Rápida. São

Leia mais