Os visitantes do meu site e arquivos php estão sempre em outro tipo de permissão?

0

Estou tentando entender como configurar permissões de arquivo no meu servidor. Eu li o guia incrível link .

1. visitantes do meu site

O guia indica

Anonymous users are the visitors to your website. Although they don't have permissions to access files directly, they can request a web page and the web server acts on their behalf. You can limit the access of anonymous users by being careful about what permissions the web server process has. On many Linux distributions, Apache runs as the www-data user but it can be different. Use ps aux | grep httpd or ps aux | grep apache to see what user Apache is using on your system.

Estou usando o XAMPP no meu laptop. Se eu inserir ps aux | grep httpd , obtenho

adam      6635  0.0  0.0  21292   960 pts/1    S+   15:51   0:00 grep --color=auto apache

Portanto, o Apache é executado como adam . Além disso, tenho um arquivo chamado test2.php com a seguinte permissão:

-r-------- 1 adam adam 24 Dez 31 15:20 test2.php

Portanto, apenas o proprietário do arquivo pode lê-lo. Mas como o Apache é o proprietário, eu esperava que, se eu solicitasse o arquivo em meu navegador, conseguisse lê-lo.

No entanto, recebo o seguinte erro

Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0

Fatal error: Unknown: Failed opening required '/home/adam/www/site/test2.php' (include_path='.:/opt/lampp/lib/php') in Unknown on line 0

Mas a citação acima não sugere que eu possa acessá-la devido a

they can request a web page and the web server acts on their behalf.

2. Arquivos PHP

Considere um arquivo php que consiste em

<?php

 $string = fopen("stuff.txt","r");

é o arquivo php capaz de abrir stuff.txt somente iff stuff.txt é legível para a classe de permissão other ? Ou também seria legível se o Apache fosse o proprietário do arquivo e tivesse permissão de leitura, mas a classe de permissão other não tivesse permissão de leitura?

    
por Adam 31.12.2016 / 16:16

1 resposta

0

O PHP pode ser executado em diferentes modos de operação, se o PHP for compilado como módulo do Apache (que é um caso para o XAMPP) então tudo o que o Apache pode ver estará disponível para PHP e como PHP é a linguagem do interpretador, ele pode executar o que pode ver (no caso de conter <?php ... ?> , independentemente do tipo de arquivo). Se você rodasse o PHP como serviço de escuta independente (usando php-fpm), então você pode separar o Apache do PHP. O Apache neste caso será apenas o proxy de encaminhamento para o PHP. Dessa forma, você pode executar o Apache e o PHP em diferentes contas de usuário.

Lembre-se de que, mesmo que você instale o XAMPP sob root / administrator, ele deixará de ter permissão privilegiada após vincular a porta de escuta à conta de usuário especificada na configuração do apache.

Para poder executar o servidor web na porta 80 (porta privilegiada), o Apache precisa de permissões root / administrator para iniciar, mas após o início ele será executado como um usuário regular (de preferência restrito)

O XAMPP / LAMPP geralmente não está em uso na produção, pois tem por padrão configurações muito permissivas e é usado principalmente no estágio de desenvolvimento.

Se você quiser o modelo de segurança de produção, separe todas as funções de cada serviço e execute cada serviço (Apache, PHP, MySQL) em uma conta diferente, restrita (não administrativa).

Um bom modelo de segurança é quando tudo (todos acessíveis pelo Apache) exposto à Internet selvagem deve ter permissões somente de leitura, exceto os arquivos ou diretórios que realmente precisam ser graváveis, mas nesses casos você precisa restringir esses recursos no Apache, desabilitando o acesso ou a transformação do mecanismo PHP nesses diretórios, dependendo do caso de uso.

Voltar às suas perguntas: Você escreveu que está usando o XAMPP, o que significa que você o está executando no Windows. Clique com o botão direito do mouse na barra de tarefas e execute o gerenciador de tarefas para identificar o nome do processo do apache e a conta do usuário em execução para descobrir quais permissões o PHP teria.

Mas eu suponho que você esteja executando o LAMPP, não o XAMPP, já que o seu diretório web se parece com o ambiente baseado em unix "/home/adam/www/site/test2.php". É muito diferente das janelas. Dependendo do sistema operacional que você usa, o serviço Apache pode ser executado sob um nome diferente, em vez de httpd, pode ser um apache2 (no debian), portanto, ao tentar localizar o processo em execução, use o nome correto em grep . (Para simplificar sua transmissão, instale o htop no sistema baseado em unix para identificar a atividade do processo)

Se eu estiver certo que você usa o LAMPP, verifique as permissões do diretório da web e seus subdiretórios que são todos pertencentes ao mesmo usuário que o usuário do apache em execução. Se você precisar de proteção de base de arquivo de alguns arquivos, retire a propriedade de um usuário diferente do usuário designado para o serviço da Web.

    
por 31.12.2016 / 21:04