Saltar para o conteúdo

Guia do Linux/Avançado/Apache/Especificando opções/permissões para as páginas

Origem: Wikilivros, livros abertos por um mundo aberto.

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.