Apache 2.4 - A diretiva Options

A diretiva Options é responsável por configurar comportamentos do servidor que afetam um diretório do sistema de arquivos em particular. Artigo baseado no manual do Apache 2.4.

[ Hits: 9.382 ]

Por: Perfil removido em 25/08/2014


Conceitos / Funcionamento



Conceitos básicos

A diretiva Options faz parte do módulo core e pode ser utilizada em vários contextos da configuração de um servidor httpd.

As opções (Options) podem ser declaradas no contexto global de configuração do servidor (afetando todos os sites e seus diretórios), no contexto de um único host virtual (afetando apenas este site e seus diretórios), no contexto de um único diretório ou no arquivo de configuração personalizado de um site (.htaccess), modificando e sobrescrevendo (AllowOverride) parte, ou todos os comportamentos declarados anteriormente nas configurações globais, de sites ou de diretórios.

As diretivas funcionam como uma cascata de configurações e estão sujeitas à herança. A diretiva que prevalece, é aquela que é declarada no contexto mais próximo do objeto afetado (site, diretório ou arquivo). A ordem de declaração é definida pelo contexto, do mais amplo para o menos amplo, na seguinte ordem de contextos:
  • global
  • virtual host
  • directory
  • .htaccess

O comportamento padrão de Options era All (todas opções ativas) até a versão 2.3.11. Atualmente, o comportamento padrão é FollowSymLinks. Esteja atendo a isso, por uma questão de segurança, como veremos adiante.

A diretiva Options possui vários argumentos que são os nomes das opções. A palavra chave All, indica que todas essas opções estão ativas, exceto MultiViews.

A palavra chave None, indica que nenhuma opção está ativa. É possível conjugar All ou None com os outros argumentos adicionando ou subtraindo opções individualmente. É evidente que essa declaração de adições e subtrações precisa fazer sentido lógico.

Se houver erros nas declarações, o servidor não será inicializado, já que uma análise sintática (parse) das declarações é feita antes da inicialização. O curioso no Apache, é que os nomes das diretivas são indiferentes à caixa de texto (case-insensitive) entretanto, as opções das diretivas são sensíveis à caixa de texto (case-sensitive).

A sintaxe padrão para definir argumentos para Options, é uma lista de opções separadas por um espaço em branco, o nome de cada opção precedido por um sinal de mais (indicando ativo) ou menos (indicando desativado) e o nome da opção. As opções utilizam a convenção de escrita de nomes no estilo da "corcova do camelo" (camel-case ou camel notation).

Por exemplo, para desativar todas as opções, exceto ExecCGI faça:

Options None -MultiViews +ExecCGI

Funcionamento das opções

ExecCGI :: se ativado, permite a execução pelo módulo mod_cgi de arquivos do tipo CGI presentes no diretório.

Arquivos CGI são pequenos programas escritos em linguagem de script (bash, Perl, etc), ou executáveis escritos em C ou C++ que fazem pequenas tarefas, interagem com banco de dados e até com o sistema de arquivos e enviam suas saídas para servidor httpd como uma página HTML, que pode ser enviada ao cliente HTTP. Usar CGI requer configurações de segurança mais altas, pois, pode permitir brechas na segurança em vários pontos.

Programas compilados tendem a ser executados mais rapidamente que programas interpretados. A desvantagem é a manutenção, a dificuldade no tratamento de expressões regulares, de exceções e também, no tratamento de erros. Assim, linguagens interpretadas tradicionalmente, têm sido mais utilizadas em projetos de médio e pequeno porte.

Options None -MultiViews +ExecCGI

A extensão de arquivo ".cgi" permite que qualquer arquivo seja manipulado como um "script cgi", mesmo que seja um executável. O módulo "mod_mime" e a diretiva "AddHandler" fazem a ligação entre a extensão .cgi e o manipulador cgi-script. Extensões de arquivo não são sensíveis à caixa de texto (case-insensitive) nesse tipo de declaração. Entretanto, se a extensão for escrita em maiúsculas no sistema de arquivos fará diferença em sistemas GNU/Linux que são SEMPRE sensíveis à caixa de texto em relação ao sistema de arquivos. Por exemplo, o arquivo programa.cgi é diferente do arquivo programa.CGI e ambos podem coexistir no mesmo diretório em sistemas GNU/Linux sem qualquer problema.

AddHandler cgi-script .cgi

Normalmente, os scripts CGI são executados com as permissões do mesmo usuário e do grupo que executam o Apache. No Debian, esse usuário e grupo é www-data.

Esteja atento para dar as permissões de grupo para www-data, senão o script nunca será executado. Se você precisa executar CGI com privilégios de outros usuários, então precisa instalar o módulo suexec, que lida com a execução baseada em mudança de privilégios administrativos.

FollowSymLinks :: ativar essa diretiva fará o servidor seguir ligações simbólicas, esse é o comportamento padrão por omissão. Mesmo que o servidor siga uma ligação simbólica, ele não altera o caminho da rota (pathname) utilizado para comparar seções diretório.

Essa opção somente pode ser utilizada no contexto de diretórios ou no arquivo .htaccess. A omissão da definição dessa opção é uma questão de segurança, pois, pode levar o servidor a uma condição de corrida (race condition) ou condição cíclica, onde o cachorro tenta morder o próprio rabo.

Includes :: essa opção, quando ativa, permite que inclusões do lado servidor (SSI - Server-Sides Includes), providas pelo módulo mod_include, sejam utilizadas.

SSI é um interpretador para uma linguagem de script universal e utilizada exclusivamente em servidores WEB. Os principais servidores HTTP dão suporte para SSI, incluindo Apache. Tradicionalmente, páginas que utilizam SSI, possuem as seguintes extensões de arquivo: .shtml, .stm ou .shtm.

SSI permite adicionar algum tipo de conteúdo dinâmico às páginas HTML, que são puramente estáticas. Por ser uma linguagem extremamente simples, SSI perdeu espaço para as modernas linguagens de script que são mais completas. Inclusões do lado servidor mal feitas, são um risco para a segurança do servidor.

Options +Includes

IncludesNOEXEC :: essa opção, quando ativa, faz com que as inclusões do lado servidor (SSI) providas pelo módulo mod_include sejam permitidas, mas impedem que certas funções SSI como a execução de comandos (#exec cmd) sejam desativadas.

Ainda, é possível usar #include virtual em CGI scripts de diretórios que foram definidos com ScriptAlias. O uso dessa opção, torna as inclusões do lado servidor um pouco mais seguras. Observe que, desativando Includes ou IncludesNOEXEC, desativa totalmente a função de inclusão do lado servidor, independente da configuração anterior.

Indexes :: se uma URL aponta para um diretório e ele não possui uma diretiva DirectoryIndex apontando para o arquivo padrão (normalmente index.html), o comportamento padrão do servidor é retornar automaticamente uma página com a listagem de todos os arquivos presentes no diretório.

Esse comportamento gerado pelo módulo mod_autoindex não é desejado na maioria dos casos. Desativando essa opção, o servidor passa a enviar uma página de negação de acesso (forbidden), indicando o código de erro HTTP número 403.

Options -Indexes

MultiViews :: é uma opção que somente aparece no contexto de diretórios (Directory, Location ou Files). Utilizada pelo módulo mod_negotiation, já que esse módulo necessita de recursos reais para fazer comparações, a negociação de conteúdo é uma propriedade do protocolo HTTP/1.1, que descreve a forma que um navegador (browser) especifica suas preferências por um certo tipo de arquivo.

Podem ser negociados arquivos de mídia, linguagem (Language), conjunto de caracteres (Charset) e os métodos de compressão (Encoding). Por exemplo, um navegador pode especificar que prefere uma imagem no formato JPEG no lugar de uma imagem do tipo GIF.

Então, se o servidor oferece a mesma imagem em dois formatos, o formato preferido pelo cliente HTTP será enviado. Os navegadores não implementam todas as opções de negociação, o mais comum é, permitir personalizar o idioma (linguagem). Se a diretiva AllowOverride estiver ativa MultViews, pode ser definida no contexto local em .htaccess.

As preferências de idioma são configuradas no navegador cliente. No exemplo, as preferências de idioma configuradas no Firefox 31.
Linux: Apache 2.4 - A diretiva Options

Essas configurações geram os seguintes valores no cabeçalho da requisição:
  • Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3
  • Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

* Observe que cada idioma recebe um valor em uma pontuação que vai de zero até um.

SymLinksIfOwnerMatch :: essa opção faz com que o servidor siga a ligação simbólica se a propriedade (owned) do diretório, ou arquivo alvo, for a mesma da ligação. Essa opção somente pode aparecer no contexto de Directory ou .htaccess. Essa opção pode ser considerada mais segura do que FollowSymLinks, mas ainda está sujeita à condição cíclica.

   

Páginas do artigo
   1. Conceitos / Funcionamento
Outros artigos deste autor

Migrando para Linux sem medo

FreeRADIUS - Noções básicas - Parte III

Faça o GNU/Linux falar as horas para você

PostgreSQL 9.4 - O conceito de Role

FreeRADIUS - Noções básicas - Parte I

Leitura recomendada

Converter VMs GNU/Linux XenServer (paravirtualizada) para VMware ESXi 5

Explicando DHCP passo a passo

ISPConfig 3.1 - Instalação no Debian 9

Guia de como se dar bem no Slackware sem recorrer a interface gráfica

Servidor de email: Postfix + Courier IMAP + RoundCube e usuários virtuais (Debian e derivados)

  
Comentários
[1] Comentário enviado por percioandrade em 26/08/2014 - 00:35h

Muito bacana.
Obrigado pelo material.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts