Este artigo foi escrito pelo Thiago Ozores – Vulgo @Dedo_de_pano

O Apache tem o parâmetro Options dentro de uma estrutura de diretório (<Directory>), que definem uma série de opções de como o mesmo será tratado pelo webserver, por exemplo, quando usuário acessar a url referente a este diretório, se ele poderá ou não ver os arquivos que tem dentro dele (o famoso Directory Browsing, que por razões de segurança é aconselhável desativar).
Estas opções são aplicadas ao subdiretórios recursivamente, por exemplo:

<Directory "/www/badabada">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

No exemplo acima autorizamos o diretório /www/badabada a seguir os links simbólicos, ou seja, se tivermos dentro deste diretório um subdiretório chamado teste, estas opções serão aplicadas a ele também.

Nessas opções de diretório, o Apache tem um recurso chamado mesclagem, um recurso legal e perigoso ao mesmo tempo, já explico o porque. Muitos de vocês já devem ter se deparado com ele, quando dentro de uma estrutura de diretório, encontramos a seguinte configuração:

<Directory "/www/badabada">
Options +Includes
AllowOverride None
Order allow,deny
Allow from all
</Directory>

É exatamente este sinal de +, que também pode ser de -, que é a tal da mesclagem. Em alguns fórums da internet e até eu, erronêamente tinham o entendimento que este +/-, significava apenas habilitar e desabilitar recurso, mas não é bem assim que funciona. A mesclagem funciona como uma herança, quando você coloca +Includes, por exemplo, você está dizendo ao Apache “Olha amigo, eu quero todas as opções que estão habilitadas/desabilitadas no diretório pai, mas esta que eu estou colocando aqui”, no caso o Includes.

O habilitar e desabilitar opções se dá somente quando você coloca ou retira, as palavras-chaves que indicam a opção, por exemplo, se eu retirasse o Includes, eu estaria desabilitando o mesmo:

<Directory "/www/badabada">
Options -FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Mas reparem, eu tirei o Includes, mas isso não significa que ele esteja desativado mesmo, porque a mesclagem continua ativa, porque basta você colocar o sinal de +/- na frente da palavra-chave e pronto, agora a desativação do Includes, vai depender do diretório pai, para não dependermos do diretório pai, basta fazer isso:

<Directory "/www/badabada">
Options Includes
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Ou seja, simplesmente, não colocar o sinal.

Mas ai você pensa, poxa, mas eu só tenho o virtualhost badabada, com o document root /www/badabada, então não vou ter nenhum diretório pai, é só ele. Ai é que você se engana, porque se você entrar no httpd.conf notará que esta configuração vem por padrão:

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>

Tá bom, Thiago, mas porque isso é tão perigoso?

Ok, agora eu explico, vamos voltar ao exemplo do virtualhost badabada, aonde eu ativei o Includes e a mesclagem:

<Directory "/www/badabada">
Options +Includes
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Como já mencionei, estou dizendo ao Apache que eu quero tudo que está ativado/desativado do diretório pai, mais quero que ative o Includes adicionalmente para este diretório. Como eu mostrei para vocês o diretório pai, neste caso é o /, que já vem configurado por padrão no Apache.

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>

Então, para o meu diretório badabada, as opções FollowSymLinks e Includes estariam ativas, mas por exemplo, o Indexes não, fazendo com que o Directory Browsing esteja desativado, mas vamos supor que eu faça essa configuração:

<Directory />
Options -FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>

Novamente, estou dizendo ao Apache que quero todas as configurações ativas/desativadas do diretório pai, menos o FollowSymLinks. Ai você me pergunta, mas peraí quem é o diretório pai neste caso?

Pois é, não existe mais um diretório pai neste caso, então o Apache considera o default e o default é ter todas as configurações ativadas, menos o MultiViews.

Ou seja, acabamos de habilitar o Directory Browsing no badabada.
E se você tiver mais outros websites configurados assim, bingo, você acaba de habilitar isso para os outros também.

Então recomenda-se ou não mudar a configuração padrão do diretório / que vem com o Apache (até porque vem nos comentários dizendo que esta configuração já está bem restritiva) ou não usar a mesclagem, usar somente se for necessário.

#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# features.
#

Publicado e altamente recomendado. Não é todo mundo que entende bem do Apache. Um índio velho, mas muito utilizado.

Compartilhar:

Este post tem 2 comentários

  1. Cara muito legal esse teu artigo. Sinceramente não tinha me deparado com essa situação. Parabéns por compartilhar.

  2. Obrigado pelo post. Muito útil em muito bacana.
    Vou colocar em prática.

    Abs

Deixe uma resposta

Fechar Menu