instalação e configuração do serviço web apache. · accessfilename .htaccess é o nome do...

22
Serviço web Apache fevereiro/2017 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 HTML 1 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 interpretar 2 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 NCSA 3 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 Gopher 4 , 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

Upload: vuongdieu

Post on 12-Jul-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

Serviço web Apache fevereiro/2017

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 Applications4 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

Page 2: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

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 recente da Netcraft7, atualmente quase metade do total de servidores web são Apache.E essa distância aumenta mais ainda quando se avalia apenas o milhão de websites mais ocupados8 [ou mais acessados] na internet. 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 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.com8 Million Busiest Websites, pesquisa também da Netcraft.

Serviço web Apache www.jairo.pro.br 2/22

Page 3: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

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:

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:

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

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

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

shell# yum install httpd

shell# file /etc/init.d/httpd/etc/init.d/httpd: Bourne shell script text executableshell# file /usr/sbin/apache2ctl/usr/sbin/apache2ctl: Bourne shell script text executableshell# 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, strippedshell# file /etc/httpd/etc/httpd: directory

Page 4: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

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

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.

Um maneira mais prática de visualizar o conteúdo do arquivo httpd.conf sem apresentar linhas comentadas nem linhas em branco é:

No arquivo httpd.conf, algumas configurações importante são:

StartServers 8 número de processos ou threads iniciais para o serviço;MinSpareServers 5 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

shell# cd /etc/httpdshell# ls

shell# more /etc/httpd/conf/httpd.conf

shell# grep -v "^#" /etc/httpd/conf/httpd.conf | grep -v "^$" | more

Page 5: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

conteúdo em DocumentRoot.

O passo seguinte é iniciar o serviço web Apache. Para isso é usado o script de inicialização:

Depois de iniciado o serviço, deverá estar rodando o processo daemon e também seus processos filhos [de StartServers]:

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# ps -ef | grep httpdroot 12391 1 0 16:17 ? 00:00:00 /usr/sbin/httpd -k startapache 12392 12391 0 16:17 ? 00:00:00 /usr/sbin/httpd -k startapache 12393 12391 0 16:17 ? 00:00:00 /usr/sbin/httpd -k startapache 12394 12391 0 16:17 ? 00:00:00 /usr/sbin/httpd -k startapache 12395 12391 0 16:17 ? 00:00:00 /usr/sbin/httpd -k startapache 12396 12391 0 16:17 ? 00:00:00 /usr/sbin/httpd -k startapache 12397 12391 0 16:17 ? 00:00:00 /usr/sbin/httpd -k startapache 12398 12391 0 16:17 ? 00:00:00 /usr/sbin/httpd -k startapache 12399 12391 0 16:17 ? 00:00:00 /usr/sbin/httpd -k start

shell# /etc/init.d/httpd startIniciando o httpd: [ OK ]

Page 6: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

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:

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:

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# nmap localhost

Starting Nmap 6.01 ( http://nmap.org ) at 2012-11-04 16:26 BRSTNmap scan report for localhost (127.0.0.1)Host is up (0.0000070s latency).Other addresses for localhost (not scanned): 127.0.0.1Not shown: 998 closed portsPORT STATE SERVICE80/tcp open http631/tcp open ipp

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

shell# cd /tmpshell# 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 Forbidden2012-11-04 16:29:12 ERROR 403: Forbidden.

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/

Page 7: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

Depois, é necessário dar um reload no serviço para ele carregar novamente as configurações:

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:

Agora, no arquivo de log do serviço httpd, /var/log/httpd/access_log, vai aparecer a seguinte linha:

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

shell# mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.OLD

shell# /etc/init.d/httpd reloadReloading httpd configuration: [ OK ]

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 OKLength: 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]

shell# tail /var/log/httpd/access_log127.0.0.1 - - [04/Nov/2012:16:44:59 -0200] "GET / HTTP/1.0" 200 525 "-" "Wget/1.12 (linux-gnu)"

Page 8: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

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 sitewww.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:

Onde:RA: é o RA do aluno;SENHA: é a senha de acesso do aluno;186.251.39.92: é 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:

Depois disso, é só baixar o arquivo apache22.tar.gz de www.jairo.pro.br com o comando wget:

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# export http_proxy=http://RA:[email protected]:3128

shell# wget www.jairo.pro.br/apache22.tar.gz--2012-11-04 17:18:14-- http://www.jairo.pro.br/apache22.tar.gzResolving www.jairo.pro.br... 187.73.33.34Connecting to www.jairo.pro.br|187.73.33.34|:80... connected.HTTP request sent, awaiting response... 200 OKLength: 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]

shell# echo $http_proxyhttp://RA:[email protected]:3128

Page 9: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

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

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 esseacesso 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:

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# gunzip apache22.tar.gzshell# tar -xvf apache22.tarapache22/apache22/protegido.confapache22/ponto.htpasswdapache22/autenticado.confapache22/ponto.htaccess

shell# cd apache22shell# lsautenticado.conf ponto.htaccess ponto.htpasswd protegido.conf

shell# mkdir /var/www/html/protegido

Page 10: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

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:

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:

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

shell# cp protegido.conf /etc/httpd/conf.d

shell# /etc/init.d/httpd reloadReloading httpd configuration: [ OK ]

shell# unset http_proxyshell# cd /tmpshell# wget http://192.168.1.10/protegido--2009-11-15 21:51:03-- http://192.168.1.10/protegidoA conectar 192.168.1.10:80... conectado!HTTP requisição enviada, aguardando resposta... 200 OKTamanho: 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]

Page 11: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

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:

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:

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/.htpasswdAuthGroupFile /dev/nullAuthName "Acesso Restrito"AuthType Basicrequire 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:

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

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

shell# mkdir /var/www/html/autenticado

shell# cp autenticado.conf /etc/httpd/conf.d

Page 12: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

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:

E no arquivo de erro do serviço web Apache, aparece o seguinte log:

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:

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.

Para testar o acesso em linha de comando, com o wget, precisa passar também usuário e senha:

9 Senhas criptografadas, naturalmente.

Serviço web Apache www.jairo.pro.br 12/22

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

shell# wget http://192.168.1.10/autenticado/.htaccess--2012-11-04 20:51:14-- http://192.168.1.10/autenticado/.htaccessConnecting to 192.168.1.10:80... connected.HTTP request sent, awaiting response... 403 Forbidden2012-11-04 20:51:14 ERROR 403: Forbidden.

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

Page 13: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

Se for testar com o navegador gráfico (por exemplo, Firefox), 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.

Serviço web Apache www.jairo.pro.br 13/22

shell# wget --user=aluno --password=uninove http://192.168.1.10/autenticado

Page 14: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

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:

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:

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

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# ls /etc/init.d | grep apache/etc/init.d/apache2

shell# apt-get install apache2

shell# file /etc/init.d/apache2/etc/init.d/apache2: Bourne shell script text executableshell# file /usr/sbin/apache2ctl/usr/sbin/apache2ctl: Bourne shell script text executableshell# 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, strippedshell# file /etc/apache2/etc/apache2: directory

Page 15: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

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

Um maneira mais prática de visualizar o conteúdo do arquivo apache2.conf sem apresentarlinhas comentadas nem linhas em branco é:

No arquivo apache2.conf, algumas configurações importante são:

StartServers 5 número de processos ou threads iniciais para o serviço;

MinSpareServers 5 número mínimo de processos ou threads durante o funcionamento;

MaxSpareServers 10 número máximo de processos ou threadsdurante o funcionamento;

MaxClients 150 número limite de clientes simultâneos;Include /etc/apache2/conf.d/ inclui o diretório /etc/apache2/conf.d

também como diretório de configuração do serviço;

Include /etc/apache2/sites-enabled inclui o diretório /etc/apache2/sites-enabled também como diretório de configuração do serviço;

User www-data é o usuário sobre o qual roda o serviço;Group www-data é o grupo sobre o qual roda o serviço;AccessFileName .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/sites-

enabled, 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].

Convém reparar também que nesse arquivo tem uma include para sites-available/default,

Serviço web Apache www.jairo.pro.br 15/22

shell# cd /etc/apache2shell# ls

shell# more apache2.conf

shell# grep -v "^#" apache2.conf | grep -v "^$" | more

Page 16: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

que é o local recomendado para configurar o serviço:

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:

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.

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:

Agora, é só fazer o scan de portas:

Serviço web Apache www.jairo.pro.br 16/22

shell# ps -ef | grep apache2root 5184 1 0 19:32 ? 00:00:00 /usr/sbin/apache2 -k startwww-data 5185 5184 0 19:32 ? 00:00:00 /usr/sbin/apache2 -k startwww-data 5188 5184 0 19:32 ? 00:00:00 /usr/sbin/apache2 -k startwww-data 5217 5184 0 19:32 ? 00:00:00 /usr/sbin/apache2 -k startaluno 5419 5378 0 19:34 pts/0 00:00:00 grep apache

shell# /etc/init.d/apache2 stopParando o apache2: [ OK ]

shell# apt-get install nmap

shell# more sites-available/default

Page 17: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

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

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

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

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# nmap localhost

Starting Nmap 4.76 ( http://nmap.org ) at 2009-11-15 18:48 BRSTInteresting ports on localhost (127.0.0.1):Not shown: 999 closed portsPORT STATE SERVICE631/tcp open ipp

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

shell# /etc/init.d/apache2 startIniciando o apache2: [ OK ]

shell# nmap localhost

Starting Nmap 4.76 ( http://nmap.org ) at 2009-11-15 19:38 BRSTInteresting ports on localhost (127.0.0.1):Not shown: 998 closed portsPORT STATE SERVICE80/tcp open http631/tcp open ipp

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

Page 18: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

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:

Onde:RA: é o RA do aluno;SENHA: é a senha de acesso do aluno;186.251.39.92: é 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# cd /tmpshell# 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 OKTamanho: 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]

shell# export http_proxy=http://RA:[email protected]:3128

Page 19: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

Depois disso, é só baixar o arquivo apache2.tar.gz de www.jairo.pro.br com o comando wget:

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

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

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

shell# cd /tmpshell# wget www.jairo.pro.br/apache2.tar.gz--2009-11-15 21:18:40-- http://www.jairo.pro.br/apache2.tar.gzResolvendo www.jairo.pro.br... 187.16.23.138A conectar www.jairo.pro.br|187.16.23.138|:80... conectado!HTTP requisição enviada, aguardando resposta... 200 OKTamanho: 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]

shell# gunzip apache2.tar.gzshell# tar -xvf apache2.tarapache2/apache2/index.htmlapache2/sites-available.defaultapache2/apache2.confapache2/ponto.htpasswdapache2/ponto.htaccess

shell# cd apache2shell# lsapache2.conf index.html ponto.htaccess ponto.htpasswd sites-available.default

shell# echo $http_proxyhttp://RA:[email protected]:3128

Page 20: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

=======================================================================

É preciso criar o diretório protegido por IP:

É 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:

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:

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:

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

shell# mkdir /var/www/protegido

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

shell# /etc/init.d/apache2 reloadReloading httpdapache2 configuration: [ OK ]

shell# unset http_proxyshell# cd /tmpshell# wget http://192.168.1.10/protegido--2009-11-15 21:51:03-- http://192.168.1.10/protegidoA conectar 192.168.1.10:80... conectado!HTTP requisição enviada, aguardando resposta... 200 OKTamanho: 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]

Page 21: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

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:

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

========== arquivo /var/www/autenticado/.htaccess ==============================AuthUserFile /var/www/autenticado/.htpasswdAuthGroupFile /dev/nullAuthName "Acesso Restrito"AuthType Basicrequire valid-user=======================================================================

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

Serviço web Apache www.jairo.pro.br 21/22

shell# mkdir /var/www/autenticado

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

Page 22: Instalação e configuração do serviço web Apache. · AccessFileName .htaccess é o nome do arquivo usado quando houver autenticação para acesso a diretório

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:

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.

Para testar o acesso em linha de comando, com o wget, precisa passar também usuário e senha:

Se for testar com o navegador gráfico (por exemplo, Firefox), 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

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

shell# wget --user=aluno --password=uninove http://192.168.1.10/autenticado