Como proteger nossos sites usando .htpasswd + Exemplos

Por vários motivos, pode ser muito útil ter acesso controlado a determinados diretórios em um servidor web ou simplesmente ao conteúdo de nossa página ou blog por meio de um serviço de autenticação baseado em nome de usuário e senha. Estou falando de algo como a janela típica que aparece quando queremos entrar em um site com serviços restritos.

Existem várias maneiras de gerar janelas com formulário de autenticação, mas uma solução interessante no nível do servidor é fornecida htpasswd. É um utilitário cuja função é armazenar senhas de forma criptografada para serem usadas pelo Apache nos serviços de autenticação. Seu uso nos permitiria mostrar certos diretórios ou arquivos via http apenas para usuários identificados e sem necessariamente estar disponível gratuitamente para todos.

Eu entendo que não é um assunto muito chamativo, mas pode ser útil para alguns. Para não matá-los de tédio, usarei imagens para torná-lo mais didático.

Considerações anteriores: Vou usar Ubuntu Server 12.04.1 y Apache 2.2.22 em um ambiente controlado.

Começamos

Como alguns já devem saber, por padrão, os sites Apache disponíveis são armazenados no diretório / var / www / e para este exemplo vou criar um diretório com um template HTML e tentar protegê-lo com .htpasswd.

O diretório a ser protegido é / var / www / exemplo / onde coloquei a próxima página.

No servidor

No navegador

1. Vamos criar o .htpasswd.

O local onde ficará localizado é de relevante importância e colocá-lo fora de um diretório público pode ser mais do que recomendado. No meu caso, irei colocá-lo em minha pasta pessoal (que não é um diretório público do Apache) e com o nome .htpasswd (A priori não é necessário chamá-lo assim, mas o que está escondido é sempre bom).

Para usuários novos no Linux. Para ocultar um diretório ou arquivo, basta iniciar seu nome com um ponto (.).

Com o seguinte comando, crio o arquivo .htpasswd para um usuário da web que chamei de: "Luke".

# htpasswd -c /home/krel/.htpasswd Luke

Ele nos pedirá para fornecer a senha duas vezes, no meu caso coloquei "skywalker" (sem aspas). Em um ambiente não controlado, devemos estabelecer senhas mais fortes. A criptografia padrão no Linux é MD5, mas no Unix é uma implementação padrão de crypt () e para senhas com menos de 8 caracteres pode ser vulnerável. Agora surge a pergunta se é o mesmo no BSD.

O comando tem esta estrutura:

  • -c → para criar o arquivo
  • /home/krel/.htpasswd → caminho absoluto do arquivo.
  • Lucas → o nome de usuário (pode ser o que você quiser)

Da mesma forma, não forço ninguém a usar o terminal quando há serviços para ele na Internet:
http://www.web2generators.com/apache/htpasswd_generator

http://www.htaccesstools.com/htpasswd-generator/

O resultado é copiado em um arquivo de texto e com o nome .htpasswd se desejar. Sobre este método, não pare de ler o que comento no próximo parágrafo.

Em nosso caso, veremos que o arquivo foi gerado onde esperávamos /home/krel/.htpasswd. Na imagem, destaquei que com este método o arquivo pertence ao usuário e grupo apache, que no Ubuntu é chamado de www-data. Isso é importante porque, se geramos o .htpasswd de qualquer outra forma, devemos ter certeza de que ele possui 644 permissões.

Bem, agora veremos como são suas entranhas:

Como você pode ver, existe o usuário (Luke), mas a senha é criptografada.

Desta forma já criamos e projetamos o .htpasswd para o usuário Luke, no final nada mais é do que um container para a senha. "Tudo com um comando" seria uma boa frase de efeito.

2. Configure o Apache para usar e permitir esse serviço no site.

# nano /etc/apache2/sites-available/default

Se você tiver vários hosts, eles devem funcionar em cada um deles, no meu caso só tenho o que vem por padrão. Não se esqueça de que é sempre bom fazer um backup desse arquivo.

Esse arquivo tem a estrutura padrão:

ServerAdmin webmaster @ localhost

..................

..................

É precisamente nos cabeçalhos do Virtualhost que o uso de .htpasswd será especificado para acessar um determinado diretório. Fazemos isso conforme a imagem abaixo aparece e apropriada ao nosso exemplo:

Boa. Eu explico as falas:

Você tem que colocar o diretório para proteger.

AuthType Basic

É o tipo de usuário e senha negociados com o navegador, neste caso Básico, sem criptografia.

Há outro tipo de negociação: Digest, criptografa o nome de usuário e a senha, mas a última palavra é o navegador para saber se ele suporta o referido serviço. Digest pode ser dito que é uma implementação um pouco mais robusta contra sniffers. Eu convido você a se aprofundar nisso.

AuthName "Bata na porta antes de entrar."

É uma mensagem que aparecerá ao usuário no navegador com o formulário de login e pode ser o que quisermos.

AuthUserFile /var/www/.pass/.htpasswd

Caminho do arquivo .htpasswd. Por isso é que digo que nem é preciso nomeá-lo .htpasswd, bastando colocar o caminho daria certo.

Require valid-user

Essa linha é projetada para vários usuários com senhas individualizadas. No caso de ser um único usuário, pode ser resumido como a seguinte variante.

Requer usuário el_que_sea

No meu exemplo poderia ser: Requer usuário Luke

E, finalmente, encerramos tudo com

Nós reiniciamos o apache:

# service apache2 restart

Vamos tentar.

Se não autenticarmos corretamente, obteremos um erro 401.

Por outro lado, se colocarmos o nome de usuário e a senha corretos, nos deixaremos passar sem maiores transtornos.

Dicas adicionais.

  • Para adicionar mais usuários a um arquivo htpasswd já criado, você pode usar este comando

htpasswd -mb /home/krel/.htpasswd Senha do usuário

Se você definiu "Requer usuário" e não "Requer usuário válido", deverá adicionar o novo usuário seguido pelo anterior e separado por um espaço. Exemplo:

Requer usuário Luke Anakin

  • Use grupos de usuários

Se, em vez de usuários individuais, preferimos ou precisamos trabalhar com grupos no site a seguir, eles explicam em detalhes e é um excelente artigo.
http://www.juanfelipe.net/node/23

  • Também podemos definir outro tipo de criptografia, por exemplo: SHA

htpasswd -sb /home/krel/.htpasswd Senha do usuário

Aqui está uma imagem de como o registro de uma senha SHA seria refletido no .htpasswd. Em ambos era "skywalker".

Saiba mais.

htpasswd - -help

Se você quiser se aprofundar neste tópico, RTFM é sempre bom!
http://httpd.apache.org/docs/2.0/es/howto/auth.html

http://httpd.apache.org/docs/2.2/misc/password_encryptions.html

Este script PHP da página da Universidade de Granada também tem sido curioso para mim criar um gerador htaccess e htpasswd. Não consegui colocá-lo em prática, mas convido você a "bisbilhotar com inteligência".

O modelo HTML que peguei nesta página, caso alguém esteja interessado.
http://www.templatemo.com/

Espero que tenha gostado desta apresentação em htpasswd.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   krel dito

    Agora lendo o post novamente, percebi que fiz uma pequena bagunça. Ao explicar as linhas na configuração do site, em AuthUserFile coloco /var/www/.pass/.htpasswd quando deveria ser:
    /home/krel/.htpasswd.

    Na imagem está tudo bem mas aí me escapou, é que já tinha feito o artigo com aquele roteiro, mas no último minuto mudei e parece que perdi a correção.

    Peço desculpas antecipadamente.

  2.   Fernando dito

    Alguma alternativa para o nautilus ??

    1.    krel dito

      Acho que o que você pergunta é o contrário, mas respondo mesmo assim.
      Eu acredito que com o Cryptkeeper seria útil proteger diretórios e coisas assim.

      Para ser sincero, se algo que odeio no gnomo é o nautilus. O Dolphin (KDE) é muito mais poderoso precisamente para proteger, criptografar com gpg, etc ...

  3.   DMoZ dito

    Krel, obrigado pelos tutoriais completos que você traz aqui e principalmente por serem tópicos não tão comuns ...

    Felicidades !!! ...

  4.   Juan Carlos dito

    Olá correu tudo bem mas .. quando fecho a aba do chrome e abro outra, escrevo o endereço e não peço a senha ...

  5.   companheiro dito

    que disse que não era chamativo.
    Era exatamente o que eu procurava e, melhor explicado, era impossível
    Muito obrigado.
    uma saudação

  6.   basco7 dito

    Olá, muito obrigado pelas informações, principalmente a parte de adicionar vários usuários no .htpasswd.

    Deus te abençoe!

  7.   Mohtadi dito

    Parabéns, é um artigo muito bom, claro e digerível. muito obrigado

  8.   eduardo dito

    Recebo um erro 500 quando insiro o nome de usuário e a senha

    AuthType Basic
    AuthName "Tocc tocc"
    AuthUserFile /var/www/html/.pass/.htpasswd
    Requer usuário Akira

  9.   eduardo dito

    Que bom que acontece comigo por comentar sem olhar para os outros comentários perodna.
    Funciona muito bem post

  10.   Somnus Sênior dito

    Olá, bom tutorial, mas existe uma alternativa para "htpasswd"? Eu pergunto porque estou usando o linux mint 17.3 e não tenho o comando… eu tenho que instalá-lo?

  11.   Somnus Sênior dito

    Ok, eu descobri ... Tive que instalá-lo com sudo apt-get install apache2-utils

  12.   Fernando montilla dito

    Olá, excelente tutorial, fiz exatamente como indicado aqui, a única coisa é que ao invés de executar o que está indicado no ponto 2:

    nano / etc / apache2 / sites-available / default

    Funcionou para mim com

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

  13.   Jorge Rodrigo Torrez Aramayo dito

    Saudações, não funciona para mim 🙁 minha pasta não aparece no meu servidor, ou seja, eu protegi minha pasta / var / 222 / html / content, e quando entro do navegador a pasta de conteúdo não aparece. Socorro