Como evitar que o apache execute o PHP em determinado diretório?

1

Eu uso e preciso php_fpm7.0 no debian 9 (stretch) apache 2.4.25. DocumentRoot é / var / www / html e funciona bem. Php habilitado, scripts executados etc ... Agora eu também quero servir o mesmo arborescente como um sistema de arquivos via módulo apache dav_fs.

Para fazer isso:

  1. / var / www / webdav é um link simbólico para / var / www / html para que eu possa nomear o mesmo diretório com 2 nomes diferentes no arquivo de configuração do apache, e então criar 2 configurações distintas baseadas no nome de acesso
  2. acesso o webdav com /webdav URL. Dentro da configuração do apache, /webdav é um alias que aponta para / var / www / webdav . Agora eu só preciso configurar a seção <Directory /var/www/webdav> e tudo deve ser bom.

Até agora, quase funciona: eu posso pegar e colocar arquivos, criar diretórios, renomear arquivos etc ... com o webdav, mas arquivos PHP continuam a ser executados quando eu os obtenho através do alias do webdav. Então, se eu quiser editar um arquivo .php, eu de fato recebo o resultado do script no meu editor, o que é inútil.

Minha configuração até agora:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/html>
        AllowOverride All
        require all granted
        Options Indexes FollowSymLinks MultiViews
    </Directory>

    Alias /webdav /var/www/webdav
    <Directory /var/www/webdav>
        SetHandler none
        Options -ExecCGI -FollowSymLinks -Includes -Indexes -MultiViews
        AddType text/plain php php3 php4 php5 php7 php8 pht phptml phps
        AllowOverride None
        DAV On
        <ifmodule mod_dir.c>
            DirectoryIndex disabled
        </ifmodule>
        <ifmodule mod_rewrite.c>
            RewriteEngine Off
        </ifmodule>
        <Files ~ "^\.ht"> # need to be able to edit .htaccess files.
            require all granted
        </Files>
    </Directory>
</VirtualHost>

Qual é a maneira correta de prevenir a execução do php no diretório / var / www / webdav?

Editar e solução

Como o Debian usa o SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost" /etc/apache2/conf-available/php7.0-fpm.conf , eu tenho que usar SetHandler none . Mas na seção <Directory> , isso é tarde demais. ele deve ser usado em <Location> , isso é interpretado cedo o suficiente. Eu também incluí ProxyPass ! como sugere @exussum (deve ser colocado em <Location> ?). É useles neste caso preciso, mas o proxy é certamente indesejado aqui de qualquer maneira.

Observe também que eu tive que colocar a autenticação / autorização em <Directory> . Funcionou em <Location> , mas apenas o cliente CLAP cadaver pôde acessar a coleção webdav. Quando a autenticação / autorização está em <Directory> , o gerenciador de arquivos nautilus pode acessar os arquivos.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/html>
        AllowOverride All
        require all granted
        Options Indexes FollowSymLinks MultiViews
    </Directory>

    Alias /webdav /var/www/webdav
    <Location /webdav>
        <IfModule mod_proxy.c>
            ProxyPass !
        </IfModule>
        SetHandler none
        AddType text/plain php php3 php4 php5 php7 php8 pht phptml phps
    </Location>
    <Directory /var/www/webdav>
        AuthName "Restricted Area"
        AuthType Basic
        AuthUserFile    "/etc/apache2/user-password"
        require valid-user
        Options -ExecCGI -FollowSymLinks -Includes -Indexes -MultiViews
        AllowOverride None
        DAV On
        <ifmodule mod_dir.c>
            DirectoryIndex disabled
        </ifmodule>
        <ifmodule mod_rewrite.c>
            RewriteEngine Off
        </ifmodule>
        <Files ~ "^\.ht"> # need to be able to edit .htaccess files.
            require all granted
        </Files>
    </Directory>
</VirtualHost>
    
por exore 20.01.2018 / 13:24

2 respostas

1

como seu usando o fpm, você precisa enviar o pedido para o FPM em algum momento

Geralmente é assim

ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/path/to/socket.sock

ou similar. (veja link para outras opções)

Você precisa que os arquivos não atinjam isso se o seu bloco Diretório usar ProxyPass ! para impedir que eles sejam passados

    
por 20.01.2018 / 23:24
0

Na sua seção de /var/www/webdave , adicione a seguinte linha:

php_value engine off

    
por 20.01.2018 / 20:37