A nação apache foi um grupo de diversas tribos indígenas que habitaram onde hoje são os EUA e que lutaram bravamente e com muita estratégia contra seus dominadores em um grande episódio de genocídio causado pelos norte americanos. Isso pode se considerar uma inspiração para o nome do servidor HTTP Apache, todo feito em software livre e que resiste aos ataques de interesses corporativos. O HTTP (Hypertext Transfer Protocol, ou Protocolo de Transferência de Hipertexto) é a base para comunicação da World Wide Web (ou simplesmente WEB, que é um conjunto de documentos de hipermídia que são interligados e executados através da internet).
O pacote apache2 é uma concha vazia, que serve apenas para para garantir que uma das versões do Apache seja realmente instalada – por exemplo, o libapache2-mod-php5, que permite suporte a PHP. O Apache é um servidor modular, e muitos recursos são implementados através de módulos externos que o programa principal carrega durante sua inicialização – por exemplo, habilitar o módulo SSL através do comando “a2enmod ssl”. Por padrão, o Apache lida com as requisições de entrada sob a identidade de usuário www-data, utiliza a porta 80 (como configurado em /etc/apache2/ports.conf) ou a porta 443 (SSL) e serve páginas a partir do diretório /var/www/ (como configurado em /etc/apache2/sites-enabled/000-default).
Cada host virtual (identidade adicional para o servidor web) é descrito por um arquivo armazenado em /etc/apache2/sites-available/. Ele contém o nome do host (“ServerName monolitonimbus.com.br”, por exemplo) e alguns alias (“ServerAlias www.monolitonimbus.com.br comissarionerd.com.br www.comissarionerd.com.br”), além da pasta raiz dos arquivos da página (“DocumentRoot /var/www”). No mesmo nível, o diretório “sites-enabled” contém links para os arquivos de configuração do “sites-available”, criados como “ln -s /etc/apache2/sites-available/www.monolitonimbus.com.br www.monolitonimbus.com.br”, por exemplo.
Tanto o arquivo de configuração principal (dentro de “sites-available”) como os específicos de cada diretório (“.htaccess”, geralmente usado pelo usuário que não tem acesso root) incluem vários blocos Directory. Eles permitem especificar diferentes comportamentos para o servidor dependendo da localização do arquivo que está sendo servido. Um bloco desse tipo comumente inclui as diretivas Options e AllowOverride, que lista todas as opções que podem ser habilitadas ou desabilitadas pelo arquivo .htaccess. As diretivas “Allow from” e “Deny from” controlam as restrições de acesso em um diretório (e seus sub-diretórios, recursivamente). Maiores detalhes podem ser vistos na documentação do Debian sobre o Apache.
Gerenciamento de permissões
Uma das aplicações disponíveis no Apache é o gerenciamento de permissões a acesso de diretórios do servidor (inclusive com utilização de usuário e senha), conforme segue no tutorial abaixo (mais informações na documentação do Apache):
- Para criar o arquivo contendo usuários e senhas pela primeira vez, execute o comando a seguir:
# htpasswd -c /caminho/arquivo_com_senhas.conf nome_do_usuario
- Você deverá informar sua senha (duas vezes) e aparecerá na tela “Adding password for user nome_do_usuario”
- Para incluir novos usuários, é a mesma coisa, exceto que não precisa mais do parâmetro “-c”
- Editar o arquivo de configurações do apache relacionado com o site:
# nano /etc/apache2/sites-available/www.exemplo.com.br
- Incluir as seguintes configurações:
<Directory '/Caminho_completo_da_pasta_com_dados/'> Options Indexes FollowSymLinks MultiViews AuthName "Nome que aparece na janela de autenticação" AuthType Basic AuthUserFile /Caminho_da_pasta/arquivo_com_senhas_apache.conf Require valid-user </Directory>
- Reiniciar o apache:
# /etc/init.d/apache2 restart
Se quiser proteger somente um arquivo por senha, substitua a tag do passo 5 por (o resto do conteúdo fica com o mesmo padrão):
<Files "NomeDoArquivo.extensao"></Files>
Para atualizar a senha do usuário, basta executar o comando “htpasswd /caminho/arquivo_com_senhas.conf nome_do_usuario” como super usuário.
Caso queira utilizar um sistema de login via PHP (Quadodo, por exemplo) para criar uma senha automaticamente para um usuário que está se cadastrando, utilize o seguinte código na sua página de cadastro:
$senha_randomica = makeRandomPassword(); //Gera senha radômica $password_crypt = crypt($senha_randomica, base64_encode($senha_randomica)); //Encripta senha $linha = $login.":".$password_crypt; //Cria linha modelo "login:senha" $output = shell_exec('echo "'.$linha.'" >> arquivo_com_senhas_apache.conf'); //Grava senha no arquivo apache
Nesse caso, não esqueça de dar permissão de leitura e escrita para o arquivo através do comando chmod. Para verificar eventuais erros no processamento de PHP no Apache, veja o arquivo “error.log” na pasta “/var/log/apache2”
Caso queira apagar linhas do arquivo com usuário e senha utilizado pelo apache, utilize:
sed -i nd arquivo_com_senhas_apache.conf
onde ‘n’ é o número da linha a ser apagada, e para apagar uma linha do mysql, utilize:
DELETE from nome_tabela where nome_campo = 'whatever';
Personalização de páginas de erro
O HTTP é o protocolo responsável por fazer a comunicação entre o cliente e o servidor. A cada “solicitação” feita, o HTTP responde exibindo um códigos de resposta, que mostram o status do HTTP:
- 1XX – Informativa
- 2XX – Sucesso
- 3XX – Redirecionamento
- 4XX – Erro do cliente
- 5XX – Erro do servidor
Uma lista mais completa pode ser vista no link.
O erro 503 indica Serviço indisponível (Service Unavailable), ou seja, o servidor está em manutenção ou não consegue dar conta dos processamentos de recursos devido à sobrecarga do sistema. Para personalizar a página exibida, crie a página “manutencao.html” e insira a primeira linha do código abaixo no arquivo “/etc/apache2/sites-available/www.seusite.com.br”, logo abaixo da tag “Directory”:
ErrorDocument 503 /manutencao.html Redirect 503 /diretorio_bloqueado
A segunda linha é específica para redirecionar todo o conteúdo de “diretorio_bloqueado”, recursivamente, para apresentar o erro 503 – para o usuário, ao acessar qualquer arquivo nesse nível ou abaixo, será exibida a página definida na linha acima.
Modelo de diretrizes de segurança (dezembro/2021)
Usando o arquivo .htaccess, é possível definir algumas regras para deixar o site mais seguro. No WordPress, especialmente com a versão 5.8.2, são recomendadas variações das seguintes diretrizes – geradas pelo plugin HTTP Headers:
<IfModule mod_headers.c> Header always set X-Content-Type-Options "nosniff" <FilesMatch "\.(php|html)$"> Header set X-Frame-Options "SAMEORIGIN" Header set X-XSS-Protection "1; mode=block" Header set Strict-Transport-Security "max-age=31536000" env=HTTPS Header set Content-Security-Policy "upgrade-insecure-requests" Header set Referrer-Policy "no-referrer-when-downgrade" Header set Permissions-Policy "accelerometer=(), camera=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), sync-xhr=(), usb=(), xr-spatial-tracking=()" </FilesMatch> </IfModule>
3 comments