Apache e gerenciamento de acesso

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

  1. 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
  2. Você deverá informar sua senha (duas vezes) e aparecerá na tela “Adding password for user nome_do_usuario”
  3. Para incluir novos usuários, é a mesma coisa, exceto que não precisa mais do parâmetro “-c”
  4. Editar o arquivo de configurações do apache relacionado com o site:
    # nano /etc/apache2/sites-available/www.exemplo.com.br
  5. 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>
  6. 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

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.