Atualmente estou executando um proxy reverso Nginx na frente de um servidor Apache PHP no Ubuntu. Eu tenho um arquivo, log.txt
, no mesmo diretório que eu sirvo arquivos PHP para o meu site. PHP grava neste arquivo de log com atividade de API. Posso acessar o arquivo de log alterando o URL de lookup.php
para log.txt
ao visitar em um navegador da Web, o que é completamente inseguro. Eu só quero acessar o arquivo de log quando estou conectado ao SSH.
Mudei a propriedade do arquivo de log para www-data
, o grupo no qual o PHP está sendo executado atualmente. O que eu queria que acontecesse é que os arquivos PHP pudessem gravar nesse arquivo de log, mas não que os usuários pudessem navegar para o caminho do arquivo de log no navegador da Web e exibi-lo. Eu acho que o problema é que, como o Nginx também está sendo executado como www-data
, alterando o proprietário do arquivo de log para www-data
que o PHP possa escrever nele, o Nginx agora pode lê-lo.
Aqui estão algumas das ideias que eu estava pensando, mas não tenho certeza se elas têm grandes falhas de segurança:
Alterando o arquivo de log para ser somente gravação para o proprietário do arquivo,
www-data
. Eu estava fazendo uma pesquisa e isso parecia ser uma abordagem rara.Fazendo o PHP e o Nginx rodarem como grupos separados, dando ao PHP um acesso rwx e nenhum ao nginx.
Criando um novo diretório fora da raiz da web para que não haja uma URL da web associada ao arquivo, mas tendo o diretório de propriedade
www-data
(para PHP e Nginx). Eu não tinha certeza se isso tem vulnerabilidades.Proibindo o acesso ao arquivo de log através do Nginx. Isso parece um pouco "hacky" para mim.
Qual seria um caminho adequado a tomar?
Costumo executar o nginx para meus servidores e proxies da Web, então perdoe a ignorância do Apache, mas normalmente não uso permissões de arquivo para isso. Em vez disso, prefiro dizer ao meu servidor web para não servir certos arquivos. Aqui está um método para fazer isso a partir de uma falha do servidor.
Criar um diretório separado para registro também é bom, e o diretório pode simplesmente ser proibido pelo Apache se ainda estiver em um local que uma URL possa acessá-lo. Ou o
/var/log/
local pode ser usado, mas normalmente é reservado para serviços executados no sistema operacional.Não deve ser difícil usar o servidor da Web para negar acesso, pois essa funcionalidade está parcialmente disponível para arquivos confidenciais. Além disso, o diretório raiz de um servidor web assume que todos os arquivos abaixo são destinados à web, a menos que explicitamente negados (conforme descrito acima). Esta é a rota que faço com meus servidores web quando necessário.