Gravar permissões em arquivos enviados - Linux, Apache, PHP

1

Estou trabalhando em um script PHP que transfere arquivos usando funções FTP. Sempre funcionou no meu servidor de produção (que é um serviço de hospedagem). O servidor de desenvolvimento que acabei de instalar (sou novato em servidores) é o Debian Lenny com Apache2, PHP5 e MySQL5.

A transferência de arquivos funciona corretamente, mas depois que o arquivo foi gravado no servidor, ele tem permissões de 600. Isso impossibilita a visualização do arquivo (JPEG) no navegador da Web, pois a permissão é negada. Eu vasculhei a internet e até mesmo quebrei a instalação do meu servidor e o reinstalei tentando descobrir isso (o que foi divertido, no entanto!).

Eu sei que é insensato definir 777 permissões em arquivos públicos acessíveis, mas nem isso resolverá o problema. A única coisa que funciona é se eu chmod 777 thefile.jpg depois foi transferido, o que não é uma solução de trabalho.

Eu tentei alterar o proprietário dos arquivos do meu site para www-data por este post , mas isso também não funciona.

Meu usuário é mike e ainda não funciona se o proprietário dos arquivos é mike ou root .

Alguém me apontaria na direção certa? Obrigado! E, claro, deixe-me saber se posso esclarecer alguma coisa.

    
por Mike Moore 18.05.2010 / 00:23

3 respostas

1

isto está mais relacionado à sua configuração do servidor ftp, e não tanto ao apache. qual servidor você está usando para ftp? Eu acredito que o vsftpd é o servidor FTP padrão para o Debian Lenny, as opções que você pode precisar olhar em seu arquivo vsftpd.conf são: chown_upload_mode e file_open_mode

o padrão para chown_upload_mode é 0600 , o que me faz pensar que pode ser o que você precisa definir e, em seguida, reinicie seu FTPd e tente novamente.

    
por 18.05.2010 / 02:50
1

Parece que o Apache não está configurado para enviar arquivos para fora do diretório no qual o arquivo está sendo salvo. Você precisa garantir que haja uma diretiva Diretório em sua configuração do Apache que permite acesso ao diretório no qual o arquivo está. Por exemplo:

<Directory "/home/mike/uploads">
  Order allow,deny
  Allow from all
</Directory>

Além disso, o usuário do www-data precisa ter permissão para percorrer a árvore de diretórios que leva ao diretório. Por exemplo. se o arquivo estiver em /home/mike/uploads , os home , mike e uploads devem ter permissão de execução permitida para outros usuários.

    
por 18.05.2010 / 01:01
0

Parece que resolvi o problema. Eu ainda gostaria de saber se esta é uma solução bem ou não.

Usuário e grupo do Apache

Alterei User ${APACHE_RUN_USER} para User mike e Group ${APACHE_RUN_GROUP} para Group www-data , depois reiniciei o apache com /etc/init.d/apache2 restart .

Proprietário do PHP5

Em seguida, alterei o proprietário de root para mike on /var/lib/php5 por:

chown -R mike /var/lib/php5

Proprietário, grupo e permissões para pasta pública

Seguindo este artigo , fiz o seguinte:

Adicionado owner 'mike' ao grupo www-data:

sudo usermod -a -G www-data mike

Alterou o grupo para /var/www para www-data :

sudo chgrp -R www-data /var/www

Em seguida, alterei as permissões para /var/www :

sudo chmod -R 2750 /var/www

E fiz o seguinte para o diretório de upload

sudo chmod -R 2770 /var/www/test/images

Tentei isso ...

Eu originalmente adicionei a sugestão @Wes (abaixo) a apache2.conf , mas a removi depois de fazer o que foi dito acima, o que funciona. (Adicionar ou remover isso não parece afetar nada):

<Directory "/var/www">
  Order allow,deny
  Allow from all
</Directory>

Mas ...

Os arquivos de imagem JPEG, depois de serem transferidos para o servidor por meio do script PHP, ainda têm permissões de -rw------- , mas posso visualizá-los a partir do navegador da web. Alguma idéia?

    
por 18.05.2010 / 02:47