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 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
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 internet 5, 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 patches 6 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 Netcraft 7, 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 ocupados 8 [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 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 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 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
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? 00:00:00 /usr/sbin/httpd -k start apache 12392 12391 0 16:17? 00:00:00 /usr/sbin/httpd -k start apache 12393 12391 0 16:17? 00:00:00 /usr/sbin/httpd -k start apache 12394 12391 0 16:17? 00:00:00 /usr/sbin/httpd -k start apache 12395 12391 0 16:17? 00:00:00 /usr/sbin/httpd -k start apache 12396 12391 0 16:17? 00:00:00 /usr/sbin/httpd -k start apache 12397 12391 0 16:17? 00:00:00 /usr/sbin/httpd -k start apache 12398 12391 0 16:17? 00:00:00 /usr/sbin/httpd -k start apache 12399 12391 0 16:17? 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:senha@186.251.39.196:3128 Onde: RA: é o RA do aluno; SENHA: é a senha de acesso do aluno; 186.251.39.196: é 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:senha@186.251.39.196: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> =================================================================== senha. senha: Essa diretiva configura o diretório "/var/www/html/autenticado" como protegido por É preciso também criar o diretório onde vai ser disponibilizado o conteúdo protegido por 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 senhas 9 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 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 threads durante 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/sitesenabled 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/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 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: 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:senha@186.251.39.196:3128 Onde: RA: é o RA do aluno; SENHA: é a senha de acesso do aluno; 186.251.39.196: é 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:senha@186.251.39.196:3128 wget: Depois disso, é só baixar o arquivo apache2.tar.gz de www.jairo.pro.br com o comando 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