Diretório / configuração do Apache afetando Localização / status do servidor

1

Depois de estudar a documentação , não esperaria que diretivas em um contêiner <Directory> afetassem URLs do sistema de arquivos como /server-status na seguinte configuração (completa):

DefaultRuntimeDir /var/run/apache2
PidFile /var/run/apache2/apache2.pid
User www-data
Group www-data
ErrorLog /var/log/apache2/error.log
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined
DocumentRoot /var/www/html

Listen 80

LoadModule mpm_worker_module /usr/lib/apache2/modules/mod_mpm_worker.so
LoadModule authz_core_module /usr/lib/apache2/modules/mod_authz_core.so
LoadModule     status_module /usr/lib/apache2/modules/mod_status.so

<Location /server-status>
    SetHandler server-status
</Location>

<Directory />
    Require all denied
</Directory>

Ainda assim, se eu rodar o Apache / 2.4.25 no Debian, use essa configuração como

# apache2 -f demo.conf -X

Eu obtenho

$ curl --head http://localhost/server-status
HTTP/1.1 403 Forbidden

enquanto, se eu substituir denied na configuração acima por granted , obtenho

curl --head http://localhost/server-status
HTTP/1.1 200 OK

Em outras palavras, a diretiva Require no bloco <Directory /> afeta a acessibilidade dessa URL. Qual parte da documentação explica isso?

    
por Ferenc Wágner 14.03.2017 / 20:39

2 respostas

0

Você só define um controle de acesso único :

<Directory />
    Require all denied
</Directory>

A seção sobre fusão de diretivas explica que Directory seções são aplicadas primeiro, antes das diretivas em Location seções, independentemente de como elas são ordenadas no seu httpd.conf.

O comportamento que você vê é explicado na AuthMerging Diretiva:

When authorization is enabled, it is normally inherited by each subsequent configuration section, unless a different set of authorization directives is specified. This is the default action...

Você não define nenhum controle de acesso adicional na seção de configuração <Location /server-status> que substituiria o único controle de acesso que você definiu, o Require all denied e esse é o controle de acesso herdado pelo módulo mod-status no o espaço da Web / status do servidor.

    
por 14.03.2017 / 21:52
0

Como @ ezra-s enfatizado no IRC, mesmo para URIs puramente virtuais (como /server-status no exemplo de configuração na pergunta), o Apache tenta corresponder à parte principal ( / neste caso) com o sistema de arquivos. Para URIs absolutos, o / principal sempre corresponderá ao DocumentRoot , mas outros componentes do caminho também poderão corresponder, se existirem sob DocumentRoot . Podemos substituir as seções <Location /server-status> e <Directory /> da configuração na pergunta pelo seguinte para demonstrar isso:

<Location /foo/server-status>
    SetHandler server-status
</Location>

<Location /bar/server-status>
    SetHandler server-status
</Location>

<Directory />
    Require all denied
</Directory>

# The /var/www/html/foo directory exists, this makes /foo/server-status accessible:
<Directory /var/www/html/foo>
    Require all granted
</Directory>

# The /var/www/html/bar directory does not exist, this does not make /bar/server-status accessible:
<Directory /var/www/html/bar>
    Require all granted
</Directory>

# But this helps regardless (through another means):
<Location /bar>
    Require all granted
</Location>

Então, é assim que os locais virtuais são afetados por <Directory> de blocos.

    
por 15.03.2017 / 23:24

Tags