Definindo permissões corretas para fazer upload de arquivos


12

Eu tenho um script php que carrega um arquivo em um diretório chamado "uploads". A única maneira de conseguir que o upload funcione é:

chmod 777 uploads

Sei que isso não está correto, mas não sei o que devo fazer para fazê-lo funcionar.

Informações do servidor: T1-Micro Amazon Linux AMI 2013.03 no Amazon EC2

Questões:

  • Como descubro quais usuários precisam acessar ... por exemplo, qual é o nome de usuário do apache ou do servidor da web?

  • Qual nível de acesso eu preciso fornecer e que comando eu usaria para fazer isso.

Obrigado!

Edit: Encontrei muitas respostas no estouro de pilha que pesquisarei. Por exemplo

/programming/3642241/php-file-upload-permissions

/programming/10842880/setting-permissions-in-php-on-server

/programming/8948537/permission-denied-when-attempting-to-upload-file-with-php

obrigado

Respostas:


20

Tente executar:

ps -ef | grep apache

e observe a coluna mais à esquerda correspondente ao servidor Apache. Este é o usuário que está executando o Apache e, por herança, também o PHP.

Altere a propriedade do diretório de upload para esse usuário e restrinja um pouco as permissões, por exemplo, se o usuário do servidor da Web www-datapertencer ao grupo com o mesmo nome (usando um caminho de amostra de /var/www/uploads):

sudo chown www-data:www-data /var/www/uploads
sudo chmod 755 /var/www/uploads

(ou quaisquer permissões que você desejar nesta instância). Uso sudonos comandos de exemplo - não sei exatamente como os sistemas EC2 são configurados nesse sentido para obter privilégios de superusuário.

Se você já fez upload de arquivos / diretórios, também poderá alterar a propriedade e as permissões. Para fazer isso, passando de 777permissões mais razoáveis, você pode executar:

sudo chown -R www-data:www-data /var/www/uploads
sudo chmod -R 755 /var/www/uploads
sudo find /var/www/uploads -type f -exec chmod -x {} \;

Não execute "cegamente" comandos se não entender cada parte deles. Verifique as manpáginas se algo não estiver claro (deve ser bem direto).


Obrigado. Isso ajudou muito. apache é o usuário. Os comandos sudo chown e sudo chmod funcionam.
fun_programming

Solução clara e direta, muito obrigado. Agora eu não preciso mais da permissão arriscada do 777
lhrec_106 16/05
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.