Introduction

Quando se configura um servidor web, muitas vezes há seções do site que você deseja restringir o acesso. Aplicações Web frequentemente fornecem seus próprios métodos de autenticação e autorização, mas o próprio servidor Web pode ser usado para restringir o acesso se estes forem inadequados ou indisponíveis.

Neste guia, vamos demonstrar como proteger com senha os ativos em um servidor Web Apache rodando no Ubuntu 14.04.

Prerequisites

Para começar, você precisará acessar um ambiente de servidor Ubuntu 14.04. Você precisará de um usuário não-root com privilégios de sudo para realizar tarefas administrativas. Para aprender como criar tal usuário, siga nosso guia inicial de configuração do servidor Ubuntu 14.04.

Instale o pacote de utilitários Apache

Para criar o arquivo que irá armazenar as senhas necessárias para acessar nosso conteúdo restrito, iremos usar um utilitário chamado htpasswd. Isto é encontrado no pacote apache2-utils dentro dos repositórios Ubuntu.

Atualizar o cache do pacote local e instalar o pacote digitando este comando. Vamos aproveitar esta oportunidade para também pegar o servidor Apache2 caso ele ainda não esteja instalado no servidor:

  • sudo apt-get update
  • sudo apt-get install apache2 apache2-utils

Criar o arquivo de senha

Agora temos acesso ao comando htpasswd. Podemos usar isto para criar um arquivo de senha que o Apache pode usar para autenticar usuários. Vamos criar um ficheiro oculto para este fim chamado .htpasswd dentro do nosso /etc/apache2 directório de configuração.

A primeira vez que usarmos este utilitário, precisamos de adicionar a opção -c para criar o ficheiro especificado. Especificamos um nome de utilizador (sammy neste exemplo) no final do comando para criar uma nova entrada dentro do ficheiro:

  • sudo htpasswd -c /etc/apache2/.htpasswd sammy

Ser-lhe-á pedido para fornecer e confirmar uma palavra-passe para o utilizador.

Deixe o argumento -c para qualquer usuário adicional que desejar adicionar:

  • sudo htpasswd /etc/apache2/.htpasswd another_user

Se visualizarmos o conteúdo do arquivo, podemos ver o nome de usuário e a senha criptografada para cada registro:

  • cat /etc/apache2/.htpasswd
Output
sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Configure Apache Password Authentication

Agora temos um arquivo com nossos usuários e senhas em um formato que o Apache pode ler, precisamos configurar o Apache para verificar esse arquivo antes de servir nosso conteúdo protegido. Podemos fazer isso de duas maneiras diferentes.

A primeira opção é editar a configuração do Apache e adicionar nossa proteção por senha ao arquivo host virtual. Isto geralmente dará melhor desempenho porque evita as despesas de leitura de arquivos de configuração distribuídos. Se você tiver esta opção, este método é recomendado.

Se você não tiver a capacidade de modificar o arquivo de host virtual (ou se você já estiver usando arquivos .htaccess files for other purposes), you can restrict access using an.htaccessfile. Apache uses.htaccess` a fim de permitir que certos itens de configuração sejam definidos dentro de um arquivo em um diretório de conteúdo. A desvantagem é que o Apache tem que reler esses arquivos em cada requisição que envolve o diretório, o que pode impactar o desempenho.

Selecione a opção que melhor se adequa às suas necessidades abaixo.

Configurando o Controle de Acesso dentro da Definição de Host Virtual

Begin abrindo o arquivo host virtual ao qual você deseja adicionar uma restrição. Para o nosso exemplo, estaremos usando o arquivo 000-default.conf que mantém o host virtual padrão instalado através do pacote apache do Ubuntu:

  • sudo nano /etc/apache2/sites-enabled/000-default.conf

Por dentro, com os comentários removidos, o arquivo deve parecer similar a este:

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>

A autenticação é feita por-diretório. Para configurar a autenticação, você precisará ter como alvo o diretório que você deseja restringir com um bloco <Directory ___>. No nosso exemplo, vamos restringir toda a raiz do documento, mas você pode modificar esta listagem para apenas direcionar um diretório específico dentro do espaço web:

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/var/www/html"> </Directory></VirtualHost>

Within this directory block, specify that we wish to set up Basic authentication. Para o domínio AuthName, escolha um nome que será exibido para o usuário ao solicitar as credenciais. Use a diretiva AuthUserFile para apontar o Apache para o arquivo de senha que nós criamos. Finalmente, iremos requerer um valid-user para acessar esse recurso, o que significa que qualquer um que possa verificar sua identidade com uma senha será permitido em:

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/var/www/html"> AuthType Basic AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd Require valid-user </Directory></VirtualHost>

Guardar e fechar o arquivo quando você terminar. Reinicie o Apache para implementar sua política de senha:

  • sudo service apache2 restart

O diretório que você especificou deve agora estar protegido por senha.

Configurando o Controle de Acesso com arquivos .htaccess

Se você deseja configurar a proteção por senha usando arquivos .htaccess, você deve começar editando o arquivo principal de configuração do Apache para permitir .htaccess arquivos:

  • sudo nano /etc/apache2/apache2.conf

Localizar o bloco <Directory> para o diretório /var/www que mantém a raiz do documento. Ligue .htaccessprocessando alterando a diretiva AllowOverride dentro desse bloco de “None” para “All”:

/etc/apache2/apache2.conf
. . .<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted</Directory>. . .

Guardar e fechar o ficheiro quando terminar.

Próximo, precisamos de adicionar um ficheiro .htaccess ao directório que desejamos restringir. Na nossa demonstração, vamos restringir toda a raiz do documento (o website inteiro) que é baseado em /var/www/html, mas pode colocar este ficheiro em qualquer directório que deseje restringir o acesso a:

  • sudo nano /var/www/html/.htaccess

Com este ficheiro, especifique que desejamos configurar Basic autenticação. Para o arquivo AuthName, escolha um nome do reino que será exibido ao usuário ao solicitar as credenciais. Use a diretiva AuthUserFile para apontar o Apache para o arquivo de senha que nós criamos. Finalmente, vamos requerer um valid-user para acessar este recurso, o que significa que qualquer um que possa verificar sua identidade com uma senha será permitido em:

/var/wwww/html/.htaccess
AuthType BasicAuthName "Restricted Content"AuthUserFile /etc/apache2/.htpasswdRequire valid-user

Salvar e fechar o arquivo. Reinicie o servidor web para proteger com senha todo o conteúdo dentro ou abaixo do diretório com o arquivo:.htaccess

  • sudo service apache2 restart

Confirme a autenticação da senha

Para confirmar que seu conteúdo está protegido, tente acessar seu conteúdo restrito em um navegador web. Deverá ser-lhe apresentado um prompt de nome de utilizador e palavra-passe com a seguinte aparência:

Se introduzir as credenciais correctas, terá permissão para aceder ao conteúdo. Se você digitar as credenciais erradas ou pressionar “Cancelar”, você verá a página de erro “Não Autorizado”:

Conclusão

Você deve ter agora tudo o que precisa para configurar a autenticação básica para o seu site. Tenha em mente que a proteção por senha deve ser combinada com criptografia SSL para que suas credenciais não sejam enviadas para o servidor em texto puro. Para aprender como criar um certificado SSL auto assinado para usar com o Apache, siga este guia. Para aprender como instalar um certificado comercial, siga este guia.

Deixe uma resposta

O seu endereço de email não será publicado.