Configurei todos os meus sites em diferentes /var/www
subdiretórios. Digamos que eu tenha 5 sites baseados em um CMS como o WordPress em /var/www/a.com
, /var/www/b.com
, /var/www/c.com
e ./var/www/d.com
/var/www/e.com
Mas descobri que se eu der permissões de administrador a alguém em a.com
, com certos plugins, eles podem obter acesso para rastrear /var/www
e acessar um diretório diferente, digamos /var/www/c.com
, portanto, eles podem obter acesso lendo, por exemplo, o arquivo de configuração ( wp-config.php
) no caso do WordPress, porque em última análise, os plugins de listagens de diretórios fazem isso através do servidor web, que pode ter permissões de acesso de grupo.
A única solução que encontro é restringir o acesso total tanto ao convidado quanto ao grupo apenas neste arquivo, portanto, tecnicamente, ele será acessível apenas via SSH com acesso root, mas isso pode levar a erros, pois o servidor web não poderá acessar, a menos que o usuário do servidor web é o proprietário.
Isso me leva à conclusão de que há um risco inerente se você hospedar vários sites no mesmo host e eles executarem o mesmo daemon de servidor web. Mas deve haver uma solução, porque isso é feito por centenas de hospedagens na web em todo o mundo.
Alguém pode me recomendar uma solução para este cenário?
A maneira mais simples, se você usa PHP e deseja bloquear qualquer script php para navegar em outros diretórios que não o do seu site atual, pode usar
open_basedir
Mais informações: https://www.php.net/manual/en/ini.core.php#ini.open-basedir
Edit: Para ser mais seguro como Gerald Schneider disse, adicione seu open_basedir na configuração do seu servidor web ou no seu pool php.
Adicione um arquivo .user.ini na pasta do seu site e altere a permissão do proprietário para não permitir que seu servidor web ou php edite/exclua este arquivo.exemplo :
/var/www/a.com/.user.ini
Adicione algo assim:
open_basedir = "/var/www/a.com:/tmp"
Isso significa que, para PHP, ele não poderá analisar algo fora desses caminhos (/var/www/a.com e /tmp, necessários para upload).
Verifique seu php.ini para habilitar este arquivo de configuração, para verificá-lo, execute aphpinfo()
e verifiqueuser_ini.filename
Mais informações: https://www.php.net/configuration.file.per-userEssas dicas protegem você apenas contra scripts PHP que usam funções PHP e você não precisa alterar nenhuma permissão de diretório, mas se alguém quiser executar um script em lote com PHP, ele pode analisar outras pastas, se você usar sftp, ftp ou qualquer outra coisa para navegue em seus arquivos, esta regra não funcionará.
A solução foi usar pools PHP FPM para que cada diretório seja executado com um usuário diferente.
Esqueci de escrever sobre isso antes, mas foi assim que resolvi meu problema e agora as permissões de arquivos fazem sentido porque posso ter um enorme controle sobre as permissões de proprietário, grupo e convidado, conforme pretendido no controle de permissão do sistema de arquivos clássico do UNIX.