Aspectos importantes a ter em conta na segurança de Apache. Autenticação e autorização de usuários com Apache.Por Carlos Cuenca Díaz
Publicado em: 29/1/08
Quando um servidor apache recebe uma petição de uma página web, antes de devolver o resultado, realiza várias ações para verificar que a petição está autorizada.
As distintas ações que realiza para verificar a validade da aplicação pode se agrupar em três tipos: Autenticação, Autorização e Controle de Acesso.
A autenticação é o processo pelo qual se verifica a identidade de uma pessoa. De uma forma simples, este processo pode se realizar mediante um nome de usuário e uma senha, porém pode-se chegar a utilizar outros métodos para validar a identidade de uma pessoa, como mediante o uso de certificados, cartões, etc…
Em apache a autenticação pode estar gerenciada por diferentes módulos, dependendo da forma de implementação. Decide-se realizá-la gerenciando arquivos com listas de usuários e senhas (encriptadas), deverá utilizar o módulo mod_auth. Entretanto, se decidir realizá-la mediante banco de dados, deverá utilizar os módulos mod_auth_dbm.
A autorização é o processo pelo qual se verifica que um usuário com uma identidade conhecida, tem acesso ao recurso solicitado. Para realizar esta ação, costuma-se utilizar listas de permissões nas quais se enumeram cada uma das ações que pode realizar um usuário, ou as que não pode fazer. Normalmente, para simplificar o gerenciamento destes arquivos, os usuários costumam se unir em grupos proporcionando as permissões ao grupo.
Em apache a autorização a recursos é gerenciada mediante a diretriz <directory> no arquivo principal de configuração, ou então mediante a configuração da pasta através de arquivos .htaccess.
O controle de acesso é o processo pelo qual se verifica que a máquina desde a qual se fez a petição, tem acesso ao recurso. Os controles de acesso se utilizam para limitar e controlar as máquinas que têm acesso a um recurso independentemente do usuário que acessa, já que estes controles se realizam antes de se realizar o processo de autenticação.
Em apache, o controle de acesso pode se realizar mediante as diretrizes <directory><files> e <location>, ou através do arquivo de configuração .htaccess para controlar uma pasta especifica.
Em todo caso e para poder realizar a configuração das três características aqui enumeradas, autenticação, autorização e controle de acesso, é necessário ter a diretriz AllowOverride com o valor AuthConfig, para assim permitir o uso das distintas diretrizes de autenticação.
Autenticação e autorização de usuários em Apache. Mod_auth
Para configurar o servidor apache para que seja capaz de autenticar aos usuários e verificar a autorização do mesmo ao recurso solicitado, é necessário realizar as seguintes ações:
- Criar um arquivo com usuários
- Criar um arquivo com grupos (se for necessário)
- Definir as diretrizes no arquivo de configuração ou mediante um arquivo .htaccess
Nos arquivos de usuários de apache, em cada linha se especifica um usuário, escrevendo o nome de usuário separado de dois pontos, seguido da senha encriptada com MD5.
Nos arquivos de grupos de apache, em cada linha se especifica um grupo escrevendo o nome do grupo seguido de dois pontos, e a seguir separado por espaços, os nomes dos usuários.
É recomendável que tanto os arquivos de usuários como os de grupos, se encontrem armazenados fora dos diretórios publicados, para que desta forma ninguém possa baixá-los. Ainda assim, só o usuário root deveria estar autorizado a escrever nele, enquanto que só o usuário que executa o serviço web, deveria estar autorizado para lê-lo.
O arquivo de grupos pode ser criado manualmente, porém o arquivo com os usuários é recomendável criá-lo mediante a utilidade htpasswd, que se encontra na pasta com os binários de apache.
Para criar um arquivo de usuário se utilizará a seguinte sintaxe:
htpasswd -c rota/passwords usuario
O flag -c se utiliza para criar um arquivo novo, pelo qual só se deverá colocar a primeira vez que se cria o arquivo, senão o apagará.
Os módulos que intervém na autenticação e autorização são os de core e mod_auth.
As diretrizes de mod_auth necessárias para configurar a autenticação e autorização são as seguintes:
- AuthUserFile: seve para especificar a rota onde se armazenará o arquivo de usuários.
- AuthGroupFile: serve para especificar a rota onde se armazenará o arquivo de grupos.
As diretrizes de core necessárias para complementar a configuração do módulo são:
- AuthType: seleciona o tipo de autenticação de usuários que se utilizará para autenticar a um usuário. Pode variar por diretório. Os valores possíveis são Basic e Digest. Com Basic, a transferência das chaves se fará sem cifrar, e com digest se farão cifradas.
- AuthName: especifica um nome do domínio para o qual se solicita o acesso, este nome aparecerá na tela onde se pede a chave, e por sua vez servirá para que o cliente identifique a senha que deve utilizar ao enviar uma petição a uma área determinada.
- Require: seleciona os usuários que podem acessar a uma área determinada, os usuários podem ser determinados através de nomes ou grupos.