Guia do Linux/Avançado/Apache/Especificando opções/permissões para as páginas
Especificando opções/permissões para as páginas
[editar | editar código-fonte]As opções de restrição podem tanto ser especificadas nas diretivas <Directory>, <Location> ou <Files> quanto nos arquivos .htaccess
(ou outro nome de arquivo de controle de acesso especificado pela opção AccessFileName do arquivo de configuração do Apache
). Cada diretiva de acesso é especificada entre <tags> e devem ser fechadas com </tag> (como na linguagem HTML). As seguintes diretivas de acesso são válidas no Apache
:
- Directory
- As restrição afetará o diretório no disco especificado, consequentemente a página armazenada nele. Por exemplo:
<Directory /var/www> Order deny,allow deny from all allow from 10.1.0.1 <Directory>
O acesso ao diretório /var/www
será permitido somente ao computador com o endereço IP 10.1.0.1.
- DirectoryMatch
- Funciona como a diretiva <Directory> mas trabalha com expressões regulares como argumento. Por exemplo:
<DirectoryMatch "^/www/.*"> Order deny,allow deny from all <DirectoryMatch>
Bloqueará o acesso ao diretório /www
e sub-diretórios dentro dele.
- Files
- As restrições afetarão os arquivos do disco que conferem com o especificado. É possível usar os coringas ? e * como no shell. Também podem ser usadas expressões regulares especificando um "~" após Files e antes da expressão. Por exemplo:
<Files *.txt> Order deny,allow deny from all </Files>
Bloqueia o acesso a todos os arquivos com a extensão .txt
<Files ~ "\.(gif|jpe?g|bmp|png)$"> Order deny,allow </Files>
Bloqueia o acesso a arquivos gif, jpg, jpeg, bmp, png
(note que o "~" ativa o modo de interpretação de expressões regulares).
- FilesMatch
- Permite usar expressões regulares na especificação de arquivos (equivalente a diretiva <Files ~ "expressão">). Por exemplo:
<FilesMatch "\.(gif|jpe?g|bmp|png)$"> Order deny,allow </FilesMatch>
Bloqueia o acesso a arquivos gif, jpg, jpeg, bmp, png
.
- Location
- As restrições afetarão o diretório base especificado na URL e seus sub-diretórios. Por exemplo:
<Location /security> Order allow,deny </Location>
Bloqueia o acesso de todos os usuários ao diretório /security
da URL (a explicação porque o acesso é bloqueado neste caso será explicado em [#s-s-apache-acesso-restr-autor Autorização, Seção 12.7.1]).
- LocationMatch
- Idêntico a diretiva <Location> mas trabalha com expressões regulares. Por exemplo:
<LocationMatch "/(extra|special)/data"> Order deny,allow deny from all </LocationMatch>
Bloqueará URLs que contém a substring "/extra/data" ou "/special/data".
O uso das diretivas <Directory> e <Files> é apropriada quando você deseja trabalhar com permissões a nível de diretórios/arquivos no disco local (o controle do proxy também é feito via <Directory>), o uso da diretiva <Location> é adequado para trabalhar com permissões a nível de URL. A ordem de processamento das diretivas de acesso são processadas é a seguinte:
- A diretiva <Directory> (com exceção de <DirectoryMatch>) e os arquivos
.htaccess
são processados simultaneamente. As definições dos arquivos.htaccess
substituem as de <Directory>) - Expressões regulares de <DirectoryMatch>, <Directory>.
- <Files> e <FilesMatch> são processados simultaneamente.
- <Location> e <LocationMatch> são processados simultaneamente.
Normalmente é encontrado a opção Options dentro de uma das diretivas acima, a função desta diretiva é controlar os seguintes aspectos da listagem de diretórios:
- All
- Todas as opções são usadas exceto a MultiViews. É a padrão caso a opção Options não seja especificada.
- ExecCGI
- Permite a execução de scripts CGI.
- FollowSymLinks
- O servidor seguirá links simbólicos neste diretório (o caminho não é modificado). Esta opção é ignorada caso apareça dentro das diretivas <Location>, <LocationMatch> e <DirectoryMatch>.
- Includes
- É permitido o uso de includes no lado do servidor.
- IncludesNOEXEC
- É permitido o uso de includes do lado do servidor, mas o comando #exec e #include de um script CGI são desativados.
- Indexes
- Se não existir um arquivo especificado pela diretiva <DirectoryIndex> no diretório especificado, o servidor formatará automaticamente a listagem ao invés de gerar uma resposta de acesso negado.
- MultiViews
- Permite o uso da Negociação de conteúdo naquele diretório. A negociação de conteúdo permite o envio de um documento no idioma requisitado pelo navegador do cliente.
- SymLinksIfOwnerMatch
- O servidor somente seguirá links simbólicos se o arquivo ou diretório alvo tiver como dono o mesmo user ID do link. Esta opção é ignorada caso apareça dentro das diretivas <Location>, <LocationMatch> e <DirectoryMatch>.
Múltiplos parâmetros para Options podem ser especificados através de espaços.
OBS1: A opção Options não tem efeito dentro da diretiva FILES.
OBS2: Tanto faz usar maiúsculas quanto minúsculas nas diretivas de configuração, opções e parâmetros de configuração do Apache
, a capitalização apenas ajuda a leitura e interpretação: SymLinksIfOwnerMatch (LinksSimbólicosSeDonoConferir).
As opções especificadas para o diretório afetam também seus sub-diretórios, a não ser que sejam especificadas opções separadas para o sub-diretório:
<Directory /var/www> Options Indexes FollowSymLinks </Directory>
Ao acessar o diretório /var/www/focalinux
, as permissões usadas serão de /var/www
, ao menos que uma diretiva <Directory> ou <Location> seja especificada:
<Directory /var/www> Options Indexes FollowSymLinks </Directory> <Directory /var/www/focalinux> Options Includes </Directory>
As opções e restrições de acesso de /var/www/focalinux
serão EXATAMENTE as especificadas no bloco da diretiva <Directory /var/www/focalinux> e somente os includes serão permitidos. Para adicionar ou remover uma opção individual definidas por diretivas anteriores, podem ser usado os sinais " " ou "-", por exemplo:
<Directory /var/www> Options Indexes FollowSymLinks </Directory> <Directory /var/www/focalinux> Options Includes -Indexes </Directory>
As opções Indexes e FollowSymLinks são definidas para o diretório /var/www
, então as permissões do diretório /var/www/focalinux
serão FollowSymLinks (do diretório /web/docs
) e Includes (adicionada) e o parâmetro Indexes não terá efeito neste diretório.
É permitido fazer um aninhamento das diretivas <Directory> e <Files>:
<Directory /var/www> Order allow,deny allow from all <Files LEIAME-DONO.txt> Order deny,allow deny from all </Files> </Directory>
Neste caso, somente os arquivos LEIAME-DONO.txt
existentes no diretório /var/www
e seus sub-diretórios serão bloqueados.
Se a diretiva <Files> for usada fora de uma estrutura <Directory>, ela terá efeito em todos os arquivos disponibilizados pelo servidor. Este é excelente método para proteger os arquivos de acesso, senhas e grupos, conforme será explicado mais adiante.
Qualquer outro tipo de aninhamento de diretivas resultará em um erro de configuração ao se tentar carregar/recarregar o Apache
. Um exemplo de diretiva incorreta:
<Directory /var/www> Options Indexes FollowSymLinks <Directory /var/www/focalinux> Options Includes -Indexes </Directory> </Directory>
O correto é:
<Directory /var/www> Options Indexes FollowSymLinks </Directory> <Directory /var/www/focalinux> Options Includes -Indexes </Directory>
Espero que tenha observado o erro no exemplo acima.
OBS1: Você pode verificar se a configuração do apache está correta digitando apache -t como usuário root, se tudo estiver correto com suas configurações ele retornará a mensagem: "Syntax OK".
OBS2: Se Options não for especificado, o padrão será permitir tudo exceto MultiViews.
OBS3: Qualquer restrição afetará o diretório atual e todos os seus sub-diretórios! Defina permissões de sub-diretórios específicos separadamente caso precise de um nível de acesso diferente. Veja também a seção sobre arquivos OverRide (.htaccess
) para detalhes sobre este tipo de arquivo.
OBS4: A diretiva de acesso "<Directory />" não afetará outros sistemas de arquivos montados dentro de seus subdiretórios. Caso uma diretiva de acesso padrão não seja especificada para outros sistemas de arquivos, o acesso será automaticamente negado.