Como faço para que o PHP carregue arquivos com segurança a partir da pasta raiz do servidor no CentOS?

0

Então eu criei o que eu pensei que seria essa incrível página de relatórios em PHP que carrega dados de alguns arquivos de texto CSV e cria gráficos e tabelas do Google para nossos clientes. Eu então pensei que seria incrível se os arquivos de texto morassem em uma pasta compartilhada do Dropbox, para que minha equipe pudesse atualizar os arquivos de texto e, em seguida, ver suas atualizações on-line sem invadir nenhum código ou lidar com bancos de dados. Tudo funciona muito bem no meu dev local, mas quando eu carrego o código para o meu servidor de produção me deparo com problemas. Eu acho que é um problema de permissões Unix, aqui está o erro do PHP:

[Sun Apr 07 11:27:58 2013] [warn] [client 208.69.41.10] mod_fcgid: stderr: PHP Warning:  file(/root/Dropbox/Reports/client-report.csv): failed to open stream: Operation not permitted in /var/www/vhosts/mydomain.com/httpdocs/my-awesome-report-page.php on line 49, referer: http://www.mydomain.com/my-awesome-report-page.php

Qual é a melhor maneira de permitir que o PHP pegue os arquivos CSV de /root/Dropbox ? A produção está rodando o CentOS 5.8.

Os arquivos na pasta httpdocs do site parecem pertencer a mydomain: psacln, enquanto os arquivos em root ~ são root: root.

Como discutido nos comentários, gostaria de encontrar uma solução segura. A página HTML do relatório está oculta por trás de um login.

    
por jnthnclrk 07.04.2013 / 17:47

2 respostas

1

Defina um link simbólico da raiz do documento para a pasta.

ln -s /var/www/reports /root/Dropbox/Reports

Isso ajuda a acessar diretamente esses arquivos sem alterar as configurações de segurança no Apache e no PHP, se os arquivos forem legíveis.

    
por 08.04.2013 / 08:50
0

Tenho duas ideias que podem resolver o seu problema:

  • você poderia criar um cronjob como root ( crontab -e ) que copia os arquivos necessários para uma pasta que o servidor da Web possa ler.
    Você pode configurar o cronjob para ser executado uma vez por minuto, o que deve ser suficiente para a maioria dos casos.
  • Crie um novo usuário para sua caixa de depósito (não é uma boa prática executar coisas como root, se não for absolutamente necessário). Também recomendo criar um usuário separado do Dropbox que tenha acesso compartilhado apenas à pasta de que você precisa (para que você não compartilhe acidentalmente mais do que deseja).

Se você quiser que eu entre em mais detalhes, fique à vontade para perguntar:)

    
por 14.04.2013 / 01:29