Quais são as permissões adequadas para uma pasta de upload com PHP/Apache?
Pergunta
Desculpe pela pergunta básica - sou desenvolvedor .NET e não tenho muita experiência com configurações LAMP.
Tenho um site PHP que permitirá uploads para uma pasta específica.Disseram-me que esta pasta precisa pertencer ao usuário do servidor web para que o processo de upload funcione, então criei a pasta e defini as permissões como tal:
chown apache:apache -R uploads/
chmod 755 -R uploads/
O único problema agora é que o usuário do FTP não consegue modificar os arquivos enviados.
Existe uma configuração de permissão que me permitirá ainda fazer upload de arquivos e modificá-los posteriormente como um usuário diferente do usuário do servidor da web?
Solução
Você pode criar um novo grupo com o usuário Apache e o usuário FTP como membros e então dar permissão na pasta de upload 775.Isso deve dar aos usuários do Apache e do FTP a capacidade de gravar nos arquivos da pasta, mas evitar que todos os outros os modifiquem.
Outras dicas
Eu aceitaria a resposta de Ryan se você realmente quiser fazer isso.
Em geral, em um ambiente *nix, você sempre deseja errar ao conceder o mínimo de permissões possível.
9 em cada 10 vezes, 755 é a permissão ideal para isso - já que o único usuário com capacidade de modificar os arquivos será o servidor web.Mude para 775 com seu usuário FTP em um grupo se você REALMENTE precisar mudar isso.
Como você mesmo admite que é novo no php, aqui está um link útil para melhorar a segurança do seu serviço de upload:move_uploaded_file
Ou pelo menos 766.
- ler = 4
- escrever = 2
- executar = 1
7 = ler + escrever + executar
6 = ler + escrever
- primeiro número:proprietário
- segundo número:grupo
- terceiro número:outros usuários
Acrescentarei que se você estiver usando o SELinux, você precisa ter certeza de que o tipo de contexto é tmp_t Você pode fazer isso usando o utilitário chcon
chcon -t tmp_t carrega
O que é importante é que o apache
usuário e grupo devem ter mínimo read
acesso e em alguns casos execute
acesso.Para o resto você pode dar 0
acesso.
Esta é a configuração mais segura.
Eu apoiaria a ideia de criar um grupo FTP que tenha direitos de upload.No entanto, não acho que seja necessário dar permissão ao 775.7 significa ler, escrever, executar.Normalmente você deseja permitir que determinados grupos leiam e escrevam, mas dependendo do caso, a execução pode não ser necessária.
Lembre-se também CHOWN
ou chgrp
pasta do seu site.Tentar myusername# chown -R myusername:_www uploads
Com base na resposta de @Ryan Ahearn
, a seguir está o que eu fiz em Ubuntu
16.04 para criar um usuário front
que só tem permissão para o diretório web do nginx /var/www/html
.
Passos:
* pre-steps: * basic prepare of server, * create user 'dev' which will be the owner of "/var/www/html", * * install nginx, * * * create user 'front' sudo useradd -d /home/front -s /bin/bash front sudo passwd front # create home folder, if not exists yet, sudo mkdir /home/front # set owner of new home folder, sudo chown -R front:front /home/front # switch to user, su - front # copy .bashrc, if not exists yet, cp /etc/skel/.bashrc ~front/ cp /etc/skel/.profile ~front/ # enable color, vi ~front/.bashrc # uncomment the line start with "force_color_prompt", # exit user exit * * add to group 'dev', sudo usermod -a -G dev front * change owner of web dir, sudo chown -R dev:dev /var/www * change permission of web dir, chmod 775 $(find /var/www/html -type d) chmod 664 $(find /var/www/html -type f) * * re-login as 'front' to make group take effect, * * test * * ok *