Como restringir o acesso a um recurso usando o Apache no Linux

Como restringir o acesso a um recurso usando o Apache no Linux

Restringir o acesso a um recurso é frequentemente necessário ao usar a web. Em aplicativos da Web complexos, isso geralmente é implementado usando um sistema de login que pode ser mais ou menos sofisticado. Se nossos requisitos são bastante básicos, no entanto, podemos usar o sistema de autenticação fornecido pelo Apache Web Server. Neste tutorial, veremos como podemos fazer isso.

Neste tutorial, você aprenderá:

  • Como restringir o acesso a uma página da web usando o servidor da Web Apache
  • Como armazenar as senhas de usuário em arquivos de texto sem formatação
  • Como armazenar as senhas de usuário em um banco de dados
  • Como permitir o acesso a vários usuários
Como restringir o acesso a um recurso usando o Apache no Linux

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Independente da distribuição
Programas O servidor da web apache
Outro Privilégios de raiz para modificar arquivos de configuração
Convenções # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
$ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Configuração básica



A configuração mais básica envolve as duas etapas: a criação de um arquivo de senha Onde as senhas dos usuários serão armazenadas e o uso de diretivas específicas no arquivo de configuração principal do servidor (a localização deste arquivo depende da distribuição que estamos usando: no Fedora e na família de distribuição Red Hat, o arquivo é /etc/httpd/http/conf, enquanto na distribuição baseada em Debian, por exemplo, é /etc/apache2/apache2.conf), em um arquivo de configuração do VirtualHost, ou dentro de um .htaccess arquivo colocado dentro do diretório apropriado.

Se decidirmos usar esta última opção, devemos ter certeza de AuthConfig A diretiva pode ser substituída. Supondo o .htaccess o arquivo está dentro do /var/www/html/restrito Diretório, escrevíamos:

 AllowoverRide AuthConfig  

Criando o arquivo de senha

Criar um arquivo de senha é realmente fácil: tudo o que precisamos fazer é usar o htpasswd utilidade, que geralmente vem com a instalação do Apache. É muito importante que o arquivo que contém as senhas dos usuários seja colocado em um diretório onde não possa ser acessado pelo público. Neste tutorial, criaremos o arquivo dentro do /etc/httpd diretório.

Suponha que queremos permitir o acesso ao egdoc do utilizador. Para criar sua senha, executaríamos:

$ sudo htpasswd -c/etc/httpd/senhas egdoc 

O htpasswd O utilitário é usado para gerenciar senhas de usuário e armazená-las em arquivos de texto simples. Nesse caso, invocamos o utilitário e o usamos com o -c Opção: é necessário para criar o arquivo do zero. Se o arquivo já existir, é truncado; portanto, quando precisamos anexar novas entradas, a opção deve ser omitida.

Fornecemos os dois argumentos: o primeiro é o caminho do arquivo de senha, o segundo é o nome do usuário para o qual queremos criar uma senha para. O comando nos levará a inserir uma senha para o usuário e confirmá -la:

Nova senha: re-type nova senha: 

Não poderemos ver a senha quando a inserirmos. Se agora dermos uma olhada dentro do arquivo gerado, podemos ver que ele foi armazenado após hash com o formato Apache APR1 Hashing:

EGDOC: $ APR1 $ GEVSWC3P $ ZHR/MQMMN6G7TJ8FH8RCY/ 

Configure o servidor



Depois que nosso arquivo de senha estiver pronto, precisamos criar a configuração certa para o servidor da Web Apache. Como exemplo, vamos supor que queremos restringir o acesso ao /var/www/restrito diretório que é o Documentroot de um VirtualHost configurado da seguinte forma:

 Teste de nome do servidor.LAN documentroot/var/www/reestried autytype Basic Authname "Área restrita!"AuthBasicProvider File AuthUserFile/etc/httpd/senhas exigem o EGDOC do usuário   

Vamos examinar as diretivas que usamos nesta configuração.

Primeiro de tudo, usamos AuthType. Esta diretiva é usada para selecionar que tipo de autenticação queremos usar. Nesse caso, escolhemos "básico" como um valor: essa funcionalidade é fornecida pelo mod_auth_basic módulo. Outros valores possíveis são Nenhum, Digerir (fornecido pelo módulo mod_auth_digest) e Forma, que é fornecido pelo módulo mod_auth_form.

O AuthBasicProvider A diretiva é usada para declarar qual provedor deve ser usado para autenticação. Nesse caso, poderíamos ter omitido, já que arquivo é o valor padrão, fornecido pelo mod_authn_file módulo.

Com o Authname Diretiva, configuramos um reino. Essa configuração tem basicamente dois propósitos: como primeira coisa, a mensagem que fornecemos aqui, aparecerá como uma mensagem no prompt fornecido pelo servidor, por exemplo:

O site diz: “Área restrita!”

O "reino" também é usado pelo cliente, para decidir qual senha ela deve enviar para o servidor. Se o usuário já estiver autenticado, poderá acessar todos os recursos sob o mesmo reino, sem ter que fazer login novamente.

O AuthUserfile A diretiva é usada para apontar para o arquivo de texto sem formatação que hospeda a senha dos usuários que criamos antes com o htpasswd Utilitário.

Finalmente, temos o Exigir diretivo. Com esta diretiva, podemos restringir o acesso a um recurso na base de alguns parâmetros como endereço IP do cliente ou, como neste caso, a autenticação como um usuário específico.

O /var/www/teste diretório contém um arquivo de índice, índice.html, onde acabamos de colocar o “acesso concedido!" mensagem. Depois que nossa configuração estiver pronta, podemos reiniciar o servidor:

$ sudo systemctl reiniciar httpd 

Quando tentamos acessar a página, seremos solicitados a inserir um nome de login e uma senha:

O prompt de login do apache

Se fornecermos as credenciais certas, o acesso à página será concedido:

O acesso Apache concedido

Usando grupos

Na grande maioria dos casos, queremos permitir que vários usuários acessem um recurso. Nesses casos, queremos usar um arquivo de grupo onde associamos o nome de um grupo a uma lista separada por espaço de seus membros. Suponha que o caminho do nosso arquivo seja /etc/httpd/grupos; Seu conteúdo seria:

Permitidos: Egdoc Tim Rob 


Declaramos que os usuários de Egdoc, Tim e Rob são membros do Permissão Grupo: Para cada um deles, uma entrada no arquivo de senha deve ser adicionada. Neste ponto, precisamos alterar a configuração do servidor e adaptá -la à nova configuração:

 Teste de nome do servidor.LAN documentroot/var/www/reestried autytype Basic Authname "Área restrita!"AuthBasicProvider File AuthUserFile/etc/httpd/senhas authGroupFile/etc/httpd/grupos requerem grupo permissão   

Introduzimos uma nova diretiva, AuthGroupFile, e passou para ele o caminho do arquivo em que os grupos são mapeados para os usuários. Também mudamos o valor do Exigir diretivo; Agora, para poder acessar o recurso, um usuário deve fazer parte do Permissão grupo. Para tornar as alterações eficazes, precisamos reiniciar o servidor.

Armazenando senhas em um banco de dados

No exemplo anterior, vimos como armazenar as senhas dos usuários dentro de um arquivo de texto simples e simples. Esta é uma solução viável perfeita quando não temos muitos usuários. Quando a lista de usuários se torna bastante longa, pode ser bastante impraticável digitalizar todo o arquivo de senha para cada solicitação. Em casos como esse, podemos querer armazenar as senhas em um banco de dados.

Uma opção é criar um Dbm arquivo. Podemos realizar a tarefa usando o htdbm Utilitário. Para gerar um dbm Arquivo na mesma posição que usamos no exemplo anterior, podemos executar:

$ sudo htdbm -cb/etc/httpd/passwd/senhas Egdoc nova senha: re -toype nova senha: banco de dados passwd/senha criada. 


Como você pode ver, a sintaxe é muito semelhante à usada para htpasswd. Assim como antes, lançamos o comando usando o -c opção, para criar o arquivo ou truncá -lo se já existir. Nesse caso, também usamos o -B opção para usar o BCRYPT Algoritmo para a criptografia de senha. Como mudamos a maneira como as senhas são armazenadas, também devemos alterar a configuração do servidor:

 Teste de nome do servidor.LAN documentroot/var/www/reestried autytype Basic Authname "Área restrita!"AuthBasicProvider dbm authdbmuserfile/etc/httpd/passwd/senhas requerem egdoc do usuário   

O que mudamos acima é o valor que passamos para o AuthBasicProvider Diretiva, que agora é dbm. Nós também substituímos o AuthUserfile diretiva com Authdbmuserfile, fornecendo como antes, o caminho do arquivo em que a senha é armazenada. Para que esta configuração funcione, devemos ter o mod_authn_dmb módulo ativado.

Conclusão

Neste tutorial, vimos como restringir o acesso a um recurso e implementar um sistema de autenticação de login simples usando o servidor da Web Apache. Vimos como armazenar senhas em arquivos de texto simples ou em um dbm Formato do banco de dados. Também vimos como permitir o acesso a vários usuários usando um Arquivo de grupo e quais diretivas devem ser usadas para atingir nosso objetivo.

Tutoriais do Linux relacionados:

  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Coisas para instalar no Ubuntu 20.04
  • Ubuntu 20.04 WordPress com instalação do Apache
  • Tutorial do SQLite Linux para iniciantes
  • Instalação do Ampache Raspberry Pi
  • Como migrar o Apache para o nginx convertendo o VirtualHosts para…
  • Mastering Bash Script Loops
  • Instale o MySQL no Ubuntu 20.04 LTS Linux
  • Como instalar o MySQL no Almalinux
  • Tutorial do LFTP sobre Linux com exemplos