Oferta Nacional - 234x60

Arquivo

Textos com Etiquetas ‘.htaccess’

Como proteger arquivos e pastas com senha no ubuntu linux usando htaccess e htpasswd

Seguindo o exemplo do post anterior (http://blog.idealmind.com.br/servidores/como-criar-um-link-simbolico-no-ubuntu-linux/), vou exemplificar como criar uma proteção, ou seja, restringir o acesso de um arquivo através de login e senha, onde o servidor requer autenticação, através de htaccess e htpasswd, para acessar ou fazer o download de um arquivo restrito.

Como no exemplo do post anterior, a idéia é proteger o download do arquivo em http://www.exemplo.com.br/backup/backupdb.sql.gz (que é um link simbólico puxando um arquivo em outro diretório do servidor).

A proteção pode ser feita utilizando o htacces e o htpasswd. Assim:

Entre no diretório onde está o arquivo que você quer restringir:
$ cd /home/exemplo/backup
home/exemplo/backup$ htpasswd -c restrito nomedousuario
New password:
Re-type new password:
Adding password for user nomedousuario
home/exemplo/backup$

onde restrito é o nome do arquivo que arqmazena os usuários e as senhas, e nome do usuário é o nome do usuário que terá acesso.Você vai digitar a senha de acesso para este usuário logo em seguida, e confirmar a senha.

Neste momento, você terá criado um usuário que poderá acessar o arquivo. Porém, o arquivo ainda não está protegido. Então faça o seguinte:
Crie um arquivo .htaccess dentro dessa pasta (/home/exemplo/backup), utilizando, por exemplo,o vim:

home/exemplo/backup$ vim .htaccess

e insira o seguinte conteúdo no arquivo .htaccess:

AuthName “Acesso Restrito”
AuthType Basic
AuthUserFile /home/exemplo/backup/restrito
require valid-user

salve e feche o vim (:x).

Pronto, a partir desse momento, para qualquer usuário que acessar http://www.exemplo.com.br/backup/backupdb.sql.gz, será solicitado um login e uma senha, e o acesso ao download do arquivo somente será liberado se o usuário for autenticado com sucesso.

A analogia é a mesma para restrição de diretórios.

Se você quiser adicionar mais usuários para se autenticar com logins e senhas diferentes, basta dar o comando:

home/exemplo/backup$ htpasswd restrito nomedeoutrousuario
New password:
Re-type new password:
Adding password for user nomedeoutrousuario

Note que não precisa do parâmetro -c, que especifica que o arquivo restrito deve ser criado, pois ele já existe.

Posts Relacionados:

Forçar download em servidor remoto como Amazon S3 com opção “salvar como”

Olá!

Este artigo mostra como fazer para que apareça a opção “salvar como” para downloads de arquivos hospedados em servidores remotos, o que é muito útil para se poupar recursos do servidor.

Para poder utilizar a solução apresentada aqui, será necessário que o Apache esteja com os módulos mod_rewrite e mod_proxy habilitados, ou que você possa editar o arquivo httpd.conf do servidor Apache (ou solicitar as configurações ao seu serviço de hospedagem).

Há um certo tempo atrás a equipe do meuInglês decidiu hospedar os arquivos pesados do site, como FLV e MP3, e as imagens, nos servidores Amazon S3. As vantagens eram muitas, tais como a rapidez no carregamento dos arquivos, o baixo custo e a segurança envolvidos. Tudo era maravilhoso, até que esbarrei com as opções de download que o meuInglês oferece aos seus usuários. Outros sites concorrentes também hospedam seus arquivos na Amazon S3, e a opção de download para seus usuários é de clicar com o botão direito do mouse para selecionar salvar o destino do link (pelo menos com instrução, para facilitar a vida de usuários menos experientes).

Particularmente, acho esta solução muito deselegante, pois é tão cômodo para o usuário simplesmente clicar no botão de download e aparecer uma janelinha pedindo para “Salvar o arquivo como…”. Comecei a googlar pesquisando uma solução.

A primeira coisa que fiz foi usar a função fopen() do php com permissão a acessar arquivos remotos, e depois setar o header do php para disponibilizar o arquivo como attachment. Logo vi em conjunto com a equipe de tecnologia que isso não seria uma solução, mas sim um problema, pois a função fopen() baixava os arquivos da Amazon S3 para o servidor, e depois disponibilizava o arquivo para o usuário, logo, iríamos pagar os custos de tranferência de dados duas vezes: uma pela transferência dos arquivos da Amazon S3 para o servidor, e depois do servidor para o usuário, além do tempo de download ser a soma desses dois downloads.

Perdi três preciosos dias buscando uma solução, pesquisando, pensando, tentando várias coisas que encontrei, tais como setar cabeçalhos (HTTP Header) diretamente nos arquivos, ou ao subir os arquivos para a Amazon S3… Estava quase desistindo, quando encontrei um site maravilhoso com ótimas dicas de configurações do Apache e do .htdocs (salve nos seus favoritos! Você vai precisar!).

Então saí da câmara escura e comecei a enxergar novos horizontes.

Criei uma pasta downloads na raíz do site e dentro dela coloquei um arquivo .htacces com a seguinte configuração:


IndexIgnore *
RewriteEngine On

RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^mp3/(.*)$ http://seubucket.s3.amazonaws.com/pasta/$1?%1 [P,E=PERMITE:1]

RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^pdf/(.*)$ http://seubucket.s3.amazonaws.com/pasta/$1?%1 [P,E=PERMITE:1]

RewriteCond %{ENV:PERMITE} !1$ [NC]
RewriteRule .* - [R=404,NS,L]

Header set Content-Disposition "attachment;" env=PERMITE

Explicando:

  1. A primeira linha simplesmente não permite listar os arquivos do diretório.
  2. A segunda linha habilita o módulo rewrite do apache.
  3. A quarta linha (assim como a sexta) pega os parâmetros passados pela url (como a autenticação para arquivos protegidos na Amazon S3) através de uma condição Rewrite e coloca no lugar de %1 na linha seguinte.
  4. A quinta linha (assim como a sétima) faz o rewrite, ou seja, reescreve a url recebida para a url original. A mágica acontece ao setar a flag P, que diz que a url será acessada via mod_proxy do Apache. Nesta linha também é setada uma variável PERMITE, que terá o valor 1 se a condição RewriteRule for satisfeita.
  5. Na décima linha, verifico se a varíavel PERMITE possui valor diferente de 1, através de uma condição Rewrite, e, se for o caso, apresento uma página de erro 404, e ecerro a execução do código (flag L).
  6. Finalmente, na linha 13, se o código chegar até lá (ou seja, pelo menos uma das duas condições foi satisfeita => PERMITE = 1), defino o cabeçalho do conteúdo como attachment, ou seja, para download, e então aparece aquela janelinha linda de “Salvar arquivo como…”

Desta forma, para fazer download do arquivo com a opção “Salvar como”, basta que a url do botão/link de download seja no formato


http://www.exemplo.com.br/downloads/mp3/nomedoarquivo.mp3?par=XXX&par=YYY ou

http://www.exemplo.com.br/downloads/pdf/nomedoarquivo.pdf?par=XXX&par=YYY

(os parâmetros são opcionais dependendo do que você estiver fazendo)

Se o arquivo


http://seubucket.s3.amazonaws.com/pasta/nomedoarquivo.pdf?par=XXX&par=YYY

existir aparecerá a janela de download, caso contrário, será exibido um erro 404.

Enfim, como disse no começo, para isso funcionar, o servidor Apache deve estar com os módulos mod_rewrite e mod_poxy, e mod_proxy_http habilitados. Para isso, certifique-se de que as seguintes linhas do httpd.conf estejam descomentadas:


LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so

Eu usei Apache 2.2.X e não testei em outras versões.

Espero que este artigo tenha sido útil para você, e, se era isso o que você estava procurando, fico feliz se você encontrou a solução em menos de 3 dias! ;)

Até a proxima!

Related Posts Plugin for WordPress, Blogger...

Posts Relacionados:

SEO Powered by Platinum SEO from Techblissonline